[SQL] 오라클은 : 큰 XML 파일을로드?
SQL오라클은 : 큰 XML 파일을로드?
그래서 지금은 내가 관심이있는 XML 데이터의 큰 비트를 가지고 :
http://blog.stackoverflow.com/2009/06/stack-overflow-creative-commons-data-dump
나는 놀 오라클이 점을로드하고 싶습니다.
어떻게 직접 오라클에 직접 큰 XML 파일을로드 할 수 있습니까? (데이터 파일이 서버에서 열 수) 서버 측 솔루션과 클라이언트 측 솔루션을 환영했다.
다음은 구체적인 예를 들어 badges.xml의 비트입니다.
<?xml version="1.0" encoding="UTF-8" ?>
<badges>
<row UserId="3718" Name="Teacher" Date="2008-09-15T08:55:03.923"/>
<row UserId="994" Name="Teacher" Date="2008-09-15T08:55:03.957"/>
...
해결법
-
==============================
1.당신은 SQL을 통해 서버에 XML 파일에 액세스 할 수 있습니다. /tmp/tmp.xml에서 데이터, 당신은 디렉토리를 먼저 선언합니다 :
당신은 SQL을 통해 서버에 XML 파일에 액세스 할 수 있습니다. /tmp/tmp.xml에서 데이터, 당신은 디렉토리를 먼저 선언합니다 :
SQL> create directory d as '/tmp'; Directory created
그런 다음 직접 XML 파일을 조회 할 수있다 :
SQL> SELECT XMLTYPE(bfilename('D', 'tmp.xml'), nls_charset_id('UTF8')) xml_data 2 FROM dual; XML_DATA -------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <badges> [...]
파일의 필드에 액세스하려면, 당신은 예를 들어 다른 SO에 기술 된 방법을 사용할 수 있습니다 :
SQL> SELECT UserId, Name, to_timestamp(dt, 'YYYY-MM-DD"T"HH24:MI:SS.FF3') dt 2 FROM (SELECT XMLTYPE(bfilename('D', 'tmp.xml'), nls_charset_id('UTF8')) xml_data 3 FROM dual), 4 XMLTable('for $i in /badges/row 5 return $i' 6 passing xml_data 7 columns UserId NUMBER path '@UserId', 8 Name VARCHAR2(50) path '@Name', 9 dt VARCHAR2(25) path '@Date'); USERID NAME DT ---------- ---------- --------------------------- 3718 Teacher 2008-09-15 08:55:03.923 994 Teacher 2008-09-15 08:55:03.957
-
==============================
2.첫째, 오라클은 그것을 볼 수있는 위치에 XML 문서를 받고 - 당신은이 문제에 대해 얘기하는 것 같다. 그리고 어쩌면 표준 관계형 도구는 데이터에 적용 할 수 있도록 그것을 만들기.
첫째, 오라클은 그것을 볼 수있는 위치에 XML 문서를 받고 - 당신은이 문제에 대해 얘기하는 것 같다. 그리고 어쩌면 표준 관계형 도구는 데이터에 적용 할 수 있도록 그것을 만들기.
첫 번째의 경우, 또는 DBA는 BLOB, CLOB, 또는 BFILE 열이있는 테이블을 생성하고 데이터를로드 할 수 있습니다. 데이터베이스가 살고있는 서버에 액세스 할 수있는 경우, 데이터베이스의 디렉토리 오브젝트를 정의 할 수있는 운영 시스템 디렉토리를 가리키는. 그런 다음이 파일을 넣어. 그리고 그 중 하나 BFILE로 설정하거나 그것을 읽고 (CLOB 및 BLOB 저장소를 데이터베이스에서, BFILE 매장 운영 시스템 측의 파일에 대한 지적을)..
또한, 직접 데이터베이스에 CLOB에 쓰기 수 있도록 몇 가지 도구를 사용합니다. 어쨌든, 그 데이터베이스에 XML 인스턴스 문서를 볼 수있는 지점을 가져옵니다.
그래서 지금 당신은 인스턴스 문서를 볼 수 있습니다. 1 단계가 수행된다.
버전에 따라, 오라클은 관계형 테이블로 XML을 분쇄하기위한 꽤 좋은 도구가 있습니다.
그것은 꽤 선언 할 수 있습니다. 이것이 내가 실제로했던 것 이상으로 얻을 수 있지만, 당신은 이론적으로 데이터베이스로 XML 스키마를로드하고 관계형 테이블과 XML 사이의 횡단 보도로 주석을 달 수 있습니다 (나는 그것을이 가을을 시도 할 것이다 프로젝트가). 그런 다음 CLOB 또는 BFILE을 가지고 정의 된 스키마와 함께 XMLTYPE 열로 변환하면됩니다 - 파쇄는 모든 관계의 데이터가 모두가 자동으로 발생, 그것은 XQUERY 또는 XML없이 모든 표준 SQL을 사용할 수 확장.
오히려 XQuery를 사용하려는 경우 물론, 다음 단지의 CLOB 또는 BFILE으로 데리고 XMLTYPE로 변환하고, 그것을 위해 이동합니다.
-
==============================
3.나는 간단한을 할 것입니다 :
나는 간단한을 할 것입니다 :
grep '<row' file.xml |\ gawk -F '"' '{printf("insert into badges(userid,name,date) values (\"%s\",\"%s\",\"%s\");\n",$2,$4,$6); } > request.sql
또는 당신은 SAX 파서를 사용하는 자바 프로그램을 만들 수 있습니다. 핸들러는 새로운 요소 '행'을 발견 할 때마다 속성을 얻고 데이터베이스에 새 레코드를 삽입합니다.
from https://stackoverflow.com/questions/998055/oracle-loading-a-large-xml-file by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] "최고의 경기"에 의해 MySQL의 순서 (0) | 2020.04.20 |
---|---|
[SQL] SQL 서버 : 나는 SYS 테이블을 통해 INFORMATION_SCHEMA 테이블을 사용해야합니까? (0) | 2020.04.20 |
[SQL] SQL은 : 저장 프로 시저 절에 어떻게 값을 전달합니다 (0) | 2020.04.20 |
[SQL] SQL 삽입 쿼리 C #을 사용 (0) | 2020.04.20 |
[SQL] SQL 선택 다가오는 생일 (0) | 2020.04.20 |