17 ORACLE_HDFSおよびORACLE_HIVEアクセス・ドライバ
ORACLE_HDFS
またはORACLE_HIVE
アクセス・ドライバを使用する外部表を作成するために使用するプロパティは、SQL文 CREATE TABLE ORGANIZATION EXTERNAL
でACCESS PARAMETERS
のopaque_format_spec
句の中に指定します。
17.1 プロパティを指定するための構文ルール
プロパティは、SQL CREATE TABLE
のACCESS PARAMETERS
句および構成ファイル内に、キーワード/値のペアを使用して設定します。構文は次のルールに従う必要があります。
-
各キーワード/値のペアの形式は、キーワード、コロンまたは等号と、値です。有効なキーワード/値のペアを次に示します。
keyword=value keyword:value
値は、セパレータの後の最初の非空白文字から行末までのすべてになります。セパレータと値の間の空白は無視されます。値の後の空白は保持されます。
-
プロパティ定義は1行または複数行にできます。
-
行の終了文字は、LF、改行または改行とLFの組合せです。
-
1つのプロパティ定義が複数行にわたる場合は、最終行以外の行の終了文字の前にバックスラッシュ(エスケープ文字)を付けます。この例では、
Keyword1
プロパティの値はValue part 1 Value part 2 Value part 3
です。Keyword1= Value part 1 \ Value part 2 \ Value part 3
-
先頭の空白の各物理行を削除して行を連結することで、論理行を作成できます。パーサーによって、プロパティ名および値が論理行から抽出されます。
-
文字の前に代入を示すバックスラッシュ(エスケープ文字)を付けることで、プロパティ名またはプロパティ値に特殊文字を埋め込むことができます。表17-1に、特殊文字を示します。
表17-1 プロパティの特殊文字
エスケープ・シーケンス | 文字 |
---|---|
|
バックスペース( |
|
水平タブ( |
|
LF ( |
|
改ページ( |
|
改行( |
|
二重引用符( |
|
一重引用符( |
|
バックスラッシュ( 複数のバックスラッシュが行末にある場合、パーサーは奇数のバックスラッシュに対してのみ値を次の行に継続します。 |
|
2バイト、ビッグ・エンディアンのUnicodeコード・ポイント。 1文字に2コード・ポイント(4バイト)が必要な場合、パーサーは2番目のコード・ポイントに |
17.2 ORACLE_HDFSアクセス・パラメータ
ORACLE_HDFS
アクセス・ドライバのアクセス・パラメータは、HDFS内のデータを特定し、それに基づいてHive表を作成するために必要なメタデータを提供します。
17.2.1 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"}
親トピック: ORACLE_HDFSアクセス・パラメータ
17.2.2 ORACLE_HDFSのオプションのパラメータ設定
ORACLE_HDFS
は、次のオプションのcom.oracle.bigdata
パラメータをサポートしています。これらのパラメータは、opaque_format_spec
句で指定できます。
次の例に、複数のアクセス・パラメータが設定されているCREATE TABLE
文を示します。
例17-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/*"));
親トピック: ORACLE_HDFSアクセス・パラメータ
17.3 ORACLE_HIVEアクセス・パラメータ
ORACLE_HIVE
は、Hiveカタログから外部データ・ソースに関するメタデータを取得します。通常、外部データ表の列へのHiveデータのデフォルト・マッピングは適切です。ただし、状況によっては、特殊なパラメータ設定が必要になることや、独自の理由でデフォルト値を上書きすることがあります。
17.3.1 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"}
親トピック: ORACLE_HIVEアクセス・パラメータ
17.3.2 ORACLE_HIVEのオプションのパラメータ設定
ORACLE_HIVE
は、次のオプションのcom.oracle.bigdata
パラメータをサポートしています。これらのパラメータは、opaque_format_spec
句で指定できます。
次の例に、複数のアクセス・パラメータが設定されているCREATE TABLE
文を示します。
例17-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}] ));
親トピック: ORACLE_HIVEアクセス・パラメータ
17.4 com.oracle.bigdataパラメータの説明
このトピックでは、ORACLE_HIVE
およびORACLE_HDFS
アクセス・ドライバにより使用されるcom.oracle.bigdata
パラメータについて説明します。
-
com.oracle.bigdata.colmap
-
com.oracle.bigdata.datamode
-
com.oracle.bigdata.erroropt
-
com.oracle.bigdata.fields
-
com.oracle.bigdata.fileformat
-
com.oracle.bigdata.log.exec
-
com.oracle.bigdata.log.qc
-
com.oracle.bigdata.overflow
-
com.oracle.bigdata.rowformat
-
com.oracle.bigdata.tablename
17.4.1 com.oracle.bigdata.colmap
ソース・データの列をOracle外部表の列にマップします。1つまたは複数の列マッピングのペアを定義できます。ソース・フィールド名がOracle列名の最大長を超える場合、または外部表で別の列名を使用する場合、このプロパティを使用します。
デフォルト値
Hive列と同じ名前を持つ外部表の列
セマンティクス
"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"}]
親トピック: com.oracle.bigdataパラメータの説明
17.4.2 com.oracle.bigdata.datamode
SmartScanがHadoopデータ・ソースをスキャンするために使用する方法を指定します。方法によって、パフォーマンスが大幅に違う可能性があります。
デフォルト値
automatic
セマンティクス
automatic
メタデータに基づいて、適切なモードを自動的に選択します。可能な場合は、c
モードを選択します。データにc
モードでサポートされていない形式が含まれる場合は、java
モードを選択します。
c
ファイル・バッファを読み取る場合はJavaを使用しますが、データを処理してOracle形式に変換する場合はCコードを使用します。デリミタ付きデータには、このモードを指定します。
Cコードでサポートされていない形式がデータに含まれる場合は、エラーが返されます。
java
データを処理してOracle形式に変換する場合は、JavaのSerDeおよびInputFormatを使用します。Parquet、RCFile、およびSerDeを必要とする他のデータ形式には、このモードを指定します。
親トピック: com.oracle.bigdataパラメータの説明
17.4.3 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"]
親トピック: com.oracle.bigdataパラメータの説明
17.4.4 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表のメタデータとして格納されます(TBLPROPERTIES
のcomment
プロパティ)。
親トピック: com.oracle.bigdataパラメータの説明
17.4.5 com.oracle.bigdata.fileformat
ORACLE_HDFS
によって生成されたHive表のROW FORMAT
句に基づいて、データ・ソースの行形式を説明します。
デフォルト値
TEXTFILE
セマンティクス
ORC
最適化された行列ファイル形式
PARQUET
列指向、バイナリ・ファイル形式
RCFILE
レコード列ファイル形式
SEQUENCEFILE
圧縮ファイル形式
TEXTFILE
プレーン・テキスト・ファイル形式
INPUTFORMAT
データ・ファイルからレコードを抽出できるJavaクラスを識別します。
OUTPUTFORMAT
出力レコードを目的の形式に設定できるJavaクラスを識別します。
親トピック: com.oracle.bigdataパラメータの説明
17.4.6 com.oracle.bigdata.log.exec
アクセス・ドライバがCDH上のパラレル処理として実行されている場合、問合せのCコードによって生成されたログ・ファイルを生成する方法を指定します。
アクセス・ドライバは、Hadoopクラスタ・ノード上で実行されている場合、ログ・ファイルの作成または書込みを実行しません。書込みはパラレル問合せプロセスによって実行されます。Javaコードからのログ・ファイルはlog4j
プロパティによって制御されます。このプロパティは、構成ファイルまたはアクセス・パラメータで指定されます。
デフォルト値
未定義(ロギングなし)
構文
[directory_object:]file_name_template
セマンティクス
directory_object
ログ・ファイルが作成されるHadoopクラスタ上のHDFSパスのOracleディレクトリ・オブジェクト。
file_name_template
ファイル名の生成に使用する文字列。次の表に、テンプレートで使用できるオプションの変数を示します。
表17-2 com.oracle.bigdata.log.execの変数
変数 | 値 |
---|---|
%p |
オペレーティング・システム・プロセス識別子(PID) |
%a |
プロセスを一意に識別する番号 |
%% |
パーセント記号(% )
|
例
次の例では、PIDおよび一意の番号を含むログ・ファイル名(xtlogp_hive14_3413_57
など)を生成します。
com.oracle.bigdata.log.exec= xtlogp_hive14_%p_%a
親トピック: com.oracle.bigdataパラメータの説明
17.4.7 com.oracle.bigdata.log.qc
アクセス・ドライバが問合せのログ・ファイルを生成する方法を指定します。
デフォルト値
未定義(ロギングなし)
構文
[directory_object:]file_name_template
セマンティクス
directory_object
ログ・ファイルが書き込まれるパスを指すOracleディレクトリ・オブジェクトの名前。この値を省略すると、ログは外部表のデフォルト・ディレクトリに書き込まれます。
file_name_template
ファイル名の生成に使用する文字列。表17-3に、文字列で使用できるオプションの変数を示します。
表17-3 com.oracle.bigdata.log.qcの変数
変数 | 値 |
---|---|
|
オペレーティング・システム・プロセス識別子(PID) |
|
パーセント記号( |
例
この例では、PIDおよびパーセント記号を含むログ・ファイル名(xtlogp_hive213459_%
など)を作成します。
com.oracle.bigdata.log.qc= xtlogp_hive21%p_%%
親トピック: com.oracle.bigdataパラメータの説明
17.4.8 com.oracle.bigdata.overflow
外部表の列に対して長すぎる文字列データの処理方法を示します。データ・ソースは文字またはバイナリにできます。Hiveの場合、データ・ソースはSTRUCT
、UNIONTYPES
、MAP
または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"}
親トピック: com.oracle.bigdataパラメータの説明
17.4.9 com.oracle.bigdata.rowformat
アクセス・ドライバがファイル内のレコードからフィールドを抽出するために必要な情報を提供します。
重要:
com.oracle.bigdata.rowformat
は、"type ORACLE_LOADER"を使用する従来型の外部表のアクセス・パラメータ構文とは関連していません。FIELDS
、TERMINATED
のようなキーワードなど、両方の句に出現するものもありますが、ネーミングの一致は偶然であり、機能が共通するということではありません。com.oracle.bigdata.rowformat
アクセス・パラメータは、デフォルトのHive serdeに変更を加えることなく渡されます。行から列を抽出するためのHive serdeは意図的に制限されます。複雑なケースは、特別なserdeによって処理されます。
デフォルト値
DELIMITED
セマンティクス
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}) .*")
親トピック: com.oracle.bigdataパラメータの説明
17.4.10 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
親トピック: com.oracle.bigdataパラメータの説明