6 Oracle Big Data SQLリファレンス

ここでは、Oracle Big Data SQLのリファレンス情報を探します。

6.1 CREATE TABLE ACCESS PARAMETERS句

この項では、ORACLE_HDFSORACLE_HIVEまたはORACLE_BIGDATAアクセス・ドライバを使用する外部表を作成するときに使用するプロパティについて説明します。CREATE TABLE ORGANIZATION EXTERNAL文で、ACCESS PARAMETERSopaque_format_spec句にパラメータを指定します。

この項の内容は次のとおりです。

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

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

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

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

    keyword=value
    keyword:value

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

  • プロパティ定義は1行または複数行になります。

  • 行の終了文字は、行フィード、キャリッジ・リターンまたはキャリッジ・リターンの後に続く行フィードです。

  • プロパティ定義が複数行にまたがる場合は、行の終了文字の前にバックスラッシュ(エスケープ文字)を付けますが、最終行には付けません。この例では、Keyword1プロパティの値はValue part 1 Value part 2 Value part 3です。

    Keyword1=  Value part 1 \
               Value part 2 \
               Value part 3
  • 先頭の空白の各物理行を削除して行を連結することで、論理行を作成できます。パーサーは、論理行からプロパティ名および値を抽出します。

  • 文字の前に代入を示すバックスラッシュ(エスケープ文字)を付けることで、プロパティ名またはプロパティ値に特殊文字を埋め込むことができます。表6-1に特殊文字を示します。

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

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

\b

バックスペース(\u0008)

\t

水平タブ(\u0009)

\n

行フィード(\u000a)

\f

フォーム・フィード(\u000c)

\r

キャリッジ・リターン(\u000d)

\"

二重引用符(\u0022)

\'

一重引用符(\u0027)

\\

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

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

\uxxxx

2バイト、ビッグ・エンディアン、Unicodeコード・ポイント。

1文字に2コード・ポイント(4バイト)が必要な場合、パーサーは2番目のコード・ポイントに\uを要求します。

6.1.2 ORACLE_HDFSアクセス・パラメータ

ORACLE_HDFSアクセス・ドライバのアクセス・パラメータは、HDFS内のデータを特定するのに必要なメタデータを提供し、Hive表を作成します。

6.1.2.1 ORACLE_HDFSのデフォルトのパラメータ設定

ORACLE_HDFSのデフォルトのパラメータ設定について説明します。

CREATE TABLE文からすべてのアクセス・パラメータを省略した場合、ORACLE_HDFSは次のデフォルト値を使用します。

com.oracle.bigdata.rowformat=DELIMITED
com.oracle.bigdata.fileformat=TEXTFILE
com.oracle.bigdata.overflow={"action":"error"}
com.oracle.bigdata.erroropt={"action":"setnull"}
6.1.2.2 ORACLE_HDFSのオプションのパラメータ設定

ORACLE_HDFSは、次のオプションのcom.oracle.bigdataパラメータをサポートしています。このパラメータは、opaque_format_spec句で指定できます。

例6-1に、複数のアクセス・パラメータが設定されているCREATE TABLE文を示します。

例6-1 ORACLE_HDFSの複数のアクセス・パラメータの設定

