14.9 PARSEファンクション
PARSEファンクションを使用すると、XML、XLSX、CSVまたはJSONファイルを解析して、次の構造の汎用表を返すことができます。
LINE_NUMBER COL001 COL002 COL003 COL004 ... COL300
通常、値はVARCHAR2
形式で返されます。返される表の行は、最大で300個の列を持つことができます。Varchar 2表列の最大長は4000バイトです。最大行長は指定されていません。サポートされている300列のうち20列はCLOBとして処理できます。
このファンクションを呼び出すと、ファイルの解析がすぐに実行されます。コレクションまたは一時表にはデータは書き込まれません。
P_FILE_PROFILE
パラメータを渡さない場合、このファンクションは解析中に列情報を使用してファイル・プロファイルを計算します。P_DETECT_DATA_TYPES
を'Y'
(デフォルト)として渡した場合、このファンクションは解析時に列のデータ型も検出します。計算されたファイル・プロファイルは、このファンクションの終了後にGET_FILE_PROFILE
を使用して取得できます。
PARSE
の呼出し: この表ファンクションを使用して、ファイルを解析し、データ・プレビューを表示するための行と列を取得します。GET_FILE_PROFILE
の呼出し - ファイル・プロファイル情報をJSON形式で取得します。- データの処理 - カスタム処理を実行するためのデータ・プロファイルに基づいてSQL問合せを生成します。
ノート:
- JSON解析は、データベース・バージョン11.2および12.1.0.1でサポートされます。この場合、このファンクションは
APEX_JSON
ファンクションおよびXMLTABLE
ファンクションを使用します。パフォーマンス上の理由により、データベースを少なくとも12.2にアップグレードすることをお薦めします。それらのバージョンでは、JSON解析が大幅に速く処理されます。 - XLSX解析は、
APEX_ZIP
を使用してXLSXアーカイブから個々のXMLファイルを抽出することによって実行されます。実際のXLSX解析は、XMLTABLE SQL
ファンクションを使用して実行されます。
CLOBサポートについて
リリース19.2以降、このパッケージでは400バイトを超える文字列値がサポートされています。サポートされている300列のうち20列をCLOB
として処理できます。CLOB
サポートのレベルは、解析されるファイル・タイプによって異なります。
- CSVおよびXLSX
CLOB
値は32Kまでサポートされています。CLOB
列は検出中に検出できます- データ・プロファイルが検出された場合、4000バイト未満の値は、通常は
COLNNN
として返されます。CLOB
値はCLOBNN
列で返され、最初の1000文字はCOLNNN
として返されます。データ・プロファイルが渡され、それにCLOB
列が定義されている場合は、すべての値がCLOBNN
列のみで戻されます。
- XML
- 32Kを超える
CLOB
値がサポートされています。 CLOB
列は検出中に検出できます- データ・プロファイルが検出された場合、4000バイト未満の値は、通常は
COLNNN
として返されます。CLOB
値はCLOBNN
列で返され、最初の1000文字はCOLNNN
として返されます。データ・プロファイルが渡され、それにCLOB
列が定義されている場合は、すべての値がCLOBNN
列のみで戻されます。
- 32Kを超える
- JSON
- 32Kを超える
CLOB
値がサポートされています。 CLOB
列は、検出中に検出されません。CLOB
サポートがアクティブになるのは、CLOB
列を含むファイル・プロファイルがp_file_profile
パラメータとして渡される場合のみです。- 12cデータベースでは
JSON_TABLE
でCLOBがサポートされていないため、CLOB列を含むファイル・プロファイルが渡された場合は、パーサーではXMLTYPEベースの処理が使用されます。処理は著しく遅くなります。
- 32Kを超える
構文
FUNCTION PARSE(
p_content IN BLOB,
p_file_name IN VARCHAR2 DEFAULT NULL,
p_file_type IN T_FILE_TYPE DEFAULT NULL,
p_file_profile IN CLOB DEFAULT NULL,
p_detect_data_types IN VARCHAR2 DEFAULT 'Y',
p_decimal_char IN VARCHAR2 DEFAULT NULL,
p_xlsx_sheet_name IN VARCHAR2 DEFAULT NULL,
p_row_selector IN VARCHAR2 DEFAULT NULL,
p_csv_row_delimiter IN VARCHAR2 DEFAULT LF,
p_csv_col_delimiter IN VARCHAR2 DEFAULT NULL,
p_csv_enclosed IN VARCHAR2 DEFAULT '"',
p_skip_rows IN PLS_INTEGER DEFAULT 0,
p_add_headers_row IN VARCHAR2 DEFAULT 'N',
p_file_charset IN VARCHAR2 DEFAULT 'AL32UTF8',
p_max_rows IN NUMBER DEFAULT NULL,
p_return_rows IN NUMBER DEFAULT NULL,
p_store_profile_to_collection IN VARCHAR2 DEFAULT NULL ) RETURN apex_t_parser_table pipelined;
パラメータ
表14-6 PARSEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
BLOBとして解析されるファイル・コンテンツ |
|
ファイル・タイプの導出にのみ使用されるファイルの名前。 |
|
解析するファイルのタイプ。ファイル・タイプを明示的に渡す場合に使用します。 |
|
解析に使用されるファイル・プロファイル。ファイル・プロファイルは、以前の |
|
解析中にデータ型( |
|
|
|
XLSXワークブックの場合。解析するワークシートの名前。省略した場合、このファンクションは最初に検出されたワークシートを使用します。 |
|
JSONおよびXMLファイルの場合。JSONまたはXMLファイル内の行の配列/リストへのポインタ。省略した場合、このファンクションは次のように処理します。
|
|
CSV解析のデフォルトの行デリミタをオーバーライドします。1文字に制限され、デフォルトでラインフィード(LF)に設定されます。ラインフィード行デリミタ文字は、キャリッジ・リターン/ラインフィード (CRLF)も処理することに注意してください。 |
|
特定のCSV列デリミタを使用します。省略した場合、ファンクションは最初の行の内容に基づいて列デリミタを検出します。 |
|
CSV解析のデフォルトの囲み文字をオーバーライドします。 |
|
解析時に最初のN行をスキップします。 |
|
XML、JSONの場合。列ヘッダー(タグ、属性名)を最初の行として表示します。 |
|
ファイル・エンコーディング( |
|
|
|
返される行数。これはパーサーが返す予定の行数よりも多くの行が解析されそうな(データ型検出のため)場合に役立ちます。指定された行数が出力されると、このファンクションは、 |
|
解析時に計算されたファイル・プロファイルをコレクションに格納します。コレクションが存在する場合は、クリアされます。計算されたプロファイルにのみ使用できます。 |
戻り値
APEX_T_PARSER_ROW
型の行を返します。
LINE_NUMBER COL001 COL002 COL003 COL004 ... COL300
例
select line_number, col001,col002,col003,col004,col005,col006,col007,col008
from table(
apex_data_parser.parse(
p_content => {BLOB containing XLSX spreadsheet},
p_file_name => 'test.xlsx',
p_xlsx_sheet_name => 'sheet1.xml') ) ;
LINE_NUMBER COL001 COL002 COL003 COL004 COL005 COL006 COL007 COL008
----------- -------- ------------ ------------ -------- --------------- -------- ------------ -------------
1 0 First Name Last Name Gender Country Age Date Id
2 1 Dulce Abril Female United States 32 15/10/2017 1562
3 2 Mara Hashimoto Female Great Britain 25 16/08/2016 1582
4 3 Philip Gent Male France 36 21/05/2015 2587
5 4 Kathleen Hanner Female United States 25 15/10/2017 3549
6 5 Nereida Magwood Female United States 58 16/08/2016 2468
7 6 Gaston Brumm Male United States 24 21/05/2015 2554
8 7 Etta Hurn Female Great Britain 56 15/10/2017 3598
9 8 Earlean Melgar Female United States 27 16/08/2016 2456
10 9 Vincenza Weiland Female United States 40 21/05/2015 6548
: : : : : : : : :
select line_number, col001,col002,col003,col004,col005,col006,col007,col008
from table(
apex_data_parser.parse(
p_content => {BLOB containing JSON file},
p_file_name => 'test.json') ) ;
LINE_NUMBER COL001 COL002 COL003 COL004 COL005
----------- --------- ---------------------------------------------- --------------- --------------
1 Feature 1.5 41km E of Cape Yakataga, Alaska 1536513727239 1536514117117
2 Feature 0.21 11km ENE of Aguanga, CA 1536513299520 1536513521231
3 Feature 1.84 5km SSW of Pahala, Hawaii 1536513262940 1536513459610
4 Feature 2.55 9km W of Volcano, Hawaii 1536513100890 1536513446680
5 Feature 1.3 62km ESE of Cape Yakataga, Alaska 1536512917361 1536513322236
6 Feature 1.79 7km SW of Tiptonville, Tennessee 1536512379690 1536512668010
7 Feature 1.9 126km NNW of Arctic Village, Alaska 1536512346186 1536512846567
8 Feature 1.4 105km NW of Arctic Village, Alaska 1536512140162 1536512846334
大規模CSVファイルについて
APEX_DATA_PARSER.PARSE
に渡されるBLOBが50 MB未満の場合、Oracle Application Expressにより、BLOBは_internal
、cached_ temporary
LOBにコピーされます。したがって、すべてのCSV解析はメモリー内で実行されます。より大規模なBLOBの場合、Oracle Application Expressでは元のBLOBロケータに対してCSV解析が実行されます。表から選択した場合、CSV解析はディスクに対して実行できますが、著しく遅くなる可能性があります。解析されたCSVファイルが50 MBを超えると、パフォーマンスが低下する可能性があります。
ただし、開発者は、大規模ファイルの場合でも、キャッシュされた一時LOBを明示的に作成するためにDBMS_LOB.CREATETEMPORARY
(CACHE => TRUE
を渡す)およびDBMS_LOB.COPY
プロシージャを使用することもできます。元のBLOBのかわりに、キャッシュされた一時LOBをAPEX_DATA_PARSER.PARSE
に渡すことができます。この方法では、50 MBを超えるファイルのインメモリー解析も可能になります。
ノート:
Oracle Database PL/SQLパッケージおよびタイプ・リファレンスのCREATETEMPORARYプロシージャおよびCOPYプロシージャ
親トピック: APEX_DATA_PARSER