17.4 ORACLE_BIGDATAファイルへのアクセス

ORACLE_BIGDATAを使用するには、データにアクセスして解析する方法を示す情報をアクセス・パラメータに指定します。

外部オブジェクト・ストアにアクセスするには、アクセス・パラメータcom.oracle.bigdata.fileformatで、csvtextfileavroparquetjsondocまたはorcのいずれかの値を使用してファイル形式タイプを定義します。
com.oracle.bigdata.fileformat=[csv|textfile|avro|parquet|orc|jsondoc]

ORACLE_BIGDATAを使用すると、テストや単純な問合せ目的でローカル・ファイルにアクセスすることもできます。この場合、LOCATIONフィールド値はORACLE_LOADERに使用する値と同じです。LOCATIONフィールドでは、Oracleディレクトリ・オブジェクトの後にファイルの名前を続けることができます。ローカル・ファイルの場合、資格証明オブジェクトは必須ではありません。ただし、ファイルにアクセスするには、ディレクトリ・オブジェクトに対する権限が必要です。すべてのファイルのリストについては、次を参照してください:

ORACLE_BIGDATAアクセス・パラメータ

17.4.1 プロパティを指定するための構文ルール

プロパティは、SQL CREATE TABLEACCESS PARAMETERS句および構成ファイル内に、キーワード/値のペアを使用して設定します。

構文は次のルールに従う必要があります。

  • 各キーワード/値のペアの形式は、キーワード(コロンまたは等号)と、です。有効なキーワード/値のペアを次に示します。

    keyword=value
    keyword:value

    値は、セパレータの後の最初の非空白文字から行末までのすべてになります。セパレータと値の間の空白は無視されます。値の後の空白は保持されます。

  • プロパティ定義は複数の行にまたがることができます。この場合、最後の行を除き、行の終了文字の前にバックスラッシュ(エスケープ文字)を付けます。たとえば:

    Keyword1=  Value part 1 \
               Value part 2 \
               Value part 3
  • 特殊文字は、文字の前にバックスラッシュ(エスケープ文字)を付けることで、プロパティ名またはプロパティ値に埋め込むことができます。次の表で、特殊文字について説明します。

表17-1 プロパティの特殊文字

エスケープ・シーケンス 文字

\b

バックスペース(\u0008)

\t

水平タブ(\u0009)

\n

LF (\u000a)

\f

改ページ(\u000c)

\r

改行(\u000d)

"

二重引用符(\u0022)

'

一重引用符(\u0027)

\

バックスラッシュ(\u005c)

複数のバックスラッシュが行末にある場合、パーサーは奇数のバックスラッシュに対してのみ値を次の行に継続します。

\uxxxx

Unicodeコード・ポイント

ノート:

複数のバックスラッシュが行末にある場合、パーサーは奇数のバックスラッシュに対してのみ値を次の行に継続します。

17.4.2 ORACLE_BIGDATA共通アクセス・パラメータ

すべてのファイル形式に共通するアクセス・パラメータのセットがあります。一部のパラメータは、特定のファイル形式に固有です。

共通のアクセス・パラメータ

次の表に、ORACLE_BIGDATAを介してアクセスされるすべてのファイル形式に共通するパラメータを示します。1列目には、すべてのデータ・ファイル・タイプに共通する各アクセス・パラメータを示します。2列目は各パラメータの説明です。

ノート:

特定のファイル形式に固有のパラメータは、他のファイル形式には使用できません。

表17-2 共通のアクセス・パラメータ

共通のアクセス・パラメータ 説明

com.oracle.bigdata.fileformat

ファイルの形式を指定します。このパラメータの値によって、ファイルを処理するリーダーが識別されます。各リーダーは追加のアクセス・パラメータをサポートでき、それらは他のリーダーでサポートされるものもサポートされないものもあります。

有効な値: parquetorctextfileavrocsvjsondoc
  • parquet - ファイルはParquetデータ・ファイル形式を使用します
  • ORC - ファイルはORC列ストレージ・ファイル形式を使用します
  • textfile - ファイルはテキスト・ファイル形式を使用します
  • avro - ファイルはAvroファイル形式を使用します
  • CSV - ファイルはCSVテキスト・ファイル形式を使用します
  • jsondoc - JSONファイルを読み取ります。JSON値は、SQL/JSONを使用して問い合せることができる単一のJSON列にマッピングされます。

デフォルト: parquet

com.oracle.bigdata.log.opt

ログ・メッセージをログ・ファイルに書き込むかどうかを指定します。noneを指定すると、ログ・ファイルは作成されません。値がnormalの場合、ファイル・リーダーでメッセージを書き込むようになっていると、ログ・ファイルが作成されます。ログ・ファイルに書き込む内容はファイル・リーダー次第です。

有効な値: normalnone

デフォルト: none

com.oracle.bigdata.log.qc

パラレル問合せコーディネータによって作成されるログ・ファイルの名前を指定します。このパラメータは、com.oracle.bigdata.log.optnormalに設定されている場合にのみ使用されます。有効な値は、com.oracle.bigdata.log.qcで指定された値と同じです。

com.oracle.bigdata.log.exec

問合せの実行時に作成されるログ・ファイルの名前を指定します。この値は、com.oracle.bigdata.log.execがnormalに設定されている場合のみ使用されます(必須です)。有効な値は、ORACLE_HIVEおよびORACLE_HDFSで指定されている値と同じです。

有効な値: normalnone

デフォルト: none

com.oracle.bigdata.credential.name

オブジェクト・ストア内のデータ・ファイルにアクセスするときに使用する資格証明オブジェクトを指定します。

このアクセス・パラメータは、オブジェクト・ストアへのアクセスに必要です。ディレクトリ・オブジェクトを介したファイルへのアクセスの場合や、パブリック・バケットに格納されているデータの場合は必要ありません。

資格証明に指定する名前は、表の所有者と同じスキーマにある資格証明オブジェクトの名前である必要があります。この表に対するSELECTまたはREADのアクセス権をユーザーに付与すると、その資格証明が表へのアクセスに使用されます。

資格証明オブジェクトを作成するには、DBMS_CREDENTIAL PL/SQLパッケージのDBMS_CREDENTIAL.CREATE_CREDENTIALを使用します。たとえば:

exec dbms_credential.create_credential(credential_name => 'MY_CRED',username =>'username', password => 'password');

CREATE TABLE文で、資格証明パラメータの値を資格証明オブジェクトの名前に設定します。たとえば:

com.oracle.bigdata.credential.name=MY_CRED

com.oracle.bigdata.credential.schema

オブジェクト・ストアにアクセスするための資格証明オブジェクトが作成されるスキーマを指定します。このパラメータは、ORACLE_BIGDATAアクセス・ドライバを使用して外部表を作成するときに、ACCESS PARAMETERS句で使用されます。

17.4.3 ORACLE_BIGDATA固有のアクセス・パラメータ

Avro、Parquet、TextfileおよびCSVには、すべて固有のアクセス・パラメータがあります。

17.4.3.1 Avro固有のアクセス・パラメータ

共通アクセス・パラメータに加えて、Avroファイル形式にのみ適用されるパラメータもあります。

この表では、1列目にAvroファイル形式に固有のアクセス・パラメータを示し、2列目でそのパラメータについて説明します。現時点では、Avro固有のパラメータは1つのみです。

ノート:

特定のファイル形式に固有のパラメータは、他のファイル形式には使用できません。

表17-3 Avro固有のアクセス・パラメータ

Avro固有のパラメータ 説明

com.oracle.bigdata.avro.decimaltpe

バイト配列に格納されている10進数の表現を指定します。

有効な値: intintegerstrstring

デフォルト: このパラメータを使用しない場合、Avroの10進数列は、バイト配列に格納されているのはAvro仕様で定義されているとおりの値の数値表現(デフォルトはint)であるという想定で読み取られます。