CREATE TABLE ORDER (CUST_NUM VARCHAR2(10), 
                    ORDER_NUM VARCHAR2(20), 
                    ORDER_DATE DATE,
                    ITEM_CNT NUMBER,
                    DESCRIPTION VARCHAR2(100),
                    ORDER_TOTAL (NUMBER8,2)) ORGANIZATION EXTERNAL 
             (TYPE ORACLE_HDFS
 ACCESS PARAMETERS (
  com.oracle.bigdata.fields: (CUST_NUM,              \
                              ORDER_NUM,             \
                              ORDER_DATE,            \
                              ORDER_LINE_ITEM_COUNT, \
                              DESCRIPTION,           \
                              ORDER_TOTAL)
  com.oracle.bigdata.colMap:     {"col":"item_cnt", \
                                  "field":"order_line_item_count"}
  com.oracle.bigdata.overflow:   {"action":"TRUNCATE", \
                                  "col":"DESCRIPTION"}
  com.oracle.bigdata.errorOpt:  [{"action":"replace", \
                                  "value":"INVALID NUM", \
                                  "col":["CUST_NUM","ORDER_NUM"]} , \
                                 {"action":"reject", \
                                  "col":"ORDER_TOTAL}]
 )
 LOCATION ("hdfs:/usr/cust/summary/*"));

6.1.3 ORACLE_HIVEアクセス・パラメータ

ORACLE_HIVEは、Hiveカタログから外部データ・ソースに関するメタデータを取得します。

通常、外部データ表の列へのHiveデータのデフォルト・マッピングは適切です。ただし、状況によっては、特殊なパラメータ設定が必要です。独自の理由でデフォルト値を上書きする場合もあります。

6.1.3.1 ORACLE_HIVEのデフォルトのパラメータ設定

ORACLE_HIVEのデフォルトのパラメータ設定について説明します。

CREATE TABLE文からすべてのアクセス・パラメータを省略した場合、ORACLE_HIVEは次のデフォルト値を使用します。

com.oracle.bigdata.tablename=name of external table
com.oracle.bigdata.overflow={"action":"error"}
com.oracle.bigdata.erroropt={"action":"setnull"}
6.1.3.2 ORACLE_HIVEのオプションのパラメータ値

ORACLE_HIVEは、次のオプションのcom.oracle.bigdataパラメータをサポートしています。このパラメータは、opaque_format_spec句で指定できます。

例6-2に、複数のアクセス・パラメータが設定されているCREATE TABLE文を示します。

例6-2 ORACLE_HIVEの複数のアクセス・パラメータの設定

CREATE TABLE ORDER (cust_num VARCHAR2(10), 
                    order_num VARCHAR2(20), 
                    order_date DATE,
                    item_cnt NUMBER,
                    description VARCHAR2(100),
                    order_total (NUMBER8,2)) ORGANIZATION EXTERNAL 
(TYPE oracle_hive
 ACCESS PARAMETERS (
  com.oracle.bigdata.tableName:  order_db.order_summary
  com.oracle.bigdata.colMap:     {"col":"ITEM_CNT", \
                                  "field":"order_line_item_count"}
  com.oracle.bigdata.overflow:   {"action":"ERROR", \
                                  "col":"DESCRIPTION"}
  com.oracle.bigdata.errorOpt:   [{"action":"replace", \
                                   "value":"INV_NUM" , \
                                   "col":["CUST_NUM","ORDER_NUM"]} ,\
                                  {"action":"reject", \
                                   "col":"ORDER_TOTAL}]
));

6.1.4 ORACLE_HDFSおよびORACLE_HIVEのアクセス・パラメータの完全なリスト

6.1.4.1 com.oracle.bigdata.buffersize

大きいレコード読取りのバッファ・サイズをKBで設定します。デフォルトのバッファ・サイズよりも大きいレコードを読み取る必要がある場合にこの値を設定します。 

デフォルト値

1000 KB

構文

com.oracle.bigdata.buffersize: n

次の例ではバッファ・サイズを100 MBに設定します。

com.oracle.bigdata.buffersize: 100000
6.1.4.2 com.oracle.bigdata.datamode

SmartScanがHadoopデータ・ソースをスキャンするために使用する方法を指定します。方法によって、パフォーマンスに大きな違いが生じる可能性があります。

デフォルト値

automatic

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

datamode:

セマンティクス

automatic

メタデータに基づいて適切なモードを自動的に選択します。可能な場合はcモードを選択します。データにcモードでサポートされていない形式が含まれる場合は、javaモードを選択します。

c

ファイル・バッファを読み取る場合はJavaを使用しますが、データを処理してOracle形式に変換する場合はCコードを使用します。デリミタ付きデータにこのモードを指定します。

データにCコードでサポートされていない形式が含まれる場合は、エラーが返されます。

java

データを処理してOracle形式に変換する場合は、Java SerDesおよびInputFormatsを使用します。Parquet、RCFileおよびSerDeを必要とする他のデータ形式にこのモードを指定します。

6.1.4.3 com.oracle.bigdata.colmap

ソース・データの列をOracle外部表の列にマップします。1つまたは複数の列マッピングのペアを定義できます。ソース・フィールド名がOracle列名の最大長を超える場合、または外部表で別の列名を使用する場合、このプロパティを使用します。

デフォルト値

Hive列と同じ名前を持つ外部表の列

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

colmap:

colmap_entry:

セマンティクス

"col":name

"col": キーワードは小文字を使用して、引用符で囲む必要があります。

name: Oracle外部表の列の名前。大/小文字を区別し、引用符で囲む必要があります。

"field":name

"field": キーワードは小文字を使用して、引用符で囲む必要があります。

name: データ・ソースのフィールドの名前。大/小文字は区別しませんが、引用符で囲む必要があります。プロパティを指定するための構文ルールを参照してください。

この例は、ORDER_LINE_ITEM_COUNTという名前のHive列をITEM_CNTという名前のOracle列にマップします。

com.oracle.bigdata.colMap={"col":"ITEM_CNT", \
                           "field":"order_line_item_count"}

次の例は、複数の列のマッピングを示しています。

com.oracle.bigdata.colmap:[{"col":"KOL1", "field":"PROJECT_NAME"},{ "col":"KOL2","field":"wsdl_name"},{"col":"KOL3", "field":"method"}]
6.1.4.4 com.oracle.bigdata.erroropt

列の値の計算中に発生するエラーを処理する方法を示します。

デフォルト値

{"action":"setnull"}

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

erroropt:

error_element:

セマンティクス

"action""reject""setnull""replace""value"および"col"キーワードは小文字を使用して、引用符で囲む必要があります。プロパティを指定するための構文ルールを参照してください。

"action":value

value: 次のキーワードのいずれかになります。

  • "reject": 行をロードしません。

  • "setnull": 列をNULLに設定します。

  • "replace": 列を指定された値に設定します。

"value":string

string: 外部表の不正な値を置換します。引用符で囲む必要があります。

"col":name

name: 外部表の列を識別します。列名は大/小文字を区別し、引用符で囲む必要があります。リストできるのは1回のみです。

この例では、Hive値によってエラーが発生した場合、CUST_NUMまたはORDER_NUM列の値をINVALIDに設定します。その他の列では、エラーによってHive値が拒否されます。

com.oracle.bigdata.errorOpt: {"action":"replace",\
                              "value":"INVALID", \
                              "col":["CUST_NUM","ORDER_NUM"]
6.1.4.5 com.oracle.bigdata.fields

データ・ソースのフィールド名およびデータ型をリストします。

デフォルト値

未定義

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

fields:

data_type:

primitive_type:

セマンティクス

構文は、Hive表のフィールド・リストと同じです。フィールド・リストを複数行に分割する場合、バックスラッシュを使用して改行文字をエスケープする必要があります。

field_name

Hiveフィールドの名前。英数字およびアンダースコア(_)のみ使用します。最大長は128文字です。フィールド名は大/小文字を区別します。

data_type

Hiveフィールドのデータ型。オプション。デフォルトはSTRINGです。文字セットはUTF8である必要があります。

データ型は複合またはプリミティブになります。

Hive複合データ型

  • ARRAY: 索引付け可能なリスト

  • MAP: キー値のタプル

  • STRUCT: 要素のリスト

  • UNIONTYPE: 複数のデータ型

Hiveプリミティブ・データ型

  • INT: 4バイトの整数

  • BIGINT: 8バイトの整数

  • SMALLINT: 2バイトの整数

  • TINYINT: 1バイトの整数

  • BOOLEAN: TRUEまたはFALSE

  • FLOAT: 単精度

  • DOUBLE: 倍精度

  • STRING: 文字列

関連項目:

Apache Hive Language Manualのデータ型に関する項を参照してください。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

COMMENT col_comment

一重引用符で囲まれた文字列リテラル。Hive表のメタデータとして格納されます(TBLPROPERTIEScommentプロパティ)。

6.1.4.6 com.oracle.bigdata.fileformat

ORACLE_HDFSによって生成されたHive表のROW FORMAT句に基づいて、データ・ソースの行形式を説明します。

デフォルト値

TEXTFILE

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

fileformat:

セマンティクス

ORC

最適化された行カラムナ・ファイル形式

PARQUET

列指向、バイナリ・ファイル形式

RCFILE

レコード・カラムナ・ファイル形式

SEQUENCEFILE

圧縮ファイル形式

TEXTFILE

プレーン・テキスト・ファイル形式

INPUTFORMAT

データ・ファイルからレコードを抽出できるJavaクラスを識別します。

OUTPUTFORMAT

出力レコードを目的の形式に設定できるJavaクラスを識別します。

6.1.4.7 com.oracle.bigdata.log.exec

アクセス・ドライバがCDH上の並列プロセスとして実行されている場合、問合せのCコードによって生成されたログ・ファイルを生成する方法を指定します。

アクセス・ドライバはHadoopクラスタ・ノード上で実行されている場合、ログ・ファイルの作成または書込みを行いません。並列問合せプロセスがログ・ファイルを書き込みます。Javaコードからのログ・ファイルはlog4jプロパティによって制御されます。このプロパティは、構成ファイルまたはアクセス・パラメータで指定されます。bigdata-log4j.propertiesを参照してください。

デフォルト値

未定義(ロギングなし)

構文

[directory_object:]file_name_template

セマンティクス

directory_object

ログ・ファイルが作成されるHadoopクラスタ上のHDFSパスのOracleディレクトリ・オブジェクト。

file_name_template

ファイル名の生成に使用する文字列。この表では、テンプレートで使用できるオプションの変数を示します。

表6-2 com.oracle.bigdata.log.execの変数

変数

%p

オペレーティング・システム・プロセス識別子(PID)

%a

プロセスを一意に識別する番号。

%%

パーセント記号(%)

次の例では、PIDおよび一意の番号を含むログ・ファイル名(xtlogp_hive14_3413_57など)を生成します。

com.oracle.bigdata.log.exec= xtlogp_hive14_%p_%a
6.1.4.8 com.oracle.bigdata.log.qc

アクセス・ドライバが問合せのログ・ファイルを生成する方法を指定します。

デフォルト値

未定義(ロギングなし)

構文

[directory_object:]file_name_template

セマンティクス

directory_object

ログ・ファイルが書き込まれるパスを指すOracleディレクトリ・オブジェクトの名前。この値を省略すると、ログは外部表のデフォルト・ディレクトリに書き込まれます。

file_name_template

ファイル名の生成に使用する文字列。表6-3に、文字列で使用できるオプションの変数を示します。

表6-3 com.oracle.bigdata.log.qcの変数

変数

%p

オペレーティング・システム・プロセス識別子(PID)

%%

パーセント記号(%)

この例では、PIDおよびパーセント記号を含むログ・ファイル名(xtlogp_hive213459_%など)を作成します。

com.oracle.bigdata.log.qc= xtlogp_hive21%p_%%
6.1.4.9 com.oracle.bigdata.overflow

外部表の列には長すぎる文字列データの処理方法を示します。データ・ソースは文字またはバイナリになります。Hiveの場合、データ・ソースはSTRUCTUNIONTYPESMAPまたはARRAYにすることもできます。

デフォルト値

{"action":"error"}

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

overflow ::=

overflow_element ::=

セマンティクス

"action""truncate""error"および"col"タグは小文字を使用して、引用符で囲む必要があります。プロパティを指定するための構文ルールを参照してください。

"action":value

"action"の値は次のキーワードのいずれかになります。

  • truncate: 列に収まるようにデータを短くします。

  • error: エラーをスローします。com.oracle.bigdata.erroroptプロパティは、エラーの結果を制御します。

"col":name

name: 外部表の列を識別します。名前は大/小文字を区別し、引用符で囲む必要があります。

この例では、DESCRIPTION列のソース・データが列幅を超える場合、ソース・データを切り捨てます。

com.oracle.bigdata.overflow={"action":"truncate", \
                             "col":"DESCRIPTION"}
6.1.4.10 com.oracle.bigdata.rowformat

アクセス・ドライバがファイル内のレコードからフィールドを抽出するために必要な情報を提供します。

重要:

com.oracle.bigdata.rowformatは、"type ORACLE_LOADER"を使用する従来の外部表のアクセス・パラメータ構文とは無関係です。FIELDSTERMINATEDなどのキーワードもあれば、両方の句に現れるキーワードもありますが、ネーミングにおける共通性は偶然であり、共通機能を意味するものではありません。com.oracle.bigdata.rowformatアクセス・パラメータは、デフォルトのHive SerDeに対する変更なしに渡されます。行から列を抽出するHive SerDeは意図的に制限されます。複雑な場合は、専用のSerDesによって処理されます。

デフォルト値

DELIMITED

構文

キーワード/値のペアを持つJSONドキュメントを次の図に示します。

rowformat:

セマンティクス

DELIMITED

レコード内のフィールドを区切るために使用する文字を示します。

  • FIELDS TERMINATED BY: レコード内の各フィールドを区切る文字。オプションのESCAPED BY文字は、フィールド値内に表示される場合、デリミタ文字の前に付けます。

  • COLLECTION ITEMS TERMINATED BY: 配列要素の終了を示す文字。列がコレクションまたはネストされたレコードの場合に使用します。その場合、結果の値はJSON配列になります。

  • MAP KEYS TERMINATED BY: MAPフィールドのエントリの終了を示す文字。列がコレクションまたはネストされたレコードの場合に使用します。結果の値はJSONオブジェクトです。

  • LINES TERMINATED BY: レコードの終了を示す文字。

  • NULL DEFINED AS: null値を示す文字。

SERDE

アクセス・ドライバが必要とするSerDeのデータおよびプロパティを解析できるSerDeを識別します。

この例では、Avroコンテナ・ファイルにSerDeを指定します。

com.oracle.bigdata.rowformat:
   SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe'

次の例では、正規表現を含むファイルのSerDeを指定します。

com.oracle.bigdata.rowformat=\
    SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' \
    WITH SERDEPROPERTIES \ 
    ("input.regex" = "(\\\\d{6}) (\\\\d{5}) (.{29}) .*") 
6.1.4.11 com.oracle.bigdata.tablename

Hiveパラメータcom.oracle.bigdata.tablenameは、ソース・データを含むHive表を識別します。

デフォルト値

DEFAULT.external_table_name

構文

[hive_database_name.]table_name

セマンティクス

hive_database_nameおよびtable_nameの最大長は128 UTF-8文字(512バイト)です。

hive_database_name: ソース・データが格納されているHiveデータベース。DEFAULTはHive初期データベースの名前です。

table_name: データを含むHive表。table_nameを省略した場合、ORACLE_HIVEは外部表と同じ名前のHive表を検索します。表名は大/小文字を区別します。

この設定は、ソース・データがHiveのORDER_DBデータベース内のORDER_SUMMARYという表にあることを示します。

com.oracle.bigdata.tablename ORDER_DB.ORDER_SUMMARY

6.1.5 ORACLE_BIGDATAアクセス・パラメータ

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

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

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

表6-4 共通のアクセス・パラメータ

共通のアクセス・パラメータ 説明
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.fileformat ファイルの形式を指定します。このパラメータの値によって、ファイルを処理するリーダーが識別されます。各リーダーはこの他にもアクセス・パラメータをサポートでき、それらは他のリーダーでサポートされるものもあれば、サポートされないものもあります。

有効な値: parquetorctextfileavrocsv

デフォルト: PARQUET

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

有効な値: normalnone

デフォルト: none

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

有効な値: normalnone

デフォルト: none

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

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

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

Avro固有のパラメータ 説明
com.oracle.bigdata.avro.decimaltpe バイト配列に格納されている10進数の表現を指定します。

有効な値: intintegerstrstring

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

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

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

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

Parquet固有のアクセス・パラメータ 説明
com.oracle.bigdata.prq.binary_as_string これは、binaryを文字列として格納するかどうかを指定するブール・プロパティです。

有効な値: truetyesylfalsefnon0

デフォルト: true

com.oracle.bigdata.prq.int96_as_timestamp これは、int96がタイムスタンプを表すかどうかを指定するブール・プロパティです。

有効な値: truetyesylfalsefnon0

デフォルト: true

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

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

例1: CSVデータ・ファイル:

これは単純なcsvの例です。このデータ・ファイルにはカンマ区切りの値が含まれており、その値にはオプションの囲み引用符が付けられています。
–----Source csv data in t.dat
t.dat:     

1,"abc",     
2,xyx,
–---------Create an external table over the csv source data in t.dat
CREATE TABLE t     
( 
 c0 number,       
 c1 varchar2(20)
) 
ORGANIZATION external     
( 
 TYPE oracle_bigdata
 DEFAULT DIRECTORY DMPDIR
 ACCESS PARAMETERS      
 (         
  com.oracle.bigdata.fileformat=csv
 )
 location
 (         
  't.dat'       
 )     
)REJECT LIMIT 1
;
–------Select data from external table
select c0, c1 from t;  

 C0    C1     
----  -----
 1     abc
 2     xyz

例2: CSVデータファイル:

この例では、フィールド・セパレータが|であるcsvデータ・ソースを使用して外部表を作成する方法を示します。そのデータ・ファイルはgzipで圧縮され、空白にnullが使用され、日付書式を含みます。
–----The source csv data in t.dat
t.dat:     

 1|  |     
 2|Apr-99-30|
–------Create an external table over the csv data source in t.dat
CREATE TABLE t(       
 c0 number,       
 c1 date     
)     
ORGANIZATION external     
(       
 TYPE oracle_bigdata       
 DEFAULT DIRECTORY DMPDIR       
 ACCESS PARAMETERS      
 (         
  com.oracle.bigdata.fileformat=textfile        
  com.oracle.bigdata.compressiontype=gzip        
  com.oracle.bigdata.csv.rowformat.separatorcharacter='|'        
  com.oracle.bigdata.blankasnull=true         
  com.oracle.bigdata.dateformat="MON-RR-DD HH:MI:SS"
 )       
 location       
 (         
  't.dat.gz'
  )     
 )REJECT LIMIT 1     
;
--Select csv data from external table
QL> select c0, c1 from t;    
         
 C0       C1    
------ ---------             
  1              
  2    30-APR-99

例3: Jsonデータ・ファイル:

これは、各行が1つのJSONドキュメントであるJSONファイルです。この外部表は各行にアクセスします。問合せでは、Oracle SQL JSON関数を使用してデータが解析されます。
–----Source Json docs. One for station 72 and the other for station 79.
{"station_id":"72","name":"W 52 St & 11 Ave","short_name":"6926.01","lat":40.76727216,"lon":-73.99392888,"region_id":71,"rental_methods":["CREDITCARD","KEY"],"capacity":39,"rental_url":"http://app.citibikenyc.com/S6Lr/IBV092JufD?station_id=72","eightd_has_key_dispenser":false}
{"station_id":"79","name":"Franklin  St & W Broadway","short_name":"5430.08","lat":40.71911552,"lon":-74.00666661,"region_id":71,"rental_methods":["CREDITCARD","KEY"],"capacity":33,"rental_url":"http://app.citibikenyc.com/S6Lr/IBV092JufD?station_id=79","eightd_has_key_dispenser":false}
— Create the external table over Json source 
CREATE TABLE stations_ext (
 doc varchar2(4000)         
)    
ORGANIZATION EXTERNAL ( 
  TYPE ORACLE_BIGDATA      
  DEFAULT DIRECTORY DEFAULT_DIR 
  ACCESS PARAMETERS(    
    com.oracle.bigdata.credential.name=MY_CRED    
    com.oracle.bigdata.fileformat=textfile    
    com.oracle.bigdata.csv.rowformat.fields.terminator='\n’    <— notice the
      delimiter is a new line (i.e. not a comma).  So, it  will read to the end of the line and get
      the whole document.        
    )      
  LOCATION ('https://swftobjectstorage.us-phoenix-1.oraclecloud.com/v1/mybucket/stations.json')   
)
REJECT LIMIT UNLIMITED;
–---Select data from external table
select s.doc.station_id,     
  s.doc.name,       
  s.doc.rental_methods[0]    –--notice we’re getting the first item in the array of possible payments
from stations_ext;

Station_id    Name                    rental_method (1st item in the array)
–----------  –-----------------------  –-----------------------------------
  72         W52 St & 11 Ave            CREDITCARD
  79         Franklin St & W Broadway   CREDITCARD

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

テキスト・ファイル固有のアクセス・パラメータ 説明
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では、次の書式がチェックされます。

J、MM-DD-YYYYBCMM-DD-YYYYYYYYMMDD HHMISSYYMMDD HHMISS、YYYY.DDD、YYYY-MM-DD

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

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

com.oracle.bigdata.fields データ・ファイルのフィールドの順序を指定します。値は、データ型がオプションであるという1つの例外を除き、ORACLE_HDFSのcom.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.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

6.2 Hiveの静的データ・ディクショナリ・ビュー

Oracle Databaseカタログには、Hive表の複数の静的データ・ディクショナリ・ビューが含まれています。これらのデータ・ディクショナリ・ビューを問い合せて、アクセスできるHive表に関する情報を検出できます。

Oracle DatabaseからHiveデータベースにアクセスする場合、ORACLE_BIGDATA_CONFIGディレクトリ・オブジェクトの読取りアクセス権が必要です。

6.2.1 ALL_HIVE_DATABASES

ALL_HIVE_DATABASESは、現在のユーザーにアクセスできるHiveメタストア内のすべてのデータベースを示します。

関連ビュー

  • DBA_HIVE_DATABASESは、Hiveメタストア内のすべてのデータベースを示します。

  • USER_HIVE_DATABASESは、現在のユーザーが所有するHiveメタストア内のデータベースを示します。

データ型 NULL 説明

CLUSTER_ID

VARCHAR2(4000)

NOT NULL

HiveメタストアがあるHadoopクラスタ

DATABASE_NAME

VARCHAR2(4000)

NOT NULL

Hiveデータベース名

DESCRIPTION

VARCHAR2(4000)

Hiveデータベースの説明

DB_LOCATION

VARCHAR2(4000)

NOT NULL

HIVE_URI

VARCHAR2(4000)

HiveデータベースのURI

6.2.2 ALL_HIVE_TABLES

ALL_HIVE_TABLESは、現在のユーザーにアクセスできるHiveメタストア内のすべての表を示します。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連ビュー

  • DBA_HIVE_TABLESは、Hiveメタストア内のすべての表を示します。

  • USER_HIVE_TABLESは、Hiveメタストア内の現在のユーザーが所有するデータベースの表を示します。

データ型 NULL 説明

CLUSTER_ID

VARCHAR2(4000)

NOT NULL

HiveメタストアがあるHadoopクラスタ

DATABASE_NAME

VARCHAR2(4000)

NOT NULL

Hiveデータベースの名前

TABLE_NAME

VARCHAR2(4000)

NOT NULL

Hive表の名前

LOCATION

VARCHAR2(4000)

NO_OF_COLS

NUMBER

Hive表内の列の数

CREATION_TIME

DATE

表が作成された時刻

LAST_ACCESSED_TIME

DATE

最新のアクセス時刻

OWNER

VARCHAR2(4000)

Hive表の所有者

TABLE_TYPE

VARCHAR2(4000)

NOT NULL

Hive表のタイプ(外部、管理対象など)

PARTITIONED

VARCHAR2(4000)

表がパーティション化されている(YES)かされていない(NO)か

NO_OF_PART_KEYS

NUMBER

パーティションの数

INPUT_FORMAT

VARCHAR2(4000)

入力形式

OUTPUT_FORMAT

VARCHAR2(4000)

出力形式

SERIALIZATION

VARCHAR2(4000)

SerDeシリアル化情報

COMPRESSED

NUMBER

表が圧縮されている(YES)かされていない(NO)か

HIVE_URI

VARCHAR2(4000)

HiveデータベースのURI

関連項目:

6.2.3 ALL_HIVE_COLUMNS

ALL_HIVE_COLUMNSは、現在のユーザーにアクセスできるすべてのHive表の列を示します。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連ビュー

  • DBA_HIVE_COLUMNSは、Hiveメタストア内のすべての表の列を示します。

  • USER_HIVE_COLUMNSは、現在のユーザーが所有するHiveデータベースの表の列を示します。

データ型 NULL 説明

CLUSTER_ID

VARCHAR2(4000)

NOT NULL

HiveメタストアがあるHadoopクラスタ

DATABASE_NAME

VARCHAR2(4000)

NOT NULL

Hiveデータベースの名前。空白の場合は、デフォルト・データベース

TABLE_NAME

VARCHAR2(4000)

NOT NULL

Hive表の名前

COLUMN_NAME

VARCHAR2(4000)

NOT NULL

Hive列の名前

HIVE_COLUMN_TYPE

VARCHAR2(4000)

NOT NULL

Hive列のデータ型

ORACLE_COLUMN_TYPE

VARCHAR2(4000)

NOT NULL

Hiveデータ型と同等のOracleデータ型

LOCATION

VARCHAR2(4000)

OWNER

VARCHAR2(4000)

Hive表の所有者

CREATION_TIME

DATE

表が作成された時刻

HIVE_URI

VARCHAR2(4000)

HiveデータベースのURI

6.2.4 DBA_HIVE_DATABASES

DBA_HIVE_DATABASESは、Hiveメタストア内のすべてのデータベースを示します。列はALL_HIVE_DATABASESの列と同じです。

関連項目:

"ALL_HIVE_DATABASES"

6.2.5 DBA_HIVE_TABLES

DBA_HIVE_TABLESは、Hiveメタストア内のすべての表を示します。列はALL_HIVE_TABLESの列と同じです。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。「bigdata_configディレクトリについて」を参照してください。

関連項目:

"ALL_HIVE_TABLES"

6.2.6 DBA_HIVE_COLUMNS

DBA_HIVE_COLUMNSは、Hiveメタストア内のすべての表の列を示します。列はALL_HIVE_COLUMNSの列と同じです。

関連項目:

"ALL_HIVE_COLUMNS"

6.2.7 USER_HIVE_DATABASES

USER_HIVE_DATABASESは、現在のユーザーが所有するHiveメタストア内のデータベースを示します。列(OWNERを除く)はALL_HIVE_DATABASESの列と同じです。

関連項目:

"ALL_HIVE_DATABASES"

6.2.8 USER_HIVE_TABLES

USER_HIVE_TABLESは、Hiveメタストア内の現在のユーザーが所有するデータベースの表を示します。列(OWNERを除く)はALL_HIVE_TABLESの列と同じです。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連項目:

"ALL_HIVE_TABLES"

6.2.9 USER_HIVE_COLUMNS

USER_HIVE_COLUMNSは、現在のユーザーが所有するHiveデータベースの表の列を示します。列(OWNERを除く)はALL_HIVE_COLUMNSの列と同じです。

Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。

関連項目:

"ALL_HIVE_COLUMNS"

6.3 DBMS_BDSQL PL/SQL Package

DBMS_BDSQL PL/SQLパッケージには、ユーザー・マップを追加および削除するプロシージャが含まれています。

この付録の内容は次のとおりです。

以前のリリースのOracle Big Data SQLでは、HadoopおよびHiveのデータに対する問合せはoracleユーザーとして実行され、ユーザーを変更するオプションはありません。どのような場合もoracleは基礎となるユーザーであることにかわりありませんが、oracleアカウントが別の指定されたユーザーのかわりにタスクを実行するようにするマルチユーザー認証を使用できるようになりました(Hadoop Secure Impersonationに基づきます)。これにより、単一のoracleユーザーではなく、現在問合せを実行しているユーザーに基づいたHDFSデータ・アクセスが可能になります。

DBMS_BDSQLパッケージを使用すると、現在接続されているユーザーを識別するルールを指定して、接続されているユーザーを偽装されたユーザーにマップできます。ユーザーは数多くの方法でOracle Databaseに接続できるため、このユーザーはデータベース・ユーザーであることも、LDAPやKerberosなどをソースとするユーザーであることもあります。ファイルに対する認可ルールはそのユーザーに適用され、監査はそのユーザーにも反映されます。

ノート:

指定された管理者に新しいBDSQL_ADMINロールを付与して、これらのプロシージャを起動できるようにします。

6.3.1 ADD_USER_MAP

ADD_USER_MAPプロシージャは、問合せを実行している実際のユーザーを識別するためのルールを指定する場合に使用します。

問合せの実行時に、データベースはBDSQL_USER_MAP表に対する参照を実行して、現在のデータベース・ユーザー(current_database_user)を判断します。その後で、syscontext_namespaceパラメータとsyscontext_parm_hadoop_userパラメータを使用して、実際のユーザーを識別します。

構文

procedure ADD_USER_MAP (  
    cluster_name                 IN VARCHAR2 DEFAULT '[DEFAULT]', 
    current_database_user        IN VARCHAR2 NOT NULL, 
    syscontext_namespace         IN VARCHAR2 DEFAULT NULL,
    syscontext_parm_hadoop_user  IN VARCHAR2 NOT NULL 
); 

表6-8 ADD_USER_MAPのパラメータ

パラメータ 説明
cluster_name マップが適用されるHadoopクラスタの名前。クラスタ名を[DEFAULT]とすることで、デフォルト・クラスタを指定します。
current_database_user 現在有効なデータベース・ユーザー。Oracleは、これを使用して発行局を確認します。値'*'は、他に条件に適合する行が存在しない場合に、この行が使用されることを示します。デフォルト値はありません。また、NULLの値は許可されません。
syscontext_namespace Oracle USERENVネームスペースの場合、許容される値はGLOBAL_UIDCLIENT_IDENTIFIERおよびAUTHENTICATED_IDENTITYのみです。

Oracle Databaseのインストールで認証にKerberos資格証明、SSL、Active DirectoryまたはLDAPを使用する場合、Hadoopシステムでも同じ認証フレームワークを使用している可能性があります。その場合は、AUTHENTICATED_IDENTITYを指定する必要があります。この識別子は、ユーザー名のみが含まれます。資格証明のドメイン・セグメントが含まれている場合は、クラスタ名と同様に切り捨てられます。たとえば、ユーザー名dirkrbは、dirkrb@HQ.TEST1.DBSEC2008.COMの認証済アイデンティティとして、Hadoopクラスタでの認可に使用されます。

syscontext_parm_hadoop_user 現在のデータベース・ユーザーを偽装するHadoopユーザー。

ノート:

current_database_usersyscontext_parm_hadoop_userの値は、単一のアスタリスク文字(*)またはOracle simple_sql_nameアサーションの要件を満たす文字列になります。

  • 名前は英字で始まる必要があります。2番目以降の文字位置には、英数文字と文字_、$、#を含めることができます。

  • 引用符付きのSQL名も許容されます。

  • 引用符付きの名前は、二重引用符で囲まれている必要があります。

  • 引用符付きの名前は、引用符の間に任意の文字を使用できます。

  • 名前の内側にある引用符は、行内で2つの引用符文字で表されます。たとえば、"a name with ""の内側の"は有効な引用符付きの名前です。

  • 入力パラメータには、先頭や末尾に任意の数の空白を含めることができます。

6.3.2 REMOVE_USER_MAP

REMOVE_USER_MAPは、BDSQL_USER_MAP表から行を削除する場合に使用します。これにより、特定のHadoopユーザーから特定のOracle Databaseユーザーへの関連付けを解除します。

構文

procedure REMOVE_USER_MAP ( 
   cluster_name IN VARCHAR2 DEFAULT '[DEFAULT]', 
   current_database_user IN VARCHAR2 NOT NULL
); 

関連項目:

ADD_USER_MAPのリファレンス・ページには、cluster_nameパラメータとcurrent_database_userパラメータの説明があります。

6.3.3 マルチユーザー認証セキュリティ表

SYS.BDSQL_USER_MAPは、マルチユーザー認証セキュリティ表です。

この表の更新には、ADD_USER_MAPプロシージャとREMOVE_USER_MAPプロシージャを使用します。

主キーは、(cluster_name, current_database_user)です。

表6-9 SYS.BDSQL_USER_MAP

データ型 説明
cluster_name varchar2 Hadoopクラスタの名前デフォルトは[DEFAULT]です。
current_database_user varchar2 現在有効なデータベース・ユーザー(デフォルト値はありません、NULLは禁止です)。Oracleは、この列を特定のOracle Databaseユーザーに対応する認可ルールを確認するために使用します。行内の値'*'は、他に条件に適合する行がない場合に、この行が使用されるようにするディレクティブです。
syscontext_namespace varchar2 これは、Oracle SYS_CONTEXTネームスペースに対するオプションの指定です(カスタマ・セキュリティが設定されている場合)。Oracle USERENVネームスペースの場合、許容される値は'GLOBAL_UID''CLIENT_IDENTIFIER''AUTHENTICATED_IDENTITY'のみです。
syscontext_parm_hadoop_user varchar2 この列値には、相対する解釈があります。
  • syscontext_namespaceに値がある場合、syscontext_parm_hadoop_usersyscontext_namespaceに固有のパラメータを示します。

    ただし、値が'*'の場合、これは偽装にcurrent_database_userの値を使用するようにするディレクティブになります。この場合は、syscontext_namespace列をNULLにする必要があります。

  • syscontext_namespaceがNULLの場合、syscontext_parm_hadoop_userにはHDFSファイルにアクセスする前に偽装されるHadoopユーザーが格納されています。

ここでは、データベースに対するログオン認証にActive Directory、Kerberos、SSLまたはLDAPを使用しています。この場合は、Hadoopユーザーの管理に同じActive Directoryフレームワークを使用しているため、AUTHENTICATED_IDENTITYが指定されてます。

後述する例は、現在接続されているユーザーに対して次のSQLクエリを実行する場合と同様になります。

select sys_context('USERENV', 'AUTHENTICATED_IDENTITY') from dual;

この例では、Hadoopクラスタに対する認証にユーザー名のみ("@<domain>"セグメントなし)が使用されます。AUTHENTICATED_IDENTITYの形式が<username>/<cluster>@<domain_name>になる場合もあります。

cluster_name current_database_user syscontext_namespace syscontext_parm_hadoop_user
[DEFAULT] * USERENV AUTHENTICATED_IDENTITY

この例では、"HRAPP"はHRアプリケーションです。このアプリケーションでは、常にHRAPPデータベース・ユーザーを使用してデータベースに接続して、DBMS_SESSION.SET_IDENTIFIERプロシージャによってプログラムでアプリケーション・ユーザーを設定します。CLIENT_IDENTIFIERで指定された複数の「軽量」ユーザーが存在します(これは、sys_context('USERENV', 'CLIENT_IDENTIFIER') [DEFAULT] * USERENV GLOBAL_UIDなどで、select sys_context('USERENV', 'CLIENT_IDENTIFIER') from dual;を実行することと同様です)。

現在のデータベースには、別の有効なユーザーが含まれています。これは、Oracle Internet Directory for Enterprise User Securityによって管理されるログオンを持つエンタープライズ・ユーザーです。このような場合は、GLOBAL_UIDがHadoop偽装に使用されます。

cluster_name current_database_user syscontext_namespace syscontext_parm_hadoop_user
[DEFAULT] HRAPP USERENV CLIENT_IDENTIFIER
[DEFAULT] * USERENV GLOBAL_UID

この例では、BIAPPはビジネス・インテリジェンス・アプリケーションです。このアプリケーションは、そのユーザー名に独自のコンテキストを持ちます。アプリケーションを使用するカスタマの場合、そのカスタマに指定されたIDがHadoopアクセスに使用されます。つまり、現在のユーザーが'BIAPP'の場合、偽装にはsys_context('BIVPD','USERID')を使用します。それ以外のユーザーには、そのユーザーの現在のデータベース・ユーザー名が偽装に使用されるように、単に[DEFAULT] * *を指定します。

cluster_name current_database_user syscontext_namespace syscontext_parm_hadoop_user
[DEFAULT] BIAPP BIVPD USERID
[DEFAULT] *   *

この例では、Oracleユーザー名SCOTTがHDFSアクセスのためにhdpusr1 Hadoopユーザーによって偽装されます。ユーザーADAMは、HDFSアクセスのためにhdpusr2によって偽装されます。

その他すべてのユーザーはより制限されたアクセスを持つため、それらのユーザーを指定するために'lowprivuser'のsyscontext_namespace値を使用します。

cluster_name current_database_user syscontext_namespace syscontext_parm_hadoop_user
hadoop_cl_1 SCOTT   hdpusr1
hadoop_cl_1 ADAM lowprivuser hdpusr2
hadoop_cl_1 *    

6.4 DBMS_BDSQS_ADMIN PL/SQLパッケージ

このパッケージには、HadoopクラスタのデータベースおよびKerberosユーザーを管理するプロシージャが含まれています。

6.5 DBMS_HADOOP PL/SQLパッケージ

DBMS_HADOOPパッケージには、Hive表のCREATE EXTERNAL TABLE DDLを生成するための関数が含まれています。

6.5.1 CREATE_EXTDDL_FOR_HIVE

この関数は、Hive表のSQL CREATE TABLE ORGANIZATION EXTERNAL文を返します。ORACLE_HIVEアクセス・ドライバを使用します。

構文

DBMS_HADOOP.CREATE_EXTDDL_FOR_HIVE (
   cluster_id        IN    VARCHAR2,
   db_name           IN    VARCHAR2   := NULL,
   hive_table_name   IN    VARCHAR2,
   hive_partition    IN    BOOLEAN,
   table_name        IN    VARCHAR2   := NULL,
   perform_ddl       IN    BOOLEAN    DEFAULT FALSE,
   text_of_ddl       OUT   VARCHAR2
);

パラメータ

表6-10 CREATE_EXTDDL_FOR_HIVE関数のパラメータ

パラメータ 説明

cluster_id

HiveメタストアがあるHadoopクラスタ

db_name

Hiveデータベースの名前

hive_table_name

Hive表の名前

hive_partition

表がパーティション化されている(TRUE)かされていない(FALSE)か

table_name

作成されるOracle外部表の名前。すでに存在する名前にはできません。

perform_ddl

生成されたCREATE TABLE文を実行する(TRUE)か、コマンドのテキストを返すのみ(FALSE)か。

コマンドを確認または変更する場合は、コマンドを自動的に実行しないでください。

text_of_ddl

生成されたCREATE TABLE ORGANIZATION EXTERNAL文。

使用上のノート

Oracle DatabaseシステムはOracle Big Data SQL用に構成する必要があります。「データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて」を参照してください。

データ型変換は、Hiveデータ型とOracleデータ型の間のデフォルトのマッピングに基づいています。Hiveデータ型からOracleデータ型への変換を参照してください。

6.5.1.1

次の問合せは、デフォルトのHiveデータベースからmy_hive_tableCREATE EXTERNAL TABLE DDLを返します。Hiveへの接続は、ORACLE_BIGDATA_CONFIGディレクトリ内の構成ファイルを使用して確立されます。これは、HADOOP1クラスタの場所を識別します。

DECLARE
   DDLtxt VARCHAR2(4000);
BEGIN
   dbms_hadoop.create_extddl_for_hive(
     CLUSTER_ID=>'hadoop1',
     DB_NAME=>'default',
     HIVE_TABLE_NAME=>'my_hive_table',
     HIVE_PARTITION=>FALSE,
     TABLE_NAME=>'my_xt_oracle',
     PERFORM_DDL=>FALSE,
     TEXT_OF_DDL=>DDLtxt
   );
   dbms_output.put_line(DDLtxt);
END;
/

問合せは、次のSQLコマンドのテキストを返します。

CREATE TABLE my_xt_oracle
(
     c0 VARCHAR2(4000),
     c1 VARCHAR2(4000),
     c2 VARCHAR2(4000),
     c3 VARCHAR2(4000))
     ORGANIZATION EXTERNAL
        (TYPE ORACLE_HIVE
          DEFAULT DIRECTORY DEFAULT_DIR
          ACCESS PARAMETERS (
             com.oracle.bigdata.cluster=hadoop1
             com.oracle.bigdata.tablename=default.my_hive_table
          )
)
PARALLEL 2 REJECT LIMIT UNLIMITED