7 Oracle Big Data SQLリファレンス
ご使用のOracle RDBMSリリースによっては、さらにCREATE_HYBRID_PARTNED_TABLEやSYNCHRONIZE_PARTITIONS_FOR_HIVEなどのプロシージャがある場合があります。詳細は、Oracle Databaseのドキュメントで、ご使用のRDBMSリリースの「Oracle Database PL/SQLパッケージおよびタイプ・リファレンス」を参照してください。
7.1 CREATE TABLE ACCESS PARAMETERS句
この項では、ORACLE_HDFS、ORACLE_HIVEまたはORACLE_BIGDATAアクセス・ドライバを使用する外部表を作成するときに使用するプロパティについて説明します。CREATE TABLE ORGANIZATION EXTERNAL文で、ACCESS PARAMETERSのopaque_format_spec句にパラメータを指定します。
この項の内容は次のとおりです。
7.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 -
先頭の空白の各物理行を削除して行を連結することで、論理行を作成できます。パーサーは、論理行からプロパティ名および値を抽出します。
-
文字の前に代入を示すバックスラッシュ(エスケープ文字)を付けることで、プロパティ名またはプロパティ値に特殊文字を埋め込むことができます。表7-1に特殊文字を示します。
表7-1 プロパティの特殊文字
| エスケープ・シーケンス | 文字 |
|---|---|
|
|
バックスペース( |
|
|
水平タブ( |
|
|
行フィード( |
|
|
フォーム・フィード( |
|
|
キャリッジ・リターン( |
|
|
二重引用符( |
|
|
一重引用符( |
|
|
バックスラッシュ( 複数のバックスラッシュが行末にある場合、パーサーは奇数のバックスラッシュに対してのみ値を次の行に継続します。 |
|
|
2バイト、ビッグ・エンディアン、Unicodeコード・ポイント。 1文字に2コード・ポイント(4バイト)が必要な場合、パーサーは2番目のコード・ポイントに |
7.1.2 ORACLE_HDFSアクセス・パラメータ
ORACLE_HDFSアクセス・ドライバのアクセス・パラメータは、HDFS内のデータを特定するのに必要なメタデータを提供し、Hive表を作成します。
7.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"}7.1.2.2 ORACLE_HDFSのオプションのパラメータ設定
ORACLE_HDFSは、次のオプションのcom.oracle.bigdataパラメータをサポートしています。このパラメータは、opaque_format_spec句で指定できます。
例7-1に、複数のアクセス・パラメータが設定されているCREATE TABLE文を示します。
例7-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/*"));7.1.3 ORACLE_HIVEアクセス・パラメータ
ORACLE_HIVEは、Hiveカタログから外部データ・ソースに関するメタデータを取得します。
通常、外部データ表の列へのHiveデータのデフォルト・マッピングは適切です。ただし、状況によっては、特殊なパラメータ設定が必要です。独自の理由でデフォルト値を上書きする場合もあります。
7.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"}7.1.3.2 ORACLE_HIVEのオプションのパラメータ値
ORACLE_HIVEは、次のオプションのcom.oracle.bigdataパラメータをサポートしています。このパラメータは、opaque_format_spec句で指定できます。
例7-2に、複数のアクセス・パラメータが設定されているCREATE TABLE文を示します。
例7-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}]
));7.1.4 ORACLE_HDFSおよびORACLE_HIVEのアクセス・パラメータの完全なリスト
7.1.4.1 com.oracle.bigdata.buffersize
大きいレコード読取りのバッファ・サイズをKBで設定します。デフォルトのバッファ・サイズよりも大きいレコードを読み取る必要がある場合にこの値を設定します。
デフォルト値
1000 KB
構文
com.oracle.bigdata.buffersize: n
例
次の例ではバッファ・サイズを100 MBに設定します。
com.oracle.bigdata.buffersize: 100000
7.1.4.2 com.oracle.bigdata.datamode
SmartScanがHadoopデータ・ソースをスキャンするために使用する方法を指定します。方法によって、パフォーマンスに大きな違いが生じる可能性があります。
デフォルト値
automatic
セマンティクス
automatic
メタデータに基づいて適切なモードを自動的に選択します。可能な場合はcモードを選択します。データにcモードでサポートされていない形式が含まれる場合は、javaモードを選択します。
c
ファイル・バッファを読み取る場合はJavaを使用しますが、データを処理してOracle形式に変換する場合はCコードを使用します。デリミタ付きデータにこのモードを指定します。
データにCコードでサポートされていない形式が含まれる場合は、エラーが返されます。
java
データを処理してOracle形式に変換する場合は、Java SerDesおよびInputFormatsを使用します。Parquet、RCFileおよびSerDeを必要とする他のデータ形式にこのモードを指定します。
7.1.4.3 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"}]7.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"]7.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表のメタデータとして格納されます(TBLPROPERTIESのcommentプロパティ)。
7.1.4.6 com.oracle.bigdata.fileformat
ORACLE_HDFSによって生成されたHive表のROW FORMAT句に基づいて、データ・ソースの行形式を説明します。
デフォルト値
TEXTFILE
セマンティクス
ORC
最適化された行カラムナ・ファイル形式
PARQUET
列指向、バイナリ・ファイル形式
RCFILE
レコード・カラムナ・ファイル形式
SEQUENCEFILE
圧縮ファイル形式
TEXTFILE
プレーン・テキスト・ファイル形式
INPUTFORMAT
データ・ファイルからレコードを抽出できるJavaクラスを識別します。
OUTPUTFORMAT
出力レコードを目的の形式に設定できるJavaクラスを識別します。
7.1.4.7 com.oracle.bigdata.log.exec
アクセス・ドライバがCDH上の並列プロセスとして実行されている場合、問合せのCコードによって生成されたログ・ファイルを生成する方法を指定します。
アクセス・ドライバはHadoopクラスタ・ノード上で実行されている場合、ログ・ファイルの作成または書込みを行いません。並列問合せプロセスがログ・ファイルを書き込みます。Javaコードからのログ・ファイルはlog4jプロパティによって制御されます。このプロパティは、構成ファイルまたはアクセス・パラメータで指定されます。
デフォルト値
未定義(ロギングなし)
構文
[directory_object:]file_name_template
セマンティクス
directory_objectログ・ファイルが作成されるHadoopクラスタ上のHDFSパスのOracleディレクトリ・オブジェクト。
file_name_template
ファイル名の生成に使用する文字列。この表では、テンプレートで使用できるオプションの変数を示します。
表7-2 com.oracle.bigdata.log.execの変数
| 変数 | 値 |
|---|---|
|
|
オペレーティング・システム・プロセス識別子(PID) |
|
|
プロセスを一意に識別する番号。 |
|
|
パーセント記号( |
例
次の例では、PIDおよび一意の番号を含むログ・ファイル名(xtlogp_hive14_3413_57など)を生成します。
com.oracle.bigdata.log.exec= xtlogp_hive14_%p_%a7.1.4.8 com.oracle.bigdata.log.qc
アクセス・ドライバが問合せのログ・ファイルを生成する方法を指定します。
デフォルト値
未定義(ロギングなし)
構文
[directory_object:]file_name_templateセマンティクス
directory_object
ログ・ファイルが書き込まれるパスを指すOracleディレクトリ・オブジェクトの名前。この値を省略すると、ログは外部表のデフォルト・ディレクトリに書き込まれます。
file_name_template
ファイル名の生成に使用する文字列。表7-3に、文字列で使用できるオプションの変数を示します。
表7-3 com.oracle.bigdata.log.qcの変数
| 変数 | 値 |
|---|---|
|
|
オペレーティング・システム・プロセス識別子(PID) |
|
|
パーセント記号( |
例
この例では、PIDおよびパーセント記号を含むログ・ファイル名(xtlogp_hive213459_%など)を作成します。
com.oracle.bigdata.log.qc= xtlogp_hive21%p_%%7.1.4.9 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"}7.1.4.10 com.oracle.bigdata.rowformat
アクセス・ドライバがファイル内のレコードからフィールドを抽出するために必要な情報を提供します。
重要:
com.oracle.bigdata.rowformatは、"type ORACLE_LOADER"を使用する従来の外部表のアクセス・パラメータ構文とは無関係です。FIELDS、TERMINATEDなどのキーワードもあれば、両方の句に現れるキーワードもありますが、ネーミングにおける共通性は偶然であり、共通機能を意味するものではありません。com.oracle.bigdata.rowformatアクセス・パラメータは、デフォルトのHive SerDeに対する変更なしに渡されます。行から列を抽出するHive SerDeは意図的に制限されます。複雑な場合は、専用のSerDesによって処理されます。
デフォルト値
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}) .*") 7.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_SUMMARY7.1.5 ORACLE_BIGDATAアクセス・パラメータ
すべてのファイル形式に共通するアクセス・パラメータのセットがあります。特定のファイル形式に固有のパラメータもあります。
共通のアクセス・パラメータ
次の表で示すパラメータは、ORACLE_BIGDATAを介してアクセスされるすべてのファイル形式に共通です。1列目には、すべてのデータ・ファイル・タイプに共通する各アクセス・パラメータを示します。2列目には、各パラメータの説明を示します。
表7-4 共通のアクセス・パラメータ
| 共通のアクセス・パラメータ | 説明 |
|---|---|
|
|
オブジェクト・ストア内のデータ・ファイルにアクセスするときに使用する資格証明オブジェクトを指定します。 このアクセス・パラメータは、オブジェクト・ストアのアクセスに必要です。ディレクトリ・オブジェクトを介したファイルへのアクセスの場合や、パブリック・バケットに格納されているデータの場合は必要はありません。 資格証明に指定する名前は、表の所有者と同じスキーマにある資格証明オブジェクトの名前である必要があります。この表に対する 資格証明オブジェクトを作成するには、
DBMS_CREDENTIAL PL/SQLパッケージ内のDBMS_CREDENTIAL.CREATE_CREDENTIALを使用します:
|
|
|
ファイルの形式を指定します。このパラメータの値により、ファイルを処理するリーダーが特定されます。各リーダーはこの他にもアクセス・パラメータをサポートでき、それらは他のリーダーでサポートされるものもあれば、サポートされないものもあります。 有効な値:
parquet、orc、textfile、avro、csv、jsondoc、jsontable
デフォルト: |
|
|
ログ・メッセージをログ・ファイルに書き込むかどうかを指定します。 有効な値: デフォルト: |
|
|
パラレル問合せコーディネータが作成したログ・ファイルの名前を指定します。このパラメータは、 |
|
|
問合せの実行時に作成されるログ・ファイルの名前を指定します。この値は、 有効な値: デフォルト: |
Avro固有のアクセス・パラメータ
共通のアクセス・パラメータの他に、Avroファイル形式でのみ有効なパラメータもあります。この表の1列目ではAvroファイル形式に固有のアクセス・パラメータを示し、2列目ではそのパラメータについて説明を示します。現時点では、Avro固有のパラメータは1つのみです。
表7-5 Avro固有のアクセス・パラメータ
| Avro固有のパラメータ | 説明 |
|---|---|
|
|
バイト配列に格納されている10進数の表現を指定します。 有効な値: デフォルト: このパラメータを使用しない場合、Avroの10進数列は、バイト配列に格納されているのはAvro仕様で定義されているとおりの値の数値表現(デフォルトは |
Parquet固有のアクセス・パラメータ
一部のアクセス・パラメータは、Parquetファイル形式でのみ有効です。この表の1列目ではParquetファイル形式固有のアクセス・パラメータを示し、2列目ではそのパラメータについて説明を示します。
表7-6 Parquet固有のアクセス・パラメータ
| Parquet固有のアクセス・パラメータ | 説明 |
|---|---|
|
|
これは、バイナリを文字列として格納するかどうかを指定するブール・プロパティです。 有効な値: デフォルト: |
|
|
これは、 有効な値: デフォルト: |
テキスト・ファイルおよびCSVに固有のアクセス・パラメータ
テキスト・ファイル形式とカンマ区切り値(csv)ファイル形式は、Hiveテキスト・ファイル形式に似ています。この場合には、デリミタ付きファイルからテキスト・データおよびcsvデータが読み取られます。ORACLE_BIGDATAでは、行の終了文字(\n、\rまたは\r\n)が自動的に検出されます。デフォルトでは、ファイル内のフィールドはカンマで区切られておりファイル内のフィールドの順序は外部表内の列の順序と一致すると想定されています。
例7-3 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
例7-4 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
例7-5 JSONデータ・ファイル - 列へのJSON値のマップ
この方法は、単純なJSONドキュメントに適しています。ここでは、行は主に、複数のキー/値ペアを含む単一のオブジェクトからなると想定しています。通常の表と同様に、列のデータ型は、ファイル内の値のデータ型と一致している必要があります。ネストされた値(複雑な値)がドキュメントに含まれている場合は、パーサーにより、値がJSONドキュメントとして出力されます。ただし、これは文字列として格納されます。ユーザーは、アクセス・パラメータcom.oracle.bigdata.fileformat=jsontableを使用してこのマッピング方針を指定します。
このマッピング・スキームの例として、次のUC1ファイルを考えてみます:
{"ts":1603802918441,"level":"DEBUG1","component":"resp","cell-id":"cloudsql-v1-12"}
{"ts":1603802918442,"level":"DEBUG2","component":[{"tst":1},{"tst":2},{"tst":3}],"cellid":"cloudsql-v1-12"}
{"ts":1603802918443,"level":"DEBUG3","component":"resp","cell-id":"cloudsql-v1-12"}
{"ts":1603802918444,"level":"DEBUG4","component":"resp","cell-id":"cloudsql-v1-12"}
次の外部表を作成できます:
CREATE TABLE logs(
ts number(20),
lvl varchar(35)
component varchar(50),
cellid varchar2(20)
) ORGANIZATION EXTERNAL
(TYPE ORACLE_BIGDATA
DEFAULT DIRECTORY default_dir
ACCESS PARAMETERS
(com.oracle.bigdata.fileformat = jsontable)
location ('nested.json'));
その後、次のようにこの表を問い合せることができます:
SQL> Select * from logs;
TS LVL COMPONENT CELLID
---------- --------- -------------------------------- -----------------
1.6038E+12 DEBUG1 resp cloudsql-v1-12
1.6038E+12 DEBUG2 [{"tst":1},{"tst":2},{"tst":3}] cloudsql-v1-12
1.6038E+12 DEBUG3 resp cloudsql-v1-12
1.6038E+12 DEBUG4 resp cloudsql-v1-12
4 rows selected.
行2にあるcomponent列の値がJSONドキュメントとして表されていることに注目してください。前述のとおり、これはvarcharとしてv1に格納されます。通常、データ型マッピング方針は、表のDDLで定義されているデータ型によって決まります。データ型が一致しない場合、その値は拒否され、処理は続行されます。たとえば、次のシナリオを考えてみます。
{"Customer ID", 123456}
{"Customer ID", "123456"}
{"Customer ID", true}
表の列が数値として定義されている場合、上の行3では変換エラーが発生し、その値は拒否されます。ただし、行2の、引用符で囲まれた値にはリジリエンスがあります。
例7-6 JSONデータ・ファイル - 行全体が単一の列にマッピングされる。
このマッピング方針では、JSONドキュメント全体が、JSONタイプの単一の列にマッピングされます。ユーザーは、アクセス・パラメータcom.oracle.bigdata.fileformat=jsondocを使用してこのマッピング方針を指定します。
このマッピング・スキームの例として、次のUC1ファイルを考えてみます:
{"ts":1603802918441,"level":"DEBUG1","component":"resp","cell-id":"cloudsql-v1-12"}
{"ts":1603802918442,"level":"DEBUG2","component":[{"tst":1},{"tst":2},{"tst":3}],"cellid":"cloudsql-v1-12"}
{"ts":1603802918443,"level":"DEBUG3","component":"resp","cell-id":"cloudsql-v1-12"}
{"ts":1603802918444,"level":"DEBUG4","component":"resp","cell-id":"cloudsql-v1-12"}
次の外部表を作成できます:
CREATE TABLE logs (data JSON)
ORGANIZATION EXTERNAL
(TYPE ORACLE_BIGDATA
DEFAULT DIRECTORY default_dir
ACCESS PARAMETERS
(com.oracle.bigdata.fileformat = jsondoc)
location ('nested.json'));
その後、外部表を問い合せることができます:
SQL> select l.doc.cell-id, l.doc.component[1].tst
from logs l
where l.doc.ts = 1603802918442;
cell-id tst
--------------------------------
cloudsql-v1-12 2
上の例では、2番目の行のcomponentおよびcell-id値(TS = 1603802918442)を選択しました。行2のcomponent値が配列であることに注目してください。次に、配列の2番目の項目(つまり、COMPONENT[1])を問い合せます。
例7-7 JSONデータ・ファイル
{"id":"72","name":"George","lat":40.76727216,"lon":-73.99392888,"segments":["wealthy","middle-aged"],"age":45}
{"id":"79","name":"Lucy","lat":40.71911552,"lon":-74.00666661,"segments":["married","yes"],"age":33}— Create the external table over Json source
CREATE TABLE people (
data json
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_BIGDATA
ACCESS PARAMETERS(
com.oracle.bigdata.fileformat=jsondoc
)
LOCATION ('https://swftobjectstorage.us-ashburn-1.oraclecloud.com/n/mytenant/b/people/o/data.json')
)
REJECT LIMIT UNLIMITED;
–---Select data from external table
select s.data.id,
s.data.name,
s.data.segments[0]
from people s;
id Name segments[0]
–--- –---- –-----------------------------------
72 George wealthy
79 Lucy married
テキスト・ファイル、CSVおよびJSONに固有のアクセス・パラメータ
表7-7 テキスト・ファイルおよびCSVに固有のアクセス・パラメータ
| テキスト・ファイル固有のアクセス・パラメータ | 説明 |
|---|---|
|
|
ファイルの読取りに使用する入出力(I/O)バッファのサイズを指定します。この値は、バッファのサイズ(KB単位)です。また、バッファ・サイズはレコードで許容される最大サイズでもあります。フォーマット・リーダーで、この値より大きいレコードが検出されると、エラーが返されます。 デフォルト: |
|
|
有効な値: デフォルト: 例: |
|
|
ソース・ファイルの文字セットを指定します。 有効な値: デフォルト: 例: |
|
|
このパラメータを指定した場合は、コードで、指定された圧縮スキームに従ってデータの解凍が試みられます。
有効な値: デフォルト: 圧縮なし
|
|
|
行にデータ型変換エラーがある場合は、関連する列がnullとして格納されるか、その行が拒否されます。有効な値: デフォルト: 例: |
|
|
フィールドの値を示すために使用する文字が |
|
|
フィールド値を区切るために使用する文字を指定します。この文字値は一重引用符で囲む必要があります。例: デフォルト: |
|
|
埋込みフィールドの終端文字またはフィールド値の行の終端文字をエスケープするために使用する文字を指定します。この文字値は一重引用符で囲む必要があります。例: |
|
|
ソース・ファイル内の日付書式を指定します。書式オプション
デフォルト: 例: |
|
|
データ・ファイルのフィールドの順序を指定します。この値は、データ型がオプションであるという1つの例外を除き、 |
|
|
trueに設定されている場合、空白行は無視されます。 有効な値: デフォルト: 例: |
|
|
見つからない列はnullとして格納されます。 有効な値: デフォルト: 例: |
com.oracle.bigdata.json.ejson |
拡張JSONを有効にするかどうかを指定します。 有効な値: デフォルト: 例: |
com.oracle.bigdata.json.path |
表の行にマップする一連のネストされたJSON値を特定するJSONパス式。 有効な値: 文字列プロパティ デフォルト: 例: |
com.oracle.bigdata.json.unpackarrays |
JSONファイル内にある配列をアンボックスするかどうかを指定します。ファイルがJSONオブジェクトの配列からなります。ファイル全体が、構文的に有効なJSONドキュメントです。そのようなファイルの例は、[{"a":1}、{"a":2}、{"a":3}]です。 有効な値: デフォルト: 例: |
|
|
フィールドの引用符文字を指定します。指定した場合、その引用符文字はロード時に削除されます。 有効な値: 文字 デフォルト: Null, (引用符を使用しないことを意味する) 例: |
|
|
指定した数だけ行が拒否されると、操作エラーが発生します。これは、変換エラーでレコードが拒否される場合にのみ当てはまります。 有効な値: 数値 デフォルト: 例: |
com.oracle.bigdata.removequotes |
ソース・ファイル内のフィールドを囲む引用符が削除されます。 有効な値: デフォルト: 例: |
|
|
ファイルの先頭からスキップする必要がある行の数を指定します。 有効な値: 数値 デフォルト: 例: |
|
|
ソース・ファイル内のタイムスタンプ書式を指定します。書式オプション
有効な値: デフォルト: 例: |
|
|
ソース・ファイル内のローカル・タイムゾーン書式のタイムスタンプを指定します。書式オプション
有効な値: デフォルト: 例: |
|
|
ソース・ファイル内のタイムゾーン書式のタイムスタンプを指定します。書式オプション
有効な値: デフォルト: 例: |
|
|
フィールドの先頭と末尾の空白の削除方法を指定します。 有効な値: デフォルト: 例: |
|
|
このオプションでは、ファイル内のデータがフィールドに対して長すぎる場合に、行が拒否されるかフィールドがNULLに設定されるのではなく、フィールドの値が切り捨てられます。 有効な値: デフォルト: 例: |
7.2 Hiveの静的データ・ディクショナリ・ビュー
Oracle Databaseカタログには、Hive表の複数の静的データ・ディクショナリ・ビューが含まれています。これらのデータ・ディクショナリ・ビューを問い合せて、アクセスできるHive表に関する情報を検出できます。
Oracle DatabaseからHiveデータベースにアクセスする場合、ORACLE_BIGDATA_CONFIGディレクトリ・オブジェクトの読取りアクセス権が必要です。
7.2.1 ALL_HIVE_DATABASES
ALL_HIVE_DATABASESは、現在のユーザーにアクセスできるHiveメタストア内のすべてのデータベースを示します。
関連ビュー
-
DBA_HIVE_DATABASESは、Hiveメタストア内のすべてのデータベースを示します。 -
USER_HIVE_DATABASESは、現在のユーザーが所有するHiveメタストア内のデータベースを示します。
| 列 | データ型 | NULL | 説明 |
|---|---|---|---|
|
|
|
|
HiveメタストアがあるHadoopクラスタ |
|
|
|
|
Hiveデータベース名 |
|
|
|
Hiveデータベースの説明 |
|
|
|
|
|
|
|
|
|
HiveデータベースのURI |
関連項目:
7.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 | 説明 |
|---|---|---|---|
|
|
|
|
HiveメタストアがあるHadoopクラスタ |
|
|
|
|
Hiveデータベースの名前 |
|
|
|
|
Hive表の名前 |
|
|
|
||
|
|
|
Hive表内の列の数 |
|
|
|
|
表が作成された時刻 |
|
|
|
|
最新のアクセス時刻 |
|
|
|
|
Hive表の所有者 |
|
|
|
|
|
Hive表のタイプ(外部、管理対象など) |
|
|
|
表がパーティション化されている( |
|
|
|
|
パーティションの数 |
|
|
|
|
入力形式 |
|
|
|
|
出力形式 |
|
|
|
|
SerDeシリアル化情報 |
|
|
|
|
表が圧縮されている( |
|
|
|
|
HiveデータベースのURI |
関連項目:
7.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 | 説明 |
|---|---|---|---|
|
|
|
|
HiveメタストアがあるHadoopクラスタ |
|
|
|
|
Hiveデータベースの名前。空白の場合は、デフォルト・データベース |
|
|
|
|
Hive表の名前 |
|
|
|
|
Hive列の名前 |
|
|
|
|
Hive列のデータ型 |
|
|
|
|
Hiveデータ型と同等のOracleデータ型 |
|
|
|
||
|
|
|
Hive表の所有者 |
|
|
|
|
表が作成された時刻 |
|
|
|
|
HiveデータベースのURI |
関連項目:
7.2.4 DBA_HIVE_DATABASES
DBA_HIVE_DATABASESは、Hiveメタストア内のすべてのデータベースを示します。列はALL_HIVE_DATABASESの列と同じです。
関連項目:
7.2.5 DBA_HIVE_TABLES
DBA_HIVE_TABLESは、Hiveメタストア内のすべての表を示します。列はALL_HIVE_TABLESの列と同じです。
Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。「bigdata_configディレクトリについて」を参照してください。
関連項目:
7.2.7 USER_HIVE_DATABASES
USER_HIVE_DATABASESは、現在のユーザーが所有するHiveメタストア内のデータベースを示します。列(OWNERを除く)はALL_HIVE_DATABASESの列と同じです。
関連項目:
7.2.8 USER_HIVE_TABLES
USER_HIVE_TABLESは、Hiveメタストア内の現在のユーザーが所有するデータベースの表を示します。列(OWNERを除く)はALL_HIVE_TABLESの列と同じです。
Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。
関連項目:
7.2.9 USER_HIVE_COLUMNS
USER_HIVE_COLUMNSは、現在のユーザーが所有するHiveデータベースの表の列を示します。列(OWNERを除く)はALL_HIVE_COLUMNSの列と同じです。
Oracle Big Data SQL構成は、現在のユーザーのデフォルトのHiveデータベースを識別する必要があります。現在のユーザーには、ORA_BIGSQL_CONFIGデータベース・ディレクトリのREAD権限も必要です。「bigdata_configディレクトリについて」を参照してください。
関連項目:
7.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ロールを付与して、これらのプロシージャを起動できるようにします。
7.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
); 表7-8 ADD_USER_MAPのパラメータ
| パラメータ | 説明 |
|---|---|
cluster_name |
マップが適用されるHadoopクラスタの名前。クラスタ名を[DEFAULT]とすることで、デフォルト・クラスタを指定します。
|
current_database_user |
現在有効なデータベース・ユーザー。Oracleは、これを使用して発行局を確認します。値'*'は、他に条件に適合する行が存在しない場合に、この行が使用されることを示します。デフォルト値はありません。また、NULLの値は許可されません。 |
syscontext_namespace |
Oracle USERENVネームスペースの場合、許容される値はGLOBAL_UID、CLIENT_IDENTIFIERおよびAUTHENTICATED_IDENTITYのみです。
Oracle Databaseのインストールで認証にKerberos資格証明、SSL、Active DirectoryまたはLDAPを使用する場合、Hadoopシステムでも同じ認証フレームワークを使用している可能性があります。その場合は、 |
syscontext_parm_hadoop_user |
現在のデータベース・ユーザーを偽装するHadoopユーザー。 |
ノート:
current_database_userとsyscontext_parm_hadoop_userの値は、単一のアスタリスク文字(*)またはOracle simple_sql_nameアサーションの要件を満たす文字列になります。
-
名前は英字で始まる必要があります。2番目以降の文字位置には、英数文字と文字_、$、#を含めることができます。
-
引用符付きのSQL名も許容されます。
-
引用符付きの名前は、二重引用符で囲まれている必要があります。
-
引用符付きの名前は、引用符の間に任意の文字を使用できます。
-
名前の内側にある引用符は、行内で2つの引用符文字で表されます。たとえば、"a name with ""の内側の"は有効な引用符付きの名前です。
-
入力パラメータには、先頭や末尾に任意の数の空白を含めることができます。
7.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パラメータの説明があります。
7.3.3 マルチユーザー認証セキュリティ表
SYS.BDSQL_USER_MAPは、マルチユーザー認証セキュリティ表です。
この表の更新には、ADD_USER_MAPプロシージャとREMOVE_USER_MAPプロシージャを使用します。
主キーは、(cluster_name, current_database_user)です。
表7-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 | この列値には、相対する解釈があります。
|
ここでは、データベースに対するログオン認証に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 | * |
7.4 DBMS_BDSQS PL/SQLパッケージ
DBMS_BDSQS PL/SQLパッケージを使用すると、外部表の統計を収集し、外部表を対応するHIVE表と同期させることができます。
7.4.1 GATHER_EXTERNAL_TABLE_STATS
これは、Oracle Big Data SQL外部表(ORACLE_HDFS、ORACLE_HIVE、ORACLE_BIGDATA)の統計を手動で収集するためのPL/SQLインタフェースです。
動作とパラメータはdbms_stats.gather_table_statsと同じですが、表の所有者はプロシージャを実行しているセッション・ユーザーである必要があり、このプロシージャを使用して収集した統計は再起動後も保持されます。このプロシージャは、Hiveから自動的に同期される外部表では使用できません。DBMS_STATS.GATHER_TABLE_STATSプロシージャを参照してください。
構文
PROCEDURE gather_external_table_stats(
tabname varchar2,
partname varchar2 default null,
estimate_percent number default dbms_stats.DEFAULT_ESTIMATE_PERCENT,
block_sample boolean default FALSE,
method_opt varchar2 default dbms_stats.DEFAULT_METHOD_OPT,
degree number default dbms_stats.DEFAULT_DEGREE_VALUE,
granularity varchar2 default dbms_stats.DEFAULT_GRANULARITY,
cascade boolean default dbms_stats.DEFAULT_CASCADE,
stattab varchar2 default null,
statid varchar2 default null,
statown varchar2 default null,
no_invalidate boolean default dbms_stats.to_no_invalidate_type(dbms_stats.get_param('NO_INVALIDATE')),
stattype varchar2 default 'DATA',
force boolean default FALSE,
options varchar2 default dbms_stats.DEFAULT_OPTIONS
)
7.5 DBMS_BDSQS_ADMIN PL/SQLパッケージ
このパッケージには、HadoopクラスタのデータベースおよびKerberosユーザーを管理するプロシージャが含まれています。
7.5.1 ADD_DATABASE_USERS
このPL/SQLプロシージャを使用して、セキュアなクラスタの問合せサーバーにデータベース・ユーザーを追加します。その後、Kerberosプリンシパルのかわりにデータベース管理ユーザーを使用して問合せサーバーに接続できます。
- ユーザーに外部表へのアクセス権を付与するために必要なすべての内部ロールおよび権限の割当て。
- 問合せサーバーの再起動時に新しいユーザーが失われないようにするための「保存」。
ノート:
CREATE USERを使用した新規ユーザーの追加は、問合せサーバーではサポートされません。
ADD_DATABASE_USERを使用して作成されたユーザーを完全に削除するには、DROP_DATABASE_USERを使用して削除する必要があります。DROP_DATABASE_USERSを参照してください。
ADD_DATABASE_USERプロシージャでは、ユーザー・パスワードの設定はサポートされません。ユーザーはNO AUTHENTICATIONを使用して作成され、ロックされます。ADD_DATABASE_USERを起動した後、管理者はALTER USER文を手動で発行して、ユーザー・パスワードを設定し、ユーザーをロック解除する必要があります。ユーザー・パスワードは通常、ALTER USER文を使用して設定でき、変更されたパスワードは問合せサーバーの再起動後も保持されます。
ADD_DATABASE_USERプロシージャは、SYSまたはBDSQL_ADMINロールを持つユーザーが実行する必要があります。
構文
procedure add_database_users (
users_list VARCHAR2,
op_semantics VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR');
ADD_DATABASE_USERSのパラメータ
| パラメータ | 説明 |
|---|---|
| users_list | 問合せサーバーに追加するデータベース・ユーザーの名前。これらのユーザーは、Hadoopクラスタにアクセスするデータベース・ユーザーと同じです。複数のデータベース・ユーザーを指定するには、データベース・ユーザー名のカンマ区切りリストを一重引用符で囲んで指定します。名前は、CREATE USER文で順守されているデータベース・オブジェクト名に対するOracleの規則を厳密に順守する必要があります。 |
| op_semantics |
操作セマンティクス(os)パラメータは、次のいずれかのオプションです。失敗した追加操作はすべて、
|
エラー処理
sys.bdsqs_dbusers_errors$ログ表で確認できます。このPL/SQLプロシージャでは、次の2つのタイプのエラーが発生する場合があります。
users_listを処理できない解析エラー。たとえば、リストに一致しない二重引用符が含まれている場合です。解析エラーが発生すると、コール全体が失敗します。- 処理エラーがコールの実行時に発生します。処理エラーのエラー動作は、
op_semanticsパラメータを使用して構成できます。
7.5.2 ADD_KERBEROS_PRINCIPALS
このプロシージャは、問合せサーバーのKerberosプリンシパルを追加します。問合せサーバー・ユーザーは、HadoopクラスタにアクセスできるKerberosプリンシパルの同じセットから選択されます。ユーザーはKerberosを使用して認証されるため、パスワードを問合せサーバーで管理する必要はありません。
構文
DBMS_BDSQS_ADMIN.ADD_KERBEROS_PRINCIPALS(
principals_list varchar2,
op_semantics varchar2 DEFAULT 'STOP_ON_FIRST_ERROR'
)
表7-10 ADD_KERBEROS_PRINCIPALSのパラメータ
| パラメータ | 説明 |
|---|---|
| principals_list | 追加する問合せサーバー・ユーザーの名前。これらの問合せサーバー・ユーザーは、Hadoopクラスタにアクセスするのと同じKerberosプリンシパルです。Kerberosプリンシパルを複数指定するには、プリンシパルの文字列を一重引用符で囲んだカンマ区切りリストを指定します。 |
| op_semantics |
操作セマンティクス(os)パラメータは、次のいずれかのオプションです。失敗した追加操作はすべて、sys.bdsqs_kerberos_errors$ログ表で確認できます。
|
使用上のノート
bdsqs_kerberos_errors$のスキーマは次のとおりです。
CREATE TABLE sys.bdsqs_kerberos_errors$
( kerberos_principal VARCHAR2(4000), /* principal name */
operation VARCHAR2(4), /* ADD, DROP or SYNC*/
error_code NUMBER, /* Error num emmited during operation */
error_message VARCHAR2(4000), /* Emitted error message */
additional_info VARCHAR2(4000) /* Not used yet */
);
bdsqs_kerberos_errors$ログ表には、次の状況の例外ログが含まれます。
- add_kerberos_principalsまたはdrop_kerberos_principalsプロシージャを起動する場合。
- bds-config.json (操作SYNC)のkerberosのセクションでsync_principalsパラメータをtrueに設定したうえで、セキュアなクラスタ上でjaguarインストール・コマンドを実行する場合。
- jaguar sync_principals (操作SYNC)を実行する場合。
bdsqs_kerberos_errors$ログ表は、前述のいずれかのコマンドを起動する前にクリアされます。プロシージャが正常に起動された後でbdsqs_kerberos_errors$を問い合せても、結果は戻されません。
これらは、bdsqs_kerberos_errors$レコードのフィールドおよびフィールドに使用可能な値です。
| bdsqs_kerberos_errors$レコード・フィールド | 使用可能な値 |
|---|---|
| OPERATION | ADD、DROP、SYNCまたはUNDO |
| ERROR_CODE | 発生した例外の数値コード(SQLCODE) |
| ERROR_MESSAGE | 発生した例外のエラー・メッセージ(SQLERRM) |
| ADDITIONAL_INFO | 発生した例外に関連する追加情報。現在使用されていません。 |
例
次の例では、Kerberosプリンシパルprinc1@REALM.COMとprinc2@REALM.COMによって外部から識別される2つのデータベース・ユーザーを作成しています。デフォルトのSTOP_ON_FIRST_ERRORパラメータが使用されます。
exec dbms_bdsqs_admin.add_kerberos_principals('princ1@REALM.COM,
princ2@REALM.COM');
次の例では、有効なprinc3@REALM.COMとprinc4@REALM.COMというKerberosプリンシパルに対して2つのデータベース・ユーザーを作成しています。ただし、princ4は有効なKerberosプリンシパルではないため、例外が発生し、sys.bdsqs_kerberos_errors$表にエラー・ログが追加されます。
exec dbms_bdsqs_admin.add_kerberos_principals('princ3@REALM.COM, princ4, princ4@REALM.COM','ABSORB_ERRORS');
次の例では、princ5@REALM.COMのデータベース・ユーザーを作成していますが、princ6が有効なKerberosプリンシパル名ではないため、例外が発生します。また、sys.bdsqs_kerberos_errors$表にエラー・ログが追加されます。
exec dbms_bdsqs_admin.add_kerberos_principals('princ5@REALM.COM,
princ6','STOP_ON_FIRST_ERROR');
次の例では、princ8が有効なKerberosプリンシパル名ではなく、UNDO_CHANGESパラメータが使用されているため、データベース・ユーザーは作成されません。当初、プロシージャはprinc7@REALM.COMのデータベース・ユーザーを作成しますが、princ8を無効なKerberosプリンシパル名であるとみなします。UNDO_CHANGESパラメータを使用しているため、princ7@REALM.COMに対して作成したデータベース・ユーザーが削除され、例外が発生し、sys.bdsqs_kerberos_errors$表にエラー・ログが追加されます。
exec dbms_bdsqs_admin.add_kerberos_principals('princ7@REALM.COM, princ8','UNDO_CHANGES');
7.5.3 DROP_DATABASE_USERS
これは、データベース・ユーザーを手動で削除するためのPL/SQLインタフェースです。
ADD_DATABASE_USERを使用して作成されたユーザーを完全に削除するには、DROP_DATABASE_USERを使用して削除する必要があります。ADD_DATABASE_USERSを参照してください。
構文
procedure drop_database_users(
users_list VARCHAR2,
op_semantics VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR'
);
DROP_DATABASE_USERSのパラメータ
| パラメータ | 説明 |
|---|---|
| users_list | 問合せサーバーから削除するデータベース・ユーザーの名前。これらのユーザーは、Hadoopクラスタにアクセスできるデータベース・ユーザーと同じです。複数のデータベース・ユーザーを指定するには、データベース・ユーザー名のカンマ区切りリストを一重引用符で囲んで指定します。 |
| op_semantics |
操作セマンティクス(os)パラメータは、次のいずれかのオプションです。失敗した追加操作はすべて、
|
エラー処理
sys.bdsqs_dbusers_errors$ログ表で確認できます。このPL/SQLプロシージャでは、次の2つのタイプのエラーが発生する場合があります。
users_listを処理できない解析エラー。たとえば、リストに一致しない二重引用符が含まれている場合です。解析エラーが発生すると、コール全体が失敗します。- 処理エラーがコールの実行時に発生します。処理エラーのエラー動作は、
op_semanticsパラメータを使用して構成できます。
7.5.4 DROP_KERBEROS_PRINCIPALS
このプロシージャは、問合せサーバー・ユーザーを削除します。問合せサーバー・ユーザーは、HadoopクラスタにアクセスできるKerberosプリンシパルの同じセットから選択されます。プロシージャのエラーは、bdsqs_kerberos_errors$に記録されます。
構文
DBMS_BDSQS_ADMIN.DROP_KERBEROS_PRINCIPALS(
principals_list varchar2,
op_semantics varchar2 DEFAULT 'STOP_ON_FIRST_ERROR'
)
DROP_KERBEROS_PRINCIPALSのパラメータ
| パラメータ | 説明 |
|---|---|
| principals_list | 削除する問合せサーバー・ユーザーの名前。これらのKerberosプリンシパルは、問合せサーバーにアクセスできなくなります。Kerberosプリンシパルを複数指定するには、プリンシパルの文字列を一重引用符で囲んだカンマ区切りリストを指定します。 |
| op_semantics |
操作セマンティクス(os)パラメータは、次のいずれかのオプションです。失敗した削除操作はすべて、sys.bdsqs_kerberos_errors$ログ表で確認できます。
|
使用上のノート
使用上のノートの詳細は、ADD_KERBEROS_PRINCIPALSを参照してください。
7.6 DBMS_HADOOP PL/SQLパッケージ
DBMS_HADOOPパッケージには、Hive表のCREATE EXTERNAL TABLE DDLを生成するための関数が含まれています。
7.6.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 );
パラメータ
表7-11 CREATE_EXTDDL_FOR_HIVE関数のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
HiveメタストアがあるHadoopクラスタ |
|
|
Hiveデータベースの名前 |
|
|
Hive表の名前 |
|
|
表がパーティション化されている( |
|
|
作成されるOracle外部表の名前。すでに存在する名前にはできません。 |
|
|
生成された コマンドを確認または変更する場合は、コマンドを自動的に実行しないでください。 |
|
|
生成された |
使用上のノート
Oracle DatabaseシステムはOracle Big Data SQL用に構成する必要があります。「データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて」を参照してください。
データ型変換は、Hiveデータ型とOracleデータ型の間のデフォルトのマッピングに基づいています。Hiveデータ型からOracleデータ型への変換を参照してください。
7.6.1.1 例
次の問合せは、デフォルトのHiveデータベースからmy_hive_tableのCREATE 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