17.4.3.2 Avroファイルを使用した外部表の作成の例

次の例は、Oracle Cloud Object Storageに格納されているAvroファイルを使用して外部表を問い合せて作成する方法を示しています。

17.4.3.2.1 Avroファイルを使用した外部表の作成

この例では、外部Avroファイルを参照するデータベース・オブジェクトを作成します。

例17-7 外部表の作成

CREATE TABLE CUSTOMERS_AVRO_XT
(
    CUSTOMER_ID NUMBER,
    FIRST_NAME VARCHAR2(64),
    LAST_NAME VARCHAR2(64),
    EMAIL VARCHAR2(64),
    SIGNUP_DATE DATE
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_BIGDATA
    ACCESS PARAMETERS
    (
        com.oracle.bigdata.fileformat=AVRO
        com.oracle.bigdata.credential.name="OCI_CRED"
    )
    LOCATION ('https://objectstorage.us-ashburn-1.oraclecloud.com/n/my_namespace/b/sales_data/o/customers_avro/')
);
17.4.3.2.2 DBMS_CLOUDを使用したAvroファイルの外部表の作成

この例では、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、Avroファイル形式の外部表を定義します。

例17-8 DBMS_CLOUDを使用した外部表の作成

BEGIN
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name => 'CUSTOMERS_AVRO_XT',
        credential_name => 'OCI_CRED',
        file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/my_namespace/b/sales_data/o/customers_avro/*.avro',
        format => '{"type": "avro"}'
    );
END;

ノート:

列リストと列タイプを指定する必要はありません。列リストと列タイプは、ファイル自体から自動的に導出されます。

17.4.3.3 Parquet固有のアクセス・パラメータ

一部のアクセス・パラメータは、Parquetファイル形式でのみ有効です。

この表では、1列目にParquetファイル形式に固有のアクセス・パラメータを示し、2列目でそのパラメータについて説明します。

ノート:

特定のファイル形式に固有のパラメータは、他のファイル形式には使用できません。

表17-4 Parquet固有のアクセス・パラメータ

Parquet固有のアクセス・パラメータ 説明

com.oracle.bigdata.prq.binary_as_string

これは、binaryを文字列として格納するかどうかを指定するブール型プロパティです。

有効な値: truetyesylfalsefnon0

デフォルト: true

com.oracle.bigdata.prq.int96_as_timestamp

これは、int96がタイムスタンプを表すかどうかを指定するブール型プロパティです。

有効な値: truetyesylfalsefnon0

デフォルト: true

17.4.3.4 Avroファイルを使用した外部表の作成の例

次の例は、Oracle Cloud Object Storageに格納されているAvroファイルを使用して外部表を問い合せて作成する方法を示しています。

17.4.3.4.1 インライン外部表を使用したParquet外部データの問合せ

この例では、データベース・オブジェクトを作成せずに、外部Parquetファイルからデータを直接問い合せます。

例17-9 インライン外部表を使用した外部データの問合せ

SELECT *
FROM EXTERNAL
(
    (
        CUSTOMER_ID NUMBER,
        FIRST_NAME VARCHAR2(64),
        LAST_NAME VARCHAR2(64),
        EMAIL VARCHAR2(64),
        SIGNUP_DATE VARCHAR2(64)
    )
    TYPE ORACLE_BIGDATA
    ACCESS PARAMETERS
    (
        com.oracle.bigdata.fileformat=parquet
        com.oracle.bigdata.credential.name=OCI_CRED
    )
    LOCATION ('https://objectstorage.us-ashburn-1.oraclecloud.com/n/my_namespace/b/sales_data/o/customers_parquet/')
) t;
17.4.3.4.2 Parquetファイルを参照する外部表の作成

この例では、外部Parquetファイルを参照するデータベース・オブジェクトを作成します。

例17-10 外部表の作成

CREATE TABLE CUSTOMERS_PARQ_XT
(
    CUSTOMER_ID NUMBER,
    FIRST_NAME VARCHAR2(64),
    LAST_NAME VARCHAR2(64),
    EMAIL VARCHAR2(64),
    SIGNUP_DATE VARCHAR2(64)
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_BIGDATA
    ACCESS PARAMETERS
    (
        com.oracle.bigdata.fileformat=parquet
        com.oracle.bigdata.credential.name=OCI_CRED
    )
    LOCATION ('https://objectstorage.us-ashburn-1.oraclecloud.com/n/my_namespace/b/sales_data/o/customers_parquet/')
);
17.4.3.4.3 Parquetファイルを参照するDBMS_CLOUDを使用した外部表の作成

この例では、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、Parquetファイル形式の外部表を定義します。

例17-11 DBMS_CLOUDを使用した外部表の作成

BEGIN
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name => 'CUSTOMERS_PARQ_XT',
        credential_name => 'OCI_CRED',
        file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/my_namespace/b/sales_data/o/customers_parquet/*.parquet',
        format => '{"type": "parquet"}'
    );
END;

ノート:

列リストと列タイプを指定する必要はありません。列リストと列タイプは、ファイル自体から自動的に導出されます。

17.4.3.5 テキスト・ファイルおよびCSVに 固有のアクセス・パラメータ

テキスト・ファイルとカンマ区切り値(csv)ファイル形式は、Hiveテキスト・ファイル形式に似ています。

テキスト・ファイルおよびCSVファイル形式は、デリミタ付きファイルからテキストおよびcsvデータを読み取ります。ORACLE_BIGDATAは、行の終了文字(\n\rまたは\r\n)を自動的に検出します。デフォルトでは、ファイル内のフィールドはカンマで区切られており、ファイル内のフィールドの順序は外部表内の列の順序と一致すると想定されています。

ノート:

特定のファイル形式に固有のパラメータは、他のファイル形式には使用できません。

表17-5 テキスト・ファイルおよびCSVに固有のアクセス・パラメータ

Textfileに固有のアクセス・パラメータ 説明

com.oracle.bigdata.buffersize

ファイルの読取りに使用する入出力(I/O)バッファのサイズを指定します。値は、バッファのサイズ(KB単位)です。また、バッファ・サイズはレコードで許容される最大サイズでもあります。フォーマット・リーダーは、この値より大きいレコードを検出すると、エラーを返します。

デフォルト: 1024

com.oracle.bigdata.blankasnull

trueに設定すると、空白で構成されるフィールドがNULLとしてロードされます。

有効な値: truefalse

デフォルト: false

: com.oracle.bigdata.blankasnull=true

com.oracle.bigdata.characterset

ソース・ファイルの文字セットを指定します。

有効な値: UTF-8

デフォルト: UTF-8

: com.oracle.bigdata.characterset=UTF-8

com.oracle.bigdata.compressiontype

このパラメータを指定した場合、コードは、指定された圧縮スキームに従ってデータを解凍しようとします。

有効な値: gzipbzip2zlibdetect

デフォルト: 圧縮なし

detectを指定すると、フォーマット・リーダーはサポートされている圧縮方法のうちどれを使用してファイルが圧縮されたかを判別しようとします。

com.oracle.bigdata.conversionerrors

行でデータ型の変換エラーが発生した場合、関連する列をnullとして格納するか、その行を拒否します。

有効な値: reject_recordstore_null

デフォルト: store_null

: com.oracle.bigdata.conversionerrors=reject_record

com.oracle.bigdata.csv.rowformat.nulldefinedas

フィールドの値を示すために使用する文字がNULLであることを指定します。パラメータを指定しない場合、値はありません。

com.oracle.bigdata.csv.rowformat.fields.terminator

フィールド値を区切るために使用する文字を指定します。文字値は一重引用符で囲む必要があります。例: '|'

デフォルト: ','

com.oracle.bigdata.csv.rowformat.fields.escapedby

埋込みフィールドの終了記号またはフィールド値の行の終了文字をエスケープするために使用する文字を指定します。文字値は一重引用符で囲む必要があります。例: '\'

com.oracle.bigdata.dateformat

ソース・ファイル内の日付書式を指定します。書式オプションAutoでは、次の書式がチェックされます。

JMM-DD-YYYYBCMM-DD-YYYYYYYYMMDD HHMISSYYMMDD HHMISSYYYY.DDDYYYY-MM-DD

デフォルト: yyyy-mm-dd hh24:mi:ss

: com.oracle.bigdata.dateformat= "MON-RR-DDHH:MI:SS"

com.oracle.bigdata.fields

データ・ファイルのフィールドの順序を指定します。値は、データ型がオプションであるという1つの例外を除き、ORACLE_HDFScom.oracle.bigdata.fieldsと同じです。データ・ファイルはテキストであるため、テキスト・ファイル・リーダーはフィールドのデータ型を無視し、すべてのフィールドがテキストであるとみなします。データ型はオプションであるため、このパラメータはフィールド名のリストにできます。

com.oracle.bigdata.ignoreblanklines

trueに設定すると、空白行は無視されます。

有効な値: truefalse

デフォルト: false

: com.oracle.bigdata.ignoreblanklines=true

com.oracle.bigdata.ignoremissingcolumns

見つからない列がNULLとして格納されます。

有効な値: true

デフォルト: true

: com.oracle.bigdata.ignoremissingcolumns=true

com.oracle.bigdata.json.ejson

拡張JSONを有効にするかどうかを指定します。

有効な値: truetyesy1falsefnon0

デフォルト: true

: com.oracle.bigdata.jason.ejson=yes

com.oracle.bigdata.json.path

表の行にマップされる一連のネストされたJSON値を識別するJSONパス式。

有効な値: 文字列プロパティ

デフォルト: null

: '$.data[*]'

com.oracle.bigdata.json.unpackarrays

JSONファイルで見つかった配列のボックスを解除するかどうかを指定します。ファイルはJSONオブジェクトの配列で構成されます。ファイル全体が文法的に有効なJSONドキュメントです。このようなファイルの例は、[{“a”:1},{“a”:2},{“a”:3}]です。

有効な値: truetyesy1falsefnon0

デフォルト: false

: com.oracle.bigdata.json.unpackarrays=true

com.oracle.bigdata.quote

フィールドの引用符文字を指定します。指定した場合、引用符文字はロード時に削除されます。

有効な値: 文字

デフォルト: NULL (引用符なしを意味します)

例: com.oracle.bigdata.csv.rowformat.quotecharacter='"'

com.oracle.bigdata.rejectlimit

指定した数の行が拒否された後で、操作をエラー終了します。これは、変換エラーでレコードが拒否される場合にのみ適用されます。

有効な値: 数値

デフォルト: 0

例: com.oracle.bigdata.rejectlimit=2

com.oracle.bigdata.removequotes

ソース・ファイル内のフィールドを囲む引用符を削除します。

有効な値: truefalse

デフォルト: false

例: com.oracle.bigdata.removequotes=true

com.oracle.bigdata.csv.skip.header

ファイルの先頭からスキップする行数を指定します。

有効な値: 数値

デフォルト: 0 (指定しない場合)

例: com.oracle.bigdata.csv.skip.header=1

com.oracle.bigdata.timestampformat

ソース・ファイル内のタイムスタンプ書式を指定します。書式オプションAUTOでは、次の書式がチェックされます。

YYYY-MM-DD HH:MI:SS.FFYYYY-MM-DD HH:MI:SS.FF3MM/DD/YYYY HH:MI:SS.FF3

有効な値: auto

デフォルト: yyyy-mm-dd hh24:mi:ss.ff

例: com.oracle.bigdata.timestamptzformat="auto"

com.oracle.bigdata.timestampltzformat

ソース・ファイル内のローカル・タイムゾーン付きタイムスタンプ書式を指定します。書式オプションAUTOでは、次の書式がチェックされます。

DD Mon YYYY HH:MI:SS.FF TZRMM/DD/YYYY HH:MI:SS.FF TZRYYYY-MM-DD HH:MI:SS+/-TZRYYYY-MM-DD HH:MI:SS.FF3DD.MM.YYYY HH:MI:SS TZR

有効な値: auto

デフォルト: yyyy-mm-dd hh24:mi:ss.ff

例: com.oracle.bigdata.timestampltzformat="auto"

com.oracle.bigdata.timestamptzformat

ソース・ファイル内のタイムゾーン付きタイムスタンプ書式を指定します。書式オプションAUTOでは、次の書式がチェックされます。

DD Mon YYYY HH:MI:SS.FF TZRMM/DD/YYYY HH:MI:SS.FF TZRYYYY-MM-DD HH:MI:SS+/-TZRYYYY-MM-DD HH:MI:SS.FF3DD.MM.YYYY HH:MI:SS TZR

有効な値: auto

デフォルト: yyy-mm-dd hh24:mi:ss.ff

例: com.oracle.bigdata.timestamptzformat="auto"

com.oracle.bigdata.trimspaces

フィールドの先頭と末尾の空白を切り捨てる方法を指定します。

有効な値: rtrimltrimnotrimltrimldrtrim

デフォルト: notrim

例: com.oracle.bigdata.trimspaces=rtrim

com.oracle.bigdata.truncatecol

ファイルのデータがフィールドに対して長すぎる場合、このオプションでは、行を拒否したりフィールドをNULLに設定したりするかわりに、フィールドの値を切り捨てます。

有効な値: truefalse

デフォルト: false

: com.oracle.bigdata.truncatecol=true

17.4.3.6 外部表の作成例

次の例は、Oracle Cloud Object Storageに格納された表の作成および外部CSVデータの問合せの様々な方法を示しています。

17.4.3.6.1 CSVファイルを参照する外部表の作成

この例では、外部CSVファイルを参照するデータベース・オブジェクトを作成します。

例17-12 外部表の作成

CREATE TABLE CUSTOMERS_CSV_XT
(
    CUSTOMER_ID NUMBER,
    FIRST_NAME VARCHAR2(64),
    LAST_NAME VARCHAR2(64),
    EMAIL VARCHAR2(64),
    SIGNUP_DATE DATE
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY DATA_PUMP_DIR
    ACCESS PARAMETERS
    (
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        MISSING FIELD VALUES ARE NULL
        SKIP 1
        (
            CUSTOMER_ID CHAR(10),
            FIRST_NAME CHAR(64),
            LAST_NAME CHAR(64),
            EMAIL CHAR(64),
            SIGNUP_DATE DATE 'YYYY-MM-DD'
        )
    )
    LOCATION ('customers.csv')
)
REJECT LIMIT UNLIMITED;
17.4.3.6.2 DBMS_CLOUDを使用したCSVファイルによる外部表の作成

この例では、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、列およびフィールドの詳細仕様を含む外部表を定義します。

例17-13 DBMS_CLOUDを使用した外部表の作成

BEGIN
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name => 'CUSTOMERS_CSV_XT',
        credential_name => 'OCI_CRED',
        file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/my_namespace/b/sales_data/o/customers_csv/*.csv',
        column_list => 'CUSTOMER_ID NUMBER,
                      FIRST_NAME VARCHAR2(256),
                      LAST_NAME VARCHAR2(256),
                      EMAIL VARCHAR2(256),
                      SIGNUP_DATE DATE',
        field_list => 'CUSTOMER_ID CHAR,
                      FIRST_NAME CHAR(256),
                      LAST_NAME CHAR(256),
                      EMAIL CHAR(256),
                      SIGNUP_DATE CHAR date_format DATE MASK "YYYY-MM-DD"',
        format => '{
                      "type": "csv",
                      "delimiter": ",",
                      "skipheaders": 1
                  }'
    );
END;
/