17.10 PARSEファンクション
このファンクションを使用すると、XML、XLSX、CSVまたはJSONファイルを解析して、次の構造の汎用表を返すことができます。
LINE_NUMBER COL001 COL002 COL003 COL004 ... COL300
通常、値はVARCHAR2
形式で返されます。返される表の行は、最大で300個の列を持つことができます。VARCHAR2表列の最大長は4000バイトです。最大行長は指定されていません。サポートされている300列のうち20列はCLOBとして処理できます。
このファンクションを呼び出すと、ファイルの解析がすぐに実行されます。データはコレクションにも一時表にも書き込まれません。
ファイル・プロファイルの解析について
p_file_profile
パラメータを渡さない場合、このファンクションは解析中に列情報を使用してファイル・プロファイルを計算します。
p_detect_data_types
をY
(デフォルト)として渡した場合、このファンクションは解析中に列データ型も検出します。ファンクションが終了した後、GET_FILE_PROFILE
を使用して、計算されたファイル・プロファイルを取得します。
PARSE
の呼出し: この表ファンクションを使用して、ファイルを解析し、データ・プレビューを表示するための行と列を取得します。GET_FILE_PROFILE
の呼出し - ファイル・プロファイル情報をJSON形式で取得します。- データの処理 - カスタム処理を実行するためのデータ・プロファイルに基づいてSQL問合せを生成します。
ノート:
XLSXの解析は、次のフェーズで行われます。- まず、
APEX_ZIP
が、XLSXアーカイブから個々のXMLファイルを抽出します。 - 次に、
XMLTABLE SQL
ファンクションが実際のXLSXを解析します。
CLOBサポートについて
APEXリリース19.2以降、このパッケージでは、4,000バイトを超える文字列値がサポートされています。サポートされている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
列のみで戻されます。
JSON
- 32Kを超える
CLOB
値がサポートされています。 CLOB
列は、検出中に検出されません。CLOB
サポートがアクティブになるのは、CLOB
列を含むファイル・プロファイルがp_file_profile
パラメータとして渡される場合のみです。- 12cデータベースでは
JSON_TABLE
でCLOBがサポートされていないため、CLOB列を含むファイル・プロファイルが渡された場合は、パーサーではXMLTYPEベースの処理が使用されます。処理は著しく遅くなります。
大規模CSVファイルについて
APEX_DATA_PARSER.PARSE
に渡されるBLOBが50 MB未満の場合、Oracle APEXにより、BLOBは内部のキャッシュされた一時LOBにコピーされます。したがって、すべてのCSV解析はメモリー内で実行されます。より大規模なBLOBの場合、APEXでは元のBLOBロケータに対してCSV解析が実行されます。表から選択した場合、CSV解析はディスクに対して実行できますが、著しく遅くなる可能性があります。解析されたCSVファイルが50 MBを超えると、パフォーマンスが低下する可能性があります。
ただし、開発者は、大規模ファイルの場合でも、キャッシュされた一時LOBを明示的に作成するためにDBMS_LOB.CREATETEMPORARY
(CACHE => TRUE
を渡す)およびDBMS_LOB.COPY
プロシージャを使用することもできます。元のBLOBのかわりに、キャッシュされた一時LOBをAPEX_DATA_PARSER.PARSE
に渡すことができます。この方法では、50 MBを超えるファイルのインメモリー解析も可能になります。
構文
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
p_fix_excel_precision IN VARCHAR2 DEFAULT 'N' )
RETURN apex_t_parser_table pipelined;
パラメータ
表17-7 PARSEファンクションのパラメータ
パラメータ | 説明 |
---|---|
p_content |
BLOBとして解析されるファイル・コンテンツ |
p_file_name |
ファイル・タイプの導出にのみ使用されるファイルの名前。P_FILE_NAME 、P_FILE_TYPE またはP_FILE_PROFILE のいずれかを渡す必要があります。
|
p_file_type |
解析するファイルのタイプ。ファイル・タイプを明示的に渡す場合に使用します。P_FILE_NAME 、P_FILE_TYPE またはP_FILE_PROFILE のいずれかを渡す必要があります。
|
p_file_profile |
解析に使用されるファイル・プロファイル。ファイル・プロファイルは、以前のPARSE() の呼出しで計算されている可能性があります。再度渡した場合、このファンクションは、パフォーマンスを改善するために、一部のプロファイル検出ロジックをスキップして、渡されたプロファイルを使用します。
|
p_detect_data_types |
解析中にデータ型(NUMBER、DATE、TIMESTAMP )を検出するかどうか。'Y' に設定すると、このファンクションはファイル・プロファイルを計算し、そのプロファイルにデータ型情報を追加します。'N' に設定すると、データ型は検出されず、すべての列がVARCHAR2 になります。デフォルトは'Y' です。
|
p_decimal_char |
NUMBER データ型を検出する場合は、この小数点文字を使用します。指定しない場合、プロシージャで小数点文字が自動検出されます。
|
p_xlsx_sheet_name |
XLSXワークブックの場合。解析するワークシートの名前。省略した場合、このファンクションは最初に検出されたワークシートを使用します。 |
p_row_selector |
JSONおよびXMLファイルの場合。JSONまたはXMLファイル内の行の配列/リストへのポインタ。省略した場合、このファンクションは次のように処理します。
|
p_csv_row_delimiter |
CSV解析のデフォルトの行デリミタをオーバーライドします。1文字に制限され、デフォルトでラインフィード(LF)に設定されます。ラインフィード行デリミタ文字は、キャリッジ・リターン/ラインフィード (CRLF)も処理することに注意してください。 |
p_csv_col_delimiter |
特定のCSV列デリミタを使用します。省略した場合、ファンクションは最初の行の内容に基づいて列デリミタを検出します。 |
p_csv_enclosed |
CSV解析のデフォルトの囲み文字をオーバーライドします。 |
p_skip_rows |
解析時に最初のN行をスキップします。 |
p_add_headers_row |
XML、JSONの場合。列ヘッダー(タグ、属性名)を最初の行として表示します。 |
p_file_charset |
ファイル・エンコーディング(UTF-8 (AL32UTF8) 以外の場合)。
|
p_max_rows |
P_MAX_ROWS が返された後、解析を停止します。
|
p_return_rows |
返される行数。これはパーサーが返す予定の行数よりも多くの行が解析されそうな(データ型検出のため)場合に役立ちます。指定された行数が出力されると、このファンクションは、P_MAX_ROWS に達するまで、またはSQL問合せのROWNUM < x句に到達して実行が停止されるまで、解析(および検出されたデータ型の調整)を続行します。
|
p_store_profile_to_collection |
解析時に計算されたファイル・プロファイルをコレクションに格納します。コレクションが存在する場合は、クリアされます。計算されたプロファイルにのみ使用できます。 |
p_fix_excel_precision |
XLSXファイルの数値を15桁の有効桁数に丸めるかどうか。これは、Microsoft Excelで生成されたXLSXファイルに役立ちます。Excelでは、最大15桁の有効桁数の浮動小数点数として数値を格納します。計算結果に関して、端数処理の問題が発生する可能性がありますが、このパラメータを使用すれば修正できます。 |
戻り値
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
親トピック: APEX_DATA_PARSER