3 データ・アクセスのためのOracle Big Data SQLの使用
Oracle Big Data SQLでは、Oracle SQL SELECT文の強力なパワーを利用して多様なデータ・ソースを問い合せることができます。
Hive、Hadoop、Apache Kafka、Oracle NoSQL Databaseおよびオブジェクト・ストアからのデータを介してOracle Big Data SQL対応の外部表を作成できます。
トピック
3.1 外部表の作成について
Oracle Big Data SQLでは、Oracle SQL SELECT文の強力なパワーを利用して、Oracle DatabaseからOracle Big Data SQL対応の外部表を介して外部データを問い合せることができます。また、Oracle表と外部データを結合する問合せの書込み、堅牢なOracle Databaseセキュリティ機能の活用、および分析関数、JSON処理といった高度なSQL機能の利用もできます。
CREATE TABLE文には、外部表の作成に特化した句があります。この句に指定する情報により、アクセス・ドライバは外部ソースからデータを読み取り、そのデータを外部表用に準備できます。
ノート:
独自のメタデータ(Parquetファイルなど)を持つデータ・ソース・ファイルの列名が一致しないOracle外部表を作成すると、問合せではそれらの列に対してNULLが返されます。たとえば、Parquetファイルに列(colA、colB、colC)があり、2つ目のParquetファイルに列(colA、colB、colD)があり、列(colA、colB、colC、colXX)があるOracle外部表を作成する場合、colXX列はOracle問合せに対して常にNULLを返します。述語としてcolXXを使用する問合せ(colXX = 'YES'の場合など)は、(colXXがNULLの場合の述語を指定しないかぎり) 0行を返します。3.1.1 基本的なCreate Table構文
次に外部表のCREATE TABLE文の基本的な構文を示します。
CREATE TABLE table_name (column_name datatype, column_name datatype[,...]) ORGANIZATION EXTERNAL (external_table_clause);
他の表と同様に、列名およびデータ型を指定します。ORGANIZATION EXTERNALは、表を外部表として識別します。
external_table_clauseはアクセス・ドライバを識別し、データのロードに必要な情報を提供します。「外部表の句について」を参照してください。
3.1.2 外部表の句について
CREATE TABLE ORGANIZATION EXTERNAL文は、引数として外部表の句を取ります。外部表句には次の副次句があります。
TYPE
TYPE句はアクセス・ドライバを識別します。アクセス・ドライバのタイプによって、外部表定義の他の部分がどのように解釈されるかが決まります。
Oracle Big Data SQLに次の値のいずれかを指定します。
-
ORACLE_HDFS: HDFSディレクトリ内のファイルにアクセスします。 -
ORACLE_HIVE: Hive表にアクセスします。 -
ORACLE_BIGDATA: オブジェクト・ストアのファイルにアクセスします。
ノート:
ORACLE_DATAPUMPおよびORACLE_LOADERアクセス・ドライバは、Oracle Big Data SQLには関連付けられません。
DEFAULT DIRECTORY
DEFAULT DIRECTORY句はOracle Databaseディレクトリ・オブジェクトを識別します。ディレクトリ・オブジェクトは、外部表が読取りおよび書込みを行うファイルを含むオペレーティング・システム・ディレクトリを識別します。
ORACLE_HDFS、ORACLE_BIGDATAおよびORACLE_HIVEは、デフォルト・ディレクトリのみを使用して、Oracle Databaseシステムにログ・ファイルを書き込みます。
LOCATION
LOCATION句はデータ・ソースを識別します。
REJECT LIMIT
REJECT LIMITは、Oracle Databaseが問合せを停止し、エラーを返すまで、外部表の問合せ中に許可される変換エラーの数を制限します。
行が拒否される処理エラーは、制限に対してカウントされます。拒否制限は、各並列問合せ(PQ)プロセスに個別に適用されます。すべてのPQプロセスについて、拒否されたすべての行の合計ではありません。
ACCESS PARAMETERS
ACCESS PARAMETERS句は、アクセス・ドライバがデータを外部表に正しくロードするために必要な情報を提供します
3.2 Hiveデータの外部表の作成
Oracle Big Data SQL外部表を作成する際に、Hiveメタデータを利用できます。
外部表の作成は、HDFSのデータだけでなく、Oracle NoSQL Database、Apache Kafka、HBase、オブジェクト・ストアなど他のストレージ・タイプのデータにもアクセスできる手法です。
Oracle Big Data SQLでHive表の問合せを有効にするには、まず、HiveデータのOracle外部表を定義する必要があります。Oracle外部表を作成するのに役立つ多数のツールがあります。これらのツールでは、基礎となるHiveメタデータを利用するため、表の作成が容易になります。
Oracle Big Data SQLで、CDH 6.1 (およびそれ以上)、HDP、CDPおよびHiveトランザクション表によるイレイジャ・コーディング(EC)がサポートされるようになりました。
外部表は、抽象化のレベルを実現します。基礎となるパーティションやファイル・タイプは変更される可能性がありますが、Oracle外部表の定義は同じままです。表を問い合せると、これらの変更が自動的に取得されます。
外部表の定義の一部として、表の列とそのデータ型、およびHiveのソース表へのポインタを指定します。データの場所、ファイル・タイプ、パーティション化情報など、残りのメタデータは問合せの実行時に導出されます。
-
DBMS_HADOOP
DBMS_HADOOPは、
CREATE_EXTDDL_FOR_HIVEプロシージャを含んだPL/SQLパッケージです。このプロシージャは、特定のHive表のOracle外部表を作成するDDLを生成します。必要に応じて生成したDDLのテキストを実行前に編集して、外部表のプロパティをカスタマイズできます。このプロシージャを使用すると、一度に多くの表の定義を簡単に自動化できます。 -
Oracle SQL DeveloperのBig Data SQLウィザード
最新バージョンの無償のOracle SQL DeveloperツールにはBig Data SQLウィザードが含まれています。このプロセスに従って簡単にOracle外部表定義を作成できます。
Oracle SQL Developerに構成済のHive接続がある場合は、Connectionsナビゲータで、接続エントリ・ポイントからHive表にドリル・ダウンし、次を実行します。
-
表アイコンを右クリックし、「Use in Oracle Big Data SQL...」を選択します
-
要求されたら、Hive表のインポート用のOracle Database接続を選択します。
-
Oracle Big Data SQLが有効になっているターゲット・データベースを選択します。
-
「Create Table」ダイアログで、列、外部表、プロパティ、およびストレージの現在の構成を確認します。必要に応じて変更します。また、生成されるDDLのテキストをプレビューすることもできます。
-
表の定義の確認を終えたら、「OK」をクリックします。ウィザードによって、指定した場所に外部表が作成されます。
-
-
Oracle SQL Developer Data Modeler
これは無償のグラフィカルな設計ツールで、これを使用してHiveメタストアに接続し、外部表を生成できます。1つまたは複数のHive表を選択してインポートし、表のプロパティを必要に応じて変更してから、SQLワークシート内にコピーできるDDLを生成し、Oracle外部表を作成するために実行します。Data Modelerは他のオプションよりも複雑なツールですが、これを使用すると複数のHive表で作業できるという利点があります
Data Modelerの使用方法の詳細は、Oracle Blogスペースの「Oracle Big Data SQLのOracle SQL DeveloperおよびData Modelerのサポート」を参照してください。
関連項目:
Oracle SQL Developerのインストール方法および外部表作成のためのHiveへの接続方法は、Oracle SQL Developerを使用したHiveへの接続を参照してください3.2.1 Hive表に関する情報の取得
DBMS_HADOOP PL/SQLパッケージには、CREATE_EXTDDL_FOR_HIVEという名前の関数が含まれています。データ・ディクショナリ言語(DDL)を返して、Hive表にアクセスするための外部表を作成します。この関数では、Hive表に関する基本情報を指定する必要があります。
-
Hadoopクラスタの名前
-
Hiveデータベースの名前
-
Hive表の名前
-
Hive表がパーティション化されているかどうか
ALL_HIVE_TABLESデータ・ディクショナリ・ビューを問い合せることで、この情報を取得できます。Oracle DatabaseからアクセスできるすべてのHive表に関する情報が表示されます。
この例では、現在のユーザーにデフォルト・データベース内のRATINGS_HIVE_TABLEという名前のパーティション化されていないHive表へのアクセス権があることを示します。JDOEという名前のユーザーは所有者です。
SQL> SELECT cluster_id, database_name, owner, table_name, partitioned FROM all_hive_tables; CLUSTER_ID DATABASE_NAME OWNER TABLE_NAME PARTITIONED ------------ -------------- -------- ------------------ -------------- hadoop1 default jdoe ratings_hive_table UN-PARTITIONED
関連項目:
3.2.2 CREATE_EXTDDL_FOR_HIVE関数の使用
データ・ディクショナリからの情報とともに、DBMS_HADOOPのCREATE_EXTDDL_FOR_HIVE関数を使用できます。この例では、現在のスキーマ内のRATINGS_DB_TABLEのデータベース表名を指定します。関数は、DDLoutという名前のローカル変数でCREATE TABLEコマンドのテキストを返しますが、実行はしません。
DECLARE
DDLout VARCHAR2(4000);
BEGIN
dbms_hadoop.create_extddl_for_hive(
CLUSTER_ID=>'hadoop1',
DB_NAME=>'default',
HIVE_TABLE_NAME=>'ratings_hive_table',
HIVE_PARTITION=>FALSE,
TABLE_NAME=>'ratings_db_table',
PERFORM_DDL=>FALSE,
TEXT_OF_DDL=>DDLout
);
dbms_output.put_line(DDLout);
END;
/このプロシージャを実行すると、PUT_LINE関数はCREATE TABLEコマンドを表示します。
CREATE TABLE ratings_db_table (
c0 VARCHAR2(4000),
c1 VARCHAR2(4000),
c2 VARCHAR2(4000),
c3 VARCHAR2(4000),
c4 VARCHAR2(4000),
c5 VARCHAR2(4000),
c6 VARCHAR2(4000),
c7 VARCHAR2(4000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(
com.oracle.bigdata.cluster=hadoop1
com.oracle.bigdata.tablename=default.ratings_hive_table
)
) PARALLEL 2 REJECT LIMIT UNLIMITEDこの情報をSQLスクリプトで取得し、アクセス・パラメータを使用して、実行前に必要に応じてOracle表名、列名およびデータ型を変更できます。アクセス・パラメータを使用して日付書式マスクを指定することもできます。
ALL_HIVE_COLUMNSビューには、デフォルトの列名およびデータ型の導出方法が表示されます。この例では、Hive列の名前がC0からC7であり、Hive STRINGデータ型がVARCHAR2(4000)にマップされることを示します。
SQL> SELECT table_name, column_name, hive_column_type, oracle_column_type FROM all_hive_columns; TABLE_NAME COLUMN_NAME HIVE_COLUMN_TYPE ORACLE_COLUMN_TYPE --------------------- ------------ ---------------- ------------------ ratings_hive_table c0 string VARCHAR2(4000) ratings_hive_table c1 string VARCHAR2(4000) ratings_hive_table c2 string VARCHAR2(4000) ratings_hive_table c3 string VARCHAR2(4000) ratings_hive_table c4 string VARCHAR2(4000) ratings_hive_table c5 string VARCHAR2(4000) ratings_hive_table c6 string VARCHAR2(4000) ratings_hive_table c7 string VARCHAR2(4000) 8 rows selected.
3.2.3 Oracle SQL Developerを使用したHiveへの接続
Oracle SQL Developerでは、Hiveメタストアに接続し、Hiveに対するOracle外部表を作成できます。
次のステップに従って、Oracle Big Data SQLと連携するようにOracle SQL Developerを設定します。
-
Oracle SQL Developerをインストールします
-
Hive JDBCドライバをダウンロードします
-
新しいHive JDBCドライバをOracle SQL Developerに追加します
-
Hiveへのデータベース接続を作成します。
Oracle SQL Developerのインストール
Oracle SQL Developer 4.2以上をインストールします。このバージョン以降、HDFSへのOracle Database表のオフロードに便利なOracle Big Data SQLツールである「Copy To Hadoop」のサポートが含まれています。
インストールは簡単です。パッケージをダウンロードして抽出するのみです。
-
Oracle Technology Network (OTN)のOracle SQL Developerダウンロード・サイトに移動します。
-
ライセンス契約を受け入れ、プラットフォームにとって適切なバージョンをダウンロードします。
たいていのユーザーの場合、「Windows 64–bit with JDK 8 included」が正しい選択です。
-
ダウンロードしたZIPファイルをローカル・ドライブに抽出します。
抽出先のフォルダ名は任意です。
インストールと構成の詳細は、『Oracle SQL Developerユーザーズ・ガイド』のSQL Developerのインストールおよび開始に関する項を参照してください。
Cloudera Enterprise用のHive JDBCドライバのダウンロードおよびインストール
Oracle SQL DeveloperをHadoop環境のHiveに接続するには、Cloudera Enterprise用のHive JDBCドライバをダウンロードしてインストールする必要があります。これらのドライバは、Oracle SQL Developerのダウンロード・パッケージには付属していません。
HDPユーザーに対するノート:
現時点で、SQL Developer 4.2には、Hive用のCloudera JDBCドライバが必要です。ただし、これらのドライバは、Hortonworksクラスタに対しても動作するように見えます。HDPユーザーは、これらのドライバがその要件に適合するかどうかを判別するためにテストを行う必要があります。-
最新のHive用Cloudera JDBCドライバをCloudera Webサイトから任意のローカル・ディレクトリにダウンロードします。
Cloudera Webサイトで「
cloudera hive jdbc drivers download」を検索し、使用可能なドライバ・パッケージの場所を特定します。ドライバ・バージョン、OSおよびOSバージョン(32/64ビット)を選択するよう求められます。現時点で最新のドライバ・バージョンは2.5.18です。使用可能な最新バージョンを選択できます。
-
アーカイブを解凍します。
unzip hive_jdbc_<version>.zip -
抽出したコンテンツを表示します。最上位フォルダの中には、複数のZIPファイルがあります。それぞれが異なるJDBCバージョン用です。この設定では、JBDC 4.0のみ使用可能です。JDBC4_ ZIPファイル(
JDBC4_<version>.zip)を選択します。重要:
JDBC 4.0用のドライバを含むJDBC4_ ZIPファイルのみを選択してください。これが互換性のある唯一のバージョンです。JDBC41_*などの他のパッケージのドライバは、SQL Developer 4.2と互換性がなく、接続を試みるとエラーが返されます。 -
Oracle SQL Developerからアクセスできるターゲット・ディレクトリ(
./home/oracle/jdbcなど)にJDBC4アーカイブを解凍します。# unzip Cloudera_HiveJDBC4_<version>.zip -d /home/oracle/jdbc/抽出されたコンテンツは次のようになります。
Cloudera_HiveJDBC4_2.5.18.1050\Cloudera-JDBC-Driver-for-Apache-Hive-Install-Guide.pdf Cloudera_HiveJDBC4_2.5.18.1050\Cloudera-JDBC-Driver-for-Apache-Hive-Release-Notes.pdf Cloudera_HiveJDBC4_2.5.18.1050\commons-codec-1.3.jar Cloudera_HiveJDBC4_2.5.18.1050\commons-logging-1.1.1.jar Cloudera_HiveJDBC4_2.5.18.1050\HiveJDBC4.jar Cloudera_HiveJDBC4_2.5.18.1050\hive_metastore.jar Cloudera_HiveJDBC4_2.5.18.1050\hive_service.jar Cloudera_HiveJDBC4_2.5.18.1050\httpclient-4.1.3.jar Cloudera_HiveJDBC4_2.5.18.1050\httpcore-4.1.3.jar Cloudera_HiveJDBC4_2.5.18.1050\libfb303-0.9.0.jar Cloudera_HiveJDBC4_2.5.18.1050\libthrift-0.9.0.jar Cloudera_HiveJDBC4_2.5.18.1050\log4j-1.2.14.jar Cloudera_HiveJDBC4_2.5.18.1050\out.txt Cloudera_HiveJDBC4_2.5.18.1050\ql.jar Cloudera_HiveJDBC4_2.5.18.1050\slf4j-api-1.5.11.jar Cloudera_HiveJDBC4_2.5.18.1050\slf4j-log4j12-1.5.11.jar Cloudera_HiveJDBC4_2.5.18.1050\TCLIServiceClient.jar Cloudera_HiveJDBC4_2.5.18.1050\zookeeper-3.4.6.jar
新しいHive JDBCドライバをOracle SQL Developerに追加します
次に、SQL Developerを起動して、抽出したすべてのドライバ・ファイルを「Preferences」ウィンドウの「Third Party JDBC Drivers」にコピーします。
- SQL Developerを起動します。
-
SQL Developerのメニュー・バーで、「Tools」→「Preferences」を選択します。
-
「Preferences」ウィンドウのファイル・エクスプローラで、「Database」を展開し、「Third Party JDBC Drivers」をクリックします。
-
「「Add Entry」をクリックします。
-
Cloudera_HiveJDBC4_<version>.zipから抽出したファイルを配置したフォルダに移動します。ZIPから抽出されたすべてのJARファイルをこのウィンドウにコピーして、「OK」をクリックします。 -
Oracle SQL Developerを再起動します。
Hiveへのデータベース接続の作成
ドライバがインストールされた後、Hiveserver2への接続を作成できます。
Kerberos保護のある接続を作成する場合、ユーザーID、Kerberos接続パラメータ、およびHadoopシステム上でHiveserver2が実行しているポートの番号(通常はポート10000)が必要になります。ユーザーのキータブが存在する必要があります。
Kerberosを使用していない場合は、ユーザーID (oracleユーザーまたは同等の権限があるユーザー)、アカウントのパスワード、およびHiveserver2ポート番号が必要になります。
「New/Select Database Connection」ダイアログの「Oracle」および「Hive」タブの各フィールドに関する説明は、『Oracle SQL Developerユーザーズ・ガイド』のデータベース接続の作成、編集、選択に関する項を参照してください。
3.2.4 ORACLE_HIVEのCREATE TABLE文の作成
いずれの方法を使用してHiveに対するOracle外部表を作成する場合でも(DBMS_HADOOP、Oracle SQL Developer Data Modeler、Oracle SQL DeveloperのOracle Big Dataウィザード、または手動によるコーディング)、ORACLE_HIVEのデフォルトの動作を変更するにはいくつかのアクセス・パラメータを設定する必要があることがあります。
ノート:
LOCATION句をORACLE_HIVEとともに含めないでください。エラーが発生します。データはHiveに格納され、アクセス・パラメータおよびメタデータ・ストアは必要な情報を提供します。
3.2.4.1 ORACLE_HIVEのデフォルト設定の使用
次の文は、HiveデータにアクセスするためにORDERという名前の外部表を作成します。
CREATE TABLE order (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
description VARCHAR2(100),
order_total NUMBER (8,2))
ORGANIZATION EXTERNAL (TYPE oracle_hive);この文ではアクセス・パラメータが設定されていないため、ORACLE_HIVEアクセス・ドライバはデフォルト設定を使用して次の処理を実行します。
-
デフォルトのHadoopクラスタに接続します。
-
orderという名前のHive表を使用します。Hive表にCUST_NUM、ORDER_NUM、DESCRIPTIONおよびORDER_TOTALという名前のフィールドがない場合、エラーが発生します。 -
CUST_NUM値が10バイトを超えるなど、変換エラーが発生した場合は、フィールドの値をNULLに設定します。
3.2.4.2 ORACLE_HIVEのデフォルト設定の上書き
外部表の句のACCESS PARAMETERS句でプロパティを設定できます。これにより、アクセス・ドライバのデフォルトの動作が上書きされます。次の句には、com.oracle.bigdata.overflowアクセス・パラメータが含まれています。前述の例でこの句を使用する場合、エラーをスローするのではなく、100文字を超えるDESCRIPTION列のデータが切り捨てられます。
(TYPE oracle_hive
ACCESS PARAMETERS (
com.oracle.bigdata.overflow={"action:"truncate", "col":"DESCRIPTION""} ))次の例では、ORACLE_HIVEの使用可能なパラメータの大部分を設定します。
CREATE TABLE order (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_date DATE,
item_cnt NUMBER,
description VARCHAR2(100),
order_total (NUMBER(8,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":"TRUNCATE", \
"col":"DESCRIPTION"}
com.oracle.bigdata.erroropt: [{"action":"replace", \
"value":"INVALID_NUM" , \
"col":["CUST_NUM","ORDER_NUM"]} ,\
{"action":"reject", \
"col":"ORDER_TOTAL}
))これらのパラメータは、ORACLE_HIVEアクセス・ドライバがデータを特定してエラー条件を処理する方法で、次の変更を行います。
-
com.oracle.bigdata.tablename: 表名の違いを処理します。ORACLE_HIVEは、ORDER.DBデータベース内のORDER_SUMMARYという名前のHive表を調べます。 -
com.oracle.bigdata.colmap: 列名の違いを処理します。HiveのORDER_LINE_ITEM_COUNTフィールドはOracleのITEM_CNT列にマップされます。 -
com.oracle.bigdata.overflow: 文字列データを切り捨てます。DESCRIPTION列の100文字を超える値は切り捨てられます。 -
com.oracle.bigdata.erroropt: 不正なデータを置換します。CUST_NUMまたはORDER_NUMのデータのエラーにより、値がINVALID_NUMに設定されます。
関連項目:
CREATE TABLE ACCESS PARAMETERS句の項では、ORACLE_HIVE、ORACLE_HDFSおよびORACLE_BIGDATAのアクセス・パラメータの完全なリストを示します。
3.2.5 Hiveデータ型からOracleデータ型への変換
アクセス・ドライバは、データを外部表にロードする際に、Hiveデータをターゲット列のデータ型に変換できることを確認します。互換性がない場合、アクセス・ドライバはエラーを返します。それ以外の場合は、適切なデータ変換を行います。
通常、Hiveは他の場所(HDFSファイル内など)に格納されているデータに表抽象化レイヤーを提供します。Hiveはシリアライザ/デシリアライザ(SerDe)を使用して、必要に応じてデータを格納されている形式からHiveデータ型に変換します。その後、アクセス・ドライバはHiveデータ型からOracleデータ型にデータを変換します。たとえば、テキスト・ファイルに対するHive表にBIGINT列がある場合、SerDeはデータをテキストからBIGINTに変換します。その後、アクセス・ドライバはデータをBIGINT (Hiveデータ型)からNUMBER (Oracleデータ型)に変換します。
2つではなく1つのデータ型変換を実行する場合、パフォーマンスが向上します。したがって、HDFSファイル内のフィールドのデータ型は、ディスク上に実際に格納されているデータを示す必要があります。たとえば、JSONはクリア・テキスト形式であるため、JSONファイル内のデータはすべてテキストです。フィールドのHiveタイプがDATEの場合、SerDeはデータを文字列(データ・ファイル内)からHive日付に変換します。その後、アクセス・ドライバはデータをHive日付からOracle日付に変換します。ただし、フィールドのHiveタイプが文字列の場合、SerDeは変換を実行せず、アクセス・ドライバはデータを文字列からOracle日付に変換します。2番目の例では、外部表に対する問合せはより速くなります。これは、アクセス・ドライバがデータ変換のみを実行するためです。
次の表に、データを外部表にロードするときにORACLE_HIVEが実行できるデータ型変換を示します。
表3-1 サポートされているHiveデータ型からOracleデータ型への変換
| Hiveデータ型 | VARCHAR2、CHAR、NCHAR2、NCHAR、CLOB | NUMBER、FLOAT、BINARY_NUMBER、BINARY_FLOAT | BLOB | RAW | DATE、TIMESTAMP、TIMESTAMP WITH TZ、TIMESTAMP WITH LOCAL TZ | INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND |
|---|---|---|---|---|---|---|
|
INT SMALLINT TINYINT BIGINT |
はい |
はい |
はい |
はい |
いいえ |
いいえ |
|
DOUBLE FLOAT |
はい |
はい |
はい |
はい |
いいえ |
いいえ |
|
DECIMAL |
はい |
はい |
いいえ |
いいえ |
いいえ |
いいえ |
|
BOOLEAN |
はい脚注1 |
はい脚注2 |
はい脚注2 |
はい |
いいえ |
いいえ |
|
BINARY |
はい |
いいえ |
はい |
はい |
いいえ |
いいえ |
|
STRING |
はい |
はい |
いいえ |
いいえ |
はい |
はい |
|
TIMESTAMP |
はい |
いいえ |
いいえ |
いいえ |
はい |
いいえ |
|
STRUCT ARRAY UNIONTYPE MAP |
はい |
いいえ |
いいえ |
いいえ |
いいえ |
いいえ |
脚注1
FALSEは文字列FALSEにマップされ、TRUEは文字列TRUEにマップされます。
脚注2
FALSEは0にマップされ、TRUEは1にマップされます。
3.3 Oracle NoSQL Databaseの外部表の作成
ORACLE_HIVEアクセス・ドライバを使用して、Oracle NoSQL Databaseに格納されているデータにアクセスできます。ただし、KVStoreにアクセスするHive外部表を最初に作成する必要があります。次に、Hiveデータの外部表の作成に示されているプロセスのように、それに対してOracle Databaseの外部表を作成できます。
ノート:
Oracle Big Data SQL 4.1.1は、デフォルトで、CDH 6をサポートするOracle NoSQL Database 20.2用に構成されています。Oracle Big Data SQL 4.1.1をCDH5クラスタにインストールし、Oracle NoSQL Database統合を必要とするお客様は、Oracle NoSQL Database 18.xを構成する必要があります。Oracle NoSQL Databaseのドキュメントを参照してください。トピック
関連項目:
- HiveからOracle Databaseへのデータ型マッピングの詳細は、Hiveデータ型からOracleデータ型への変換を参照してください。
- Oracle Big Data SQLでの述語のプッシュダウンでは、Hiveデータ型とOracleデータ型の間に特定のマッピングが存在する必要があります。「述語のプッシュダウンについて」を参照してください
- Oracle Big Data SQLとOracle NoSQL Databaseの統合の詳細は、Oracle NoSQL Database統合ガイドの第III部 Oracle Big Data SQLとの統合を参照してください。
3.3.1 Oracle NoSQL DatabaseのHive外部表の作成
Oracle NoSQL Databaseのデータにアクセス可能にするには、Oracle NoSQL表に対してHive外部表を作成します。Oracle Big Data SQLは、HiveによるOracle NoSQL Database表形式の読取りが可能なoracle.kv.hadoop.hive.table.TableStorageHandlerという名前のStorageHandlerを提供します。
Oracle NoSQL表に対するHive外部表のHive CREATE TABLE文の基本的な構文は次のとおりです。
CREATE EXTERNAL TABLE tablename colname coltype[, colname coltype,...] STORED BY 'oracle.kv.hadoop.hive.table.TableStorageHandler' TBLPROPERTIES ( "oracle.kv.kvstore" = "database", "oracle.kv.hosts" = "nosql_node1:port[, nosql_node2:port...]", "oracle.kv.hadoop.hosts" = "hadoop_node1[,hadoop_node2...]", "oracle.kv.tableName" = "table_name");
Hive CREATE TABLEパラメータ
- tablename
-
作成されるHive外部表の名前。
この表名はOracle Databaseで発行されるSQL問合せで使用されるため、ユーザーに適した名前を選択してください。Oracle Databaseで作成する外部表の名前は、このHive表の名前と同じである必要があります。
表、列およびフィールド名は、Oracle NoSQL Database、Apache HiveおよびOracle Databaseで大文字と小文字を区別しません。
- colname coltype
-
Hive外部表の列の名前およびデータ型。Oracle NoSQL DatabaseとHive間のデータ型マッピングについては、Oracle NoSQLからOracle Databaseへの型マッピングについてを参照してください。
Hive CREATE TABLE TBLPROPERTIES句
- oracle.kv.kvstore
-
KVStoreの名前。大文字、小文字および数字のみが名前で有効です。
- oracle.kv.hosts
-
Oracle NoSQL Databaseクラスタのホスト名およびポート番号のカンマ区切りリスト。各文字列では形式hostname:portを使用します。ホストで障害が発生した場合の冗長性を提供するには、複数の名前を入力します。
- oracle.kv.hadoop.hosts
-
Oracle Big Data SQLが有効であるHadoopクラスタのすべてのホスト名のカンマ区切りリスト。
- oracle.kv.tableName
-
このHive外部表のデータを格納するOracle NoSQL Databaseの表の名前。
関連項目:
- Oracle NoSQL Database統合ガイドのApache Hiveとの統合
- Apache Hive Language Manual DDL
3.3.2 Oracle NoSQLデータのOracle Database表の作成
次の構文を使用して、Hive外部表を介してOracle NoSQLデータにアクセスできるOracle Databaseの外部表を作成します。
CREATE TABLE tablename(colname colType[,colname colType...]) ORGANIZATION EXTERNAL (TYPE ORACLE_HIVE DEFAULT DIRECTORY directory ACCESS PARAMETERS (access parameters) ) REJECT LIMIT UNLIMITED;
この構文では、列名およびデータ型を識別します。この構文の詳細は、外部表の作成についてを参照してください。
3.3.3 Oracle NoSQLからOracle Databaseへの型マッピングについて
Oracle Big Data SQLがOracle NoSQL Databaseからデータを取得する場合、データが次の別のデータ型に2回変換されます。
-
最初に、データがHive外部表の列に読み込まれるときのHiveデータ型。
-
次に、データがOracle Database外部表の列に読み込まれるときのOracleデータ型。
Oracle NoSQL Database表に格納されたデータに対してBig Data SQL問合せを実行するには、最初に、目的のOracle NoSQL Database表のスキーマからマップされたスキーマを使用してHive外部表を作成する必要があります。Oracle NoSQL Databaseでサポートされるデータ型およびHiveへのマッピングについては、Oracle NoSQL Database統合ガイドのRDBMSデータ・モデルのマッピングを参照してください。
ノート:
このマッピングを完成するには、対応するOracle Database外部表を、Hive表のスキーマとマップされているスキーマで作成する必要があります。
一部のHiveデータ型は、Oracle NoSQLデータ型からOracle Databaseデータ型へのマッピングには適用できないことにも注意してください。Oracle NoSQL Database統合ガイドのRDBMSデータ・モデルのマッピングを参照してください。
関連項目:
- HiveからOracle Databaseへのデータ型マッピングの詳細は、Hiveデータ型からOracleデータ型への変換を参照してください。
- Oracle Big Data SQLでの述語のプッシュダウンでは、Hiveデータ型とOracleデータ型の間に特定のマッピングが存在する必要があります。「述語のプッシュダウンについて」を参照してください
3.3.4 Oracle NoSQL Databaseのデータのアクセス例
Oracle NoSQL DatabaseとOracle Big Data SQLの相互作用の詳細、および詳細なプログラムとユーティリティ・クラスの例は、Oracle NoSQL Database統合ガイドの第III部 Oracle Big Data SQLとの統合を参照してください。
3.4 Apache HBaseのOracle外部表の作成
ORACLE_HIVEアクセス・ドライバを使用して、Apache HBaseに格納されているデータにアクセスすることもできます。ただし、最初にHBase表にアクセスするHive外部表を作成する必要があります。次に、それに対してOracle Databaseの外部表を作成できます。基本的なステップは、Oracle NoSQL Databaseの外部表の作成で説明されているものと同じです。
3.4.1 HBaseのHive外部表の作成
HBase表のデータにアクセス可能にするには、それに対してHive外部表を作成します。Apacheは、ストレージ・ハンドラおよびHiveによるHBase表形式の読取りが可能なSerDeを提供します。
HBase表に対する外部表のHive CREATE TABLE文の基本的な構文は、次のとおりです。
CREATE EXTERNAL TABLE tablename colname coltype[, colname coltype,...] ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( 'serialization.format'='1', 'hbase.columns.mapping'=':key,value:key,value:
関連項目:
-
次のApache Hive LanguageManual DDL
-
次のHive HBaseIntegration
https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration#HBaseIntegration-StorageHandlers -
https://hive.apache.org/javadoc.htmlにあるApache Hive JavadocsのクラスHBaseSerDe
3.4.2 HBaseのOracle Database表の作成
次の構文を使用して、Hive外部表を介してHBaseデータにアクセスできるOracle Databaseの外部表を作成します。
CREATE TABLE tablename(colname colType[,colname colType...]) ORGANIZATION EXTERNAL (TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR ACCESS PARAMETERS (access parameters) ) REJECT LIMIT UNLIMITED;
この構文では、列名およびデータ型を識別します。アクセス・パラメータを指定するには、外部表の作成についてを参照してください。
3.5 HDFSファイルのOracle外部表の作成
ORACLE_HDFSアクセス・ドライバを使用すると、HDFSに格納されている様々なタイプのデータにアクセスできますが、HDFSにはHiveメタデータはありません。テキスト・データのレコード形式を定義することも、特定のデータ形式のSerDeを指定することもできます。
HDFSファイルの外部表を手動で作成し、データを特定するためにアクセス・ドライバが必要とするすべての情報を提供して、レコードおよびフィールドを解析する必要があります。CREATE TABLE ORGANIZATION EXTERNAL文のいくつかの例を次に示します。
Oracle Big Data SQLは、CDH 6.1 (以降)およびHDPによるイレイジャ・コーディング(EC)をサポートするようになりました。
3.5.1 デフォルトのアクセス・パラメータとORACLE_HDFSの使用
次の文は、ORDERという名前の文を作成して、HDFSの/usr/cust/summaryディレクトリに格納されているすべてのファイル内のデータにアクセスします。
CREATE TABLE ORDER (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_total NUMBER (8,2))
ORGANIZATION EXTERNAL
( TYPE oracle_hdfs
DEFAULT DIRECTORY DEFAULT_DIR
)
LOCATION ('hdfs:/usr/cust/summary/*');この文ではアクセス・パラメータが設定されていないため、ORACLE_HDFSアクセス・ドライバはデフォルト設定を使用して次の処理を実行します。
-
デフォルトのHadoopクラスタに接続します。
-
ファイルをデリミタ付きテキスト、フィールドを
STRINGタイプとして読み取ります。 -
HDFSファイル内のフィールドの数は、列の数と一致すると仮定します(この例では3)。
-
CUST_NUMデータが第1フィールド、ORDER_NUMデータが第2フィールド、ORDER_TOTALデータが第3フィールドになるように、フィールドは列と同じ順序であることを前提とします。 -
値によってデータ変換エラーが発生するレコードを拒否します。
CUST_NUMの値が10文字を超える場合、ORDER_NUMの値が20文字を超える場合、またはORDER_TOTALの値がNUMBERに変換できない場合です。
関連項目:
CREATE TABLE ACCESS PARAMETERS句の項では、ORACLE_HIVE、ORACLE_HDFSおよびORACLE_BIGDATAのアクセス・パラメータの完全なリストを示します。
3.5.2 ORACLE_HDFS LOCATION句
ORACLE_HDFSのLOCATION句には、ファイルの場所のコンマ区切りのリストが含まれます。ファイルは、デフォルト・クラスタ上のHDFSファイル・システムに存在する必要があります。
場所は次のいずれかになります。
-
完全修飾HDFSディレクトリ名(
/user/hive/warehouse/hive_seed/hive_typesなど)。ORACLE_HDFSはディレクトリ内のすべてのファイルを使用します。 -
完全修飾HDFSファイル名(
/user/hive/warehouse/hive_seed/hive_types/hive_types.csvなど)。 -
HDFSファイルまたはファイルのセットのURL (
hdfs:/user/hive/warehouse/hive_seed/hive_types/*など)。ディレクトリ名のみの使用は無効です。
ファイル名には、表3-2に説明されているパターン一致文字を含めることができます。
表3-2 パターン一致文字
| 文字 | 説明 |
|---|---|
|
? |
任意の1文字に一致します。 |
|
* |
0文字以上の文字に一致します。 |
|
[abc] |
セット{a, b, c}内の1文字に一致します。 |
|
[a-b] |
範囲{a...b}内の1文字に一致します。文字は、b以下である必要があります。 |
|
[^a] |
文字セットまたは範囲{a}外の1文字に一致します。カレット(^)は、左カッコの直後に付ける必要があります(スペースなし)。 |
|
\c |
cの特別な意味を無効にします。バックスラッシュ(\)は、エスケープ文字です。 |
|
{ab\,cd} |
セット{ab, cd}内の文字列に一致します。エスケープ文字(\)は、パス区切りとしてのコンマの意味を無効にします。 |
|
{ab\,c{de\,fh} |
セット{ab, cde, cfh}内の文字列に一致します。エスケープ文字(\)は、パス区切りとしてのコンマの意味を無効にします。 |
3.5.3 ORACLE_HDFSのデフォルト設定の上書き
ORACLE_HDFSでも、ORACLE_HIVEと同じアクセス・パラメータの多くを使用できます。
3.5.3.1 デリミタ付きテキスト・ファイルへのアクセス
次の例は、ORACLE_HIVEのデフォルト設定の上書きに示した例に相当します。外部表は、HDFSに格納されているデリミタ付きテキスト・ファイルにアクセスします。
CREATE TABLE taxis
(
dispatching_base_num varchar2(100),
pickup_date varchar2(100),
location_id varchar2(100)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_HDFS
DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(
com.oracle.bigdata.fileformat=TEXTFILE
com.oracle.bigdata.rowformat=DELIMITED FIELDS TERMINATED BY ','
)
LOCATION ('/data/taxi-trips/')
)
REJECT LIMIT UNLIMITED;
このソースには列を説明するメタデータが含まれていないため、colmapフィールドがないことに注意してください。この場合に必要なアクセス・パラメータは、fileformatとrowformatのみです。
ヒント:
フィールドと値を区切るデリミタとして、コロン(:)ではなく等号(=)を使用することをお薦めします。これは、コロンをデリミタにすると、ツールによってはパラメータ値の入力が求められるためです。
3.5.3.2 Avroコンテナ・ファイルへのアクセス
次の例では、SerDeを使用してAvroコンテナ・ファイルにアクセスします。
CREATE TABLE order (cust_num VARCHAR2(10),
order_num VARCHAR2(20),
order_date DATE,
item_cnt NUMBER,
description VARCHAR2(100),
order_total NUMBER(8,2))
ORGANIZATION EXTERNAL
(
TYPE oracle_hdfs
DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS (
com.oracle.bigdata.rowformat: \
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
com.oracle.bigdata.fileformat: \
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'\
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
com.oracle.bigdata.colmap: { "col":"item_cnt", \
"field":"order_line_item_count"}
com.oracle.bigdata.overflow: {"action":"TRUNCATE", \
"col":"DESCRIPTION"}
)
LOCATION ('hdfs:/usr/cust/summary/*'));アクセス・パラメータは、次の情報をORACLE_HDFSアクセス・ドライバうに提供します。
-
com.oracle.bigdata.rowformat: アクセス・ドライバがレコードおよびフィールドを解析するために使用する必要があるSerDeを識別します。 -
com.oracle.bigdata.fileformat: レコードを抽出し、それらを目的の形式で出力できるJavaクラスを識別します。 -
com.oracle.bigdata.colmap: 列名の違いを処理します。ORACLE_HDFSは、外部表のITEM_CNT列を持つHDFSファイル内のORDER_LINE_ITEM_COUNTと一致します。 -
com.oracle.bigdata.overflow: 文字列データを切り捨てます。DESCRIPTION列の100文字を超える値は切り捨てられます。
3.5.3.3 JSONデータへのアクセス
JSON形式のデータを解析できるように、Oracle Big Data SQLユーザー機能がOracle SQLに組み込まれています。
Oracle SQLでは、列内のアクセス可能なJSONデータ(外部データまたはデータベース内に格納されているデータ)を解析できます。
たとえば、次に、HDFSに格納されているstation_information.jsonというJSONファイルを示します。
{
"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}{"station_id":"82",
"name":"St James Pl & Pearl St","short_name":"5167.06","lat":40.71117416,
"lon":-74.00016545,"region_id":71,"rental_methods":["CREDITCARD","KEY"],
"capacity":27,"rental_url":"http://app.citibikenyc.com/S6Lr/IBV092JufD?station_id=82",
"eightd_has_key_dispenser":false
}
このデータを問い合せるには、次の手順を実行します。
- まず、このデータに対するHDFS外部表を作成します。列としてVARCHAR2という単一のテキストを追加します。(大きなJSONオブジェクトの場合は、かわりにCLOBを使用できます。)
CREATE TABLE bikes.stations_ext ( doc varchar2(4000) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_HDFS DEFAULT DIRECTORY DEFAULT_DIR LOCATION ('/data/bike-stations') ) REJECT LIMIT UNLIMITED; - 次に、外部表を問い合せます。Oracle SQLの
JSON_VALUE関数の使用方法に注意してください。select s.doc.station_id, s.doc.name, s.doc.lon as longitude, s.doc.lat as latitude, s.doc.capacity, s.doc.eightd_has_key_dispenser, s.doc.rental_methods, json_value(doc, '$.rental_methods[0]'), json_value(doc, '$.rental_methods[1]') from stations_exts
3.6 Kafkaトピック用のOracle外部表の作成
Oracle Big Data SQLでは、Kafka用Hiveストレージ・ハンドラの使用とOracle SQL Access to Kafkaの使用という2つの方法でKafkaデータを使用できます。
- Kafka用Hiveストレージ・ハンドラの使用
ORACLE_HIVEアクセス・ドライバでは、Oracle Big Data SQLインストールに含まれているHiveストレージ・ハンドラを使用してKafkaトピックにアクセスできます。KafkaトピックにアクセスするHive外部表を最初に作成してから、その表に基づくOracle Big Data SQL表を作成します。OracleのKafka用Hiveストレージ・ハンドラを使用したKafkaトピック用Hive外部表の作成を参照してください。 - Oracle SQL Access to Kafkaの使用
Oracle SQL Access to Kafkaでは、Oracle SQLで、HiveまたはHadoopを使用せずにKafkaトピックにアクセスできます。ORA_KAFKA PL/SQLパッケージには、これを有効にする関数およびプロシージャが含まれています。
ORA_KAFKA.REGISTER_CLUSTERを使用してデータベース・スキーマにKafkaクラスタを登録してから、ORA_KAFKA.CREATE_VIEWSプロシージャを使用してビューを作成します。このプロシージャによって内部で外部表が作成されるため、外部表を明示的に作成する必要はありません。Oracle SQL Access to Kafkaを参照してください。
前述の2つのオプションの比較:
| Kafka用Hiveストレージ・ハンドラ | Oracle SQL Access to Kafka |
|---|---|
| Big Data SQL構文の使用 | ORA_KAFKAの関数およびプロシージャを使用します。
|
| HiveとHadoopが必要 | HiveおよびHadoopは必要ありません。データベース・システムでJavaプロセスを実行する必要があります。 |
| 問合せへの回答時に述語のプッシュダウンを使用: 述語のプッシュダウンが必要な問合せに最適なオプションです。たとえば、Kafka内の大量のデータから検索する問合せなどです。述語のプッシュダウンは、partitioned、topic、offsetおよびtimestamp列に対して定義されている結合問合せ(a AND b AND c)でサポートされています。 |
KafkaオフセットおよびKafkaタイムスタンプ管理の使用によるオフセットまたはタイムスタンプでのメッセージの読取り: 最新のKafkaメッセージ(5秒前から現在の時刻までのメッセージなど)や、特定のオフセットまたはタイムスタンプから始まる一連のメッセージ(タイムスタンプtまたはオフセットoから始まる1000件のメッセージなど)を検索する問合せに最適なオプションです。 |
| Avro (スキーマレスまたはスキーマフル)形式のメッセージのサポート | CSV形式およびJSON形式のメッセージのサポート |
| KafkaトピックのHive問合せが可能 | 複数のデータベース・ビューでKafkaを問い合せることができます。各アプリケーションには独自の一連のビューおよびオフセット管理が備わっています。それにより、各アプリケーションでKafkaストリームの別々の部分を読み取ることができます。 |
3.6.1 OracleのKafka用Hiveストレージ・ハンドラを使用したKafkaトピック用Hive外部表の作成
Kafka用Hiveストレージ・ハンドラにより、HiveおよびOracle Big Data SQLは、Kafkaトピックに問合せを実行できるようになります。
Kafkaデータへのアクセスを提供するために、Kafkaトピックに基づくHive外部表を作成します。HiveでKafkaデータ形式を読み取れるようにするOracle Big Data SQLストレージ・ハンドラは、oracle.hadoop.kafka.hive.KafkaStorageHandlerです。
このストレージ・ハンドラを使用すると、Kafkaに存在するデータが基になる外部Hive表を作成できます。Big Data SQLは、この外部Hive表によってKafkaデータの問合せを実行できるようになります。
次に、Hive DDLの使用例を示します。この例ではtopic1とtopic2はKafkaブローカの2つのトピックです。これらのキーはKafkaのStringシリアライザによってシリアル化されていて、その値はKafkaのLongシリアライザによってシリアル化されています。
CREATE EXTERNAL TABLE test_table
row format serde ‘oracle.hadoop.kafka.hive.KafkaSerDe’
stored by 'oracle.hadoop.kafka.hive.KafkaStorageHandler'
tblproperties('oracle.kafka.table.key.type'='string',
'oracle.kafka.table.value.type'='long',
'oracle.kafka.bootstrap.servers'='nshgc0602:9092',
'oracle.kafka.table.topics'='topic1,topic2');
次の例は、結果のHive表を示しています。Kafkaのキー、値、オフセット、トピック名およびパーティションIDがHive列にマップされています。Hive問合せのWHERE句によって、トピック/パーティションのペアごとのオフセットを明示的に指定できます。
hive> describe test_table;
OK
topic string from deserializer
partitionid int from deserializer
key string from deserializer
value bigInt from deserializer
offset bigint from deserializer
timestamptype smallInt from deserializer
timestamp timestamp from deserializer
Time taken: 0.084 seconds, Fetched: 7 row(s) hive> SELECT * \
FROM test_table \
WHERE (topic="topic1" and partitoinid=0 and offset > 199) \
OR (topic="topic1" and partitionid=1 and offset > 198) \
OR (topic="topic2" and partitionid=0 and offset > 177) \
OR (topic="topic2" and partitionid=1 and offset > 176);すべてのトピックとパーティションのオフセットをトラッキングする必要があります。たとえば、こうしたオフセットの保管にはOracle表を使用できます。それよりも便利な新規データのトラッキング方法は、timestamp列を使用することです。次の問合せを使用して、特定の時点の後のデータを照会できます。hive> SELECT * FROM test_table WHERE timestamp > '2017-07-12 11:30:00'; すべての表プロパティの説明は、次の「プロパティのリファレンス」の項を参照してください
プロパティのリファレンス
表3-3 Kafka用Hiveストレージ・ハンドラの表プロパティ
| プロパティ名 | 要件 | 説明 |
|---|---|---|
|
oracle.kafka.table.topics |
必須 |
Kafkaトピックのカンマ区切りリスト。それぞれのKafkaトピック名は、文字(大文字と小文字)、数字、. (ドット)、_ (アンダースコア)および- (マイナス記号)で構成されている必要があります。トピック名ごとの最大長は249です。これらのトピックは、同じシリアル化メカニズムを備えている必要があります。結果のHive表は、ここにリストされたすべてのトピックのレコードで構成されています。Hive列"topic"が追加され、レコードごとのトピック名に設定されます。 |
|
oracle.kafka.bootstrap.servers |
必須 |
このプロパティは、基礎となるKafkaコンシューマの"bootstrap.servers"プロパティに変換されます。コンシューマは、ここで指定されたサーバーに関係なく、すべてのサーバーをブートストラップに使用します。このリストは、サーバーの完全なセットを検出するために使用される最初のホストにのみ影響します。このリストは、 |
|
oracle.kafka.table.key.type |
オプション |
レコードのキー・タイプ。未設定の場合、Hive行ではKafkaレコードのキー部分が無視されます。サポートされる値は、"string"、"integer"、"long"、"double"、"avro"、"avro_confluent"の値のみです。"string"、"integer"、"double"および"long"は、Kafkaでサポートされるプリミティブの組込みシリアル化タイプに相応します。このプロパティがこれらのプリミティブ・タイプのいずれかの場合、レコードごとのKafkaキーは1つのHive列にマップされます。このプロパティが"avro"または"avro_confluent"に設定されている場合は、 "avro"と"avro_confluent"の違いは、シリアル化のワイヤ形式がわずかに異なっていることです。"avro"の場合、キーのバイト配列全体はavroシリアル化のバイトで構成されます。"avro_confluent"の場合、バイト配列はマジック・バイト、バージョン番号、キーのavroシリアル化のバイトという順序で構成されます。 |
|
oracle.kafka.table.value.type |
オプション |
レコードの値タイプ。未設定の場合は、Kafkaレコードの値部分がHive行で無視されます。このプロパティの使用方法は、 |
|
oracle.kafka.table.key.writer.schema |
オプション |
KafkaキーのAvroシリアル化に対するオプションのライター・スキーマ。キーがKafkaブローカに書き込まれたスキーマとキーのリーダー・スキーマが異なる場合に必要です。これは、Kafkaキーがシリアル化されたスキーマそのものになっている必要があります。 |
|
oracle.kafka.table.key.schema |
"oracle.kafka.table.key.type"が"avro"または"avro_confluent"の場合は必須 |
KafkaキーのAvroリーダー・スキーマに対応するJSON文字列。KafkaキーのライターAvroスキーマと完全に同じである必要はありません。リーダー・スキーマにKafkaキーまたはコンバータから変換されたオブジェクトとの互換性があれば有効です。これにより、Hive列の名前を変更して、Hive行のKafkaキーから維持するフィールドを選択できるようになります。このプロパティのスキーマとKafkaキーがシリアル化されたスキーマが異なる場合は、 |
|
oracle.kafka.table.value.writer.schema |
オプション |
Kafka値のAvroシリアル化に対するオプションのライター・スキーマ。使用方法は |
|
oracle.kafka.table.value.schema |
"oracle.kafka.table.value.type"が"avro"または"avro_confluent"の場合は必須 |
Kafka値のAvroリーダー・スキーマに対するJSON文字列。使用方法は |
|
oracle.kafka.table.extra.columns |
オプション(デフォルトは"true") |
追加のKafka列( |
|
oracle.kafka.chop.partition |
オプション(デフォルトはfalse) |
Kafkaパーティションをより小さなチャンクに分割するかどうかを制御するブール・フラグ。これは、Kafkaパーティションの数が少なく、それぞれのKafkaパーティションのサイズが大きい場合に便利です。 |
|
oracle.kafka.partition.chunk.size |
オプション |
oracle.kafka.chop.partitionがtrueの場合は、このプロパティにより各パーティション・チャンク内のKafkaレコードの数を制御します。(理想的な分割サイズ)/(Kafkaレコードの平均サイズ)で見積もられる値に設定する必要があります。たとえば、理想的な分割サイズが256 MBであり、Kafkaレコードの平均サイズが256バイトの場合、このプロパティは1000000に設定する必要があります。 |
3.6.2 Kafkaトピック用Oracle Big Data SQL表の作成
Big Data SQLでは、ORACLE_HIVEアクセス・ドライバの使用によって、Hiveメタデータを使用して説明されているKafkaソースを問い合せることができます。
Kafka用Hiveストレージ・ハンドラを使用してKafkaデータに基づくHive表を作成した後で、結果のHive表からBig Data SQL表を生成するための特別な手順はありません。Kafkaソース用のORACLE_HIVE設定は、他のHiveソースと同じです。次の例では、Oracle外部表の作成方法を示します。作成後、他のOracle表と同様にそれを問い合せることができます。
CREATE TABLE test_table(
topic varchar2(50),
partitionid integer,
key varchar2(50),
value integer,
offset integer,
timestamptype integer,
timestamp timestamp
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_HIVE DEFAULT DIRECTORY DEFAULT_DIR
ACCESS PARAMETERS
(
com.oracle.bigdata.cluster=hadoop1
com.oracle.bigdata.tablename=default.test_table
)
) PARALLEL 2 REJECT LIMIT UNLIMITED
よくある質問
-
KafkaブローカへのOracle Big Data SQLアクセスは並列処理されますか。たとえば、Oracle Big Data SQLを実行しているノードが6つある場合、6つすべてのノードがKafkaへの1つの問合せに関与するため、Kafkaトピックを読み取るにはノード全体で1つのコンシューマ・グループを作成する必要がありますか。または、Kafkaから問合せを行うために1つのSELECT文に使用されるノードは1つのみですか。
Big Data SQL問合せと同じく、Kafkaに対する問合せにはOracle Big Data SQLがインストールされているすべてのノードが関与します。
-
Kafka問合せでは、新しい着信データにどのように対応できますか。新しいデータがKafkaに送られるまで待機する問合せを設定できますか(タイムアウトを指定した場合)。
新しいデータを取得するには、Oracle Big Data SQL問合せを定期的に実行し、新しい行(最後の読取り以降の行)のみを取得するようにオフセットおよびタイムスタンプでフィルタします。
関連項目:
Big Data SQL Quick Startというブログの次の項では、Oracle Big Data SQLからKafkaにアクセスする方法について詳しく説明しています - Big Data SQL Quick Start。Kafka経由のBig Data SQL - パート233.7 オブジェクト・ストア・アクセス用のOracle外部表の作成
ORACLE_BIGDATAアクセス・ドライバを使用すると、オブジェクト・ストアに格納されているデータを介して外部表を作成できます。Oracle Big Data SQLでは、現在、Oracle Object Store、Amazon S3およびAzure Blob Storageへのアクセスがサポートされています。
ORACLE_BIGDATAは、主にオブジェクト・ストアに対する問合せをサポートすることを目的としています。Smart ScanおよびOracle Big Data SQLセルを使用して、これらのストアに対するスケール・アウトおよびパフォーマンスを実現します。また、このドライバを使用すると、ローカル・データを問い合せることができます。これは、テスト用のデータ・セットや規模の小さなデータ・セットに便利です。
ORACLE_BIGDATAドライバは、rawファイルを介して表を作成するという点で、ORACLE_HDFSドライバに似ています。Hiveのようなメタデータ・ストアは使用しません。表定義の一部としてメタデータを指定します。
ただし、ORACLE_HDFSと異なり、ORACLE_BIGDATAはデータ・アクセスにJavaドライバおよび標準のHadoopメカニズム(SerDesやInputFormatsなど)を使用しません。ORACLE_BIGDATAは、すべてのデータ・アクセスに最適化されたCドライバを使用します。Avro、ORCおよびParquetファイル・タイプのテキストがサポートされています。テキスト・ファイル・タイプのサポートは堅牢です。たとえば、デリミタ付きテキストに対するパラメータを指定できます。また、Oracleの広範なJSON処理機能を使用することもできます。
オブジェクト・ストアのデータにアクセスするステップ
- 資格証明オブジェクトの作成
資格証明オブジェクトには、オブジェクト・ストア資格証明が暗号化された形式で格納されます。資格証明によって指定されたアイデンティティは、オブジェクト・ストア内の基礎となるデータにアクセスできる必要があります。
- 型が
ORACLE_BIGDATAであるOracle Big Data SQL外部表の作成。CREATE TABLE文では、オブジェクト・ストアに対して認証を提供する資格証明オブジェクトを参照する必要があります。また、オブジェクト・ストア内のファイルへのURIを提供するLOCATION句も必要です。
資格証明オブジェクトの作成
execute dbms_credential.create_credential(
credential_name => '<my_credential>',
username => '<username>',
password => '<password>'
);execute dbms_credential.create_credential(
credential_name => '<my_credential>',
username => '<user_ocid>',
password => '',
key => '{"tenancy_ocid":"<tenancy_ocid>","private_key":"<private_key>","fingerprint":"<fingerprint>"}');次に、com.oracle.bigdata.credential.nameパラメータで資格証明オブジェクト名を指定します。
LOCATION句の定義
- Native Oracle Cloud Infrastructure Object Storageの場合、URI形式は次のとおりです。
location ('https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket>/o/<objectname>') - Oracle Cloud Infrastructure Object Storageの場合、ファイルのURI形式は次のとおりです。
location ('https://swiftobjectstorage.<region>.oraclecloud.com/v1/<namespace>/<bucket>/<filename>') - Amazon S3の場所については、https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-introを参照してください。
ホストスタイルのURI形式は次のとおりです。
location ('https://<bucket>.<host>/<objectname>')パススタイルのURI形式は次のとおりです。使用可能なパススタイルの例を次に示します。location ('https://<host>/<bucket>/<objectname>')location ('https://s3-us-west-2.amazonaws.com/adwc/<filename>') - Azure Blob Storageの場所については、URI形式は次のとおりです。
次に例を示します。location ('https://<host>:<port>/<container>/<blob>')location ('https://myaccount.blob.core.windows.net/mycontainer/myblob')
資格証明オブジェクトは、オブジェクト・ストアへのアクセスのためにのみ必要となります。資格証明パラメータを省略する場合は、オブジェクトがパブリック・バケットにある必要があります。この資格証明に関連付けられているユーザーIDには、オブジェクト・ストレージからデータを読み取るためのアクセス権が必要です。
ローカル・ストレージを使用してオブジェクト・ストレージ内のデータへのアクセスをテストする場合は、ORACLE_LOADERデータ・ソースの場合と同じように、その場所にあるOracleディレクトリ・オブジェクトを指定する必要があります。
アクセス・パラメータの設定
com.oracle.bigdata.fileformat={textfile|avro|parquet|orc}デリミタ付きテキスト・ファイルの場合、rowformatパラメータも必要です。
関連項目:
このガイドのORACLE_BIGDATAアクセス・パラメータでは、共通のアクセス・パラメータと各ファイル・タイプに固有のアクセス・パラメータを表にまとめています。ノート:
ORACLE_BIGDATAを使用すると、テストや単純な問合せ目的でローカル・ファイルにアクセスできます。この場合、LOCATIONフィールド値はORACLE_LOADERに使用するものと同じです。LOCATIONフィールドでは、Oracleディレクトリ・オブジェクトの後にファイルの名前を続けることができます。ローカル・ファイルの場合、資格証明オブジェクトは必須ではありません。ただし、ファイルにアクセスするには、ディレクトリ・オブジェクトに対する権限が必要です。3.7.1 オブジェクト・ストア・アクセスの表の作成例
この項では、オブジェクト・ストアにアクセスするためのCREATE TABLE文の作成方法について説明します。
次の例に示すように、必要なコンポーネントは次のとおりです。
-
外部表のスキーマ。
-
資格証明オブジェクト。
-
ファイル形式パラメータおよびファイル形式に固有のアクセス・パラメータ。たとえば、デリミタ付きテキスト・ファイルにはrowformatパラメータが必要です。ParquetおよびAvroでは、fileformatパラメータのみが必要です。デフォルトのファイル形式はParquetです。
-
特定のオブジェクト・ストアに対するLOCATION句の正しい構文。
-
オブジェクト・ストアではなく、ローカルなLOCATIONでDEFAULT DIRECTORY句を使用します。
関連項目:
各ファイル・タイプで使用可能なパラメータの詳細は、ORACLE_BIGDATAアクセス・パラメータを参照してください。例: オブジェクト・ストア内のファイルへのアクセス
ノート:
オブジェクト・ストア・アクセスの場合、まずDBMS_CREDENTIAL PL/SQLパッケージのDBMS_CREDENTIAL.CREATE_CREDENTIALを使用して資格証明オブジェクトを作成する必要があります。exec dbms_credential.create_credential(
credential_name => '<my_credential_object_name>',
username => '<username>',
password => '<password>'
);次に、文のACCESS PARAMETER句内で、文に示すようにオブジェクトの名前をcom.oracle.bigdata.credential.nameに割り当てます。この例のターゲットは、オブジェクト・ストアのParquetファイルです。
CREATE TABLE tkexbaseballtab
(date1 date,
date2 timestamp,
name varchar2(30),
nationality varchar2(20),
age number,
team varchar2(20),
active char(1),
average float,
payroll char(1),
exid VARCHAR2(20))
ORGANIZATION EXTERNAL
(TYPE ORACLE_BIGDATA
ACCESS PARAMETERS
(
com.oracle.bigdata.debug=TRUE
com.oracle.bigdata.credential.name=MY_CRED
com.oracle.bigdata.fileformat=parquet
)
location ('https://<domain>.com/BIGDATA_PARQUET/<filename>.parquet')
) REJECT LIMIT UNLIMITED;3.7.2 Oracleディレクトリ・オブジェクトを介したローカル・ファイルへのアクセス
ORACLE_BIGDATAドライバを使用して、ローカル・ファイルに対する外部表を作成することもできます。
次の文では、ローカル・ディレクトリ内のテキスト・ファイルに対する外部表を作成しています。JSONファイルの場合、ファイル形式をtextfileに設定します。それ以外のアクセス・パラメータは必要ありません。ローカル・ファイルにアクセスするときに資格証明を提示する必要はありません。デリミタ付きテキスト・ファイルの場合と同様ですが、ファイルに使用されているフィールドや行の終端文字がデフォルト以外の値である場合はそれらも定義します。この例では、フィールドの終端文字を縦線(|)に設定しています。この文には、DEFAULT DIRECTORY句は含まれません。かわりに、LOCATION句には、ファイルが存在するディレクトリ・オブジェクトの名前(DEF_DIR1)を指定します。
CREATE TABLE b19724081
( CONTRACT_STATUS_CODE VARCHAR2(1),
CONTRACT_STATUS_DESCRIPTION VARCHAR2(200),
POSTING_AGENT VARCHAR2(50),
DATA_ORIGIN VARCHAR2(50),
WAREHOUSE_POSTING_TIMESTAMP DATE,
WAREHOUSE_UPDATE_TIMESTAMP DATE
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_BIGDATA
DEFAULT DIRECTORY "DEF_DIR1"
ACCESS PARAMETERS
(
com.oracle.bigdata.fileformat=textfile
com.oracle.bigdata.csv.rowformat.fields.terminator = '|'
)
location ("DEF_DIR1":"<'filename>.csv')
)
REJECT LIMIT UNLIMITED;3.7.3 Oracleデータ型への変換
Oracle Big Data SQLでは、Parquet、ORCおよびAvroファイル・データ型からOracleデータ型への変換がサポートされていますが、スカラー・フィールドのみにかぎられます。非スカラー・データ型はVARCHAR2(4000)に変換されます。
配列や構造体などの複合型はVARCHAR2データ型にマップされ、VARCHAR2フィールドでJSON文字列で表されます。
ノート:
列のデータに変換エラーが発生した場合、たとえば、変換された値を保持するのに十分な大きさがターゲット列にない場合、列の値はNULLに設定されます。
表3-4 Parquet、ORCおよびAvroデータ型からOracleデータ型へのORACLE_BIGDATAマッピング
| 型の説明 | Parquet | ORC | Avro | サポートされているOracleデータ型への変換 |
|---|---|---|---|---|
| 10進数: スケールなし×スケール10の形式の任意精度符号付き10進数 |
1decimal (int32、int64、fixed_len_byte_array、byte_array) |
2decimal (int64、int128) | 3decimal (bytes、fixed) |
number(p)、 number(p,s) |
| UTF8: UTF-8でエンコードされた文字列 |
string/utf8 |
char/string/varchar | string |
varchar2 |
| バイト配列/バイナリ |
4byte_array |
binary | bytes |
blob |
| 固定長のバイト配列 |
fixed_len_byte_array |
- | fixed |
blob |
| UUID |
UUID (fixed_len_byte_array) |
- | - |
blob |
| Json |
JSON (byte_array) |
- | - | varchar2
2 |
| Bson |
Bson (byte_array) |
- | - |
- |
| 日付: Unixエポック1970年1月1日からの日数 | date (int32) | date | date (int) | date |
| 時間(ミリ): 深夜00: 00: 00.000以降のミリ秒数 | time-millis (int32) | - | time-millis (int) | timestamp(3) |
| 時間(マイクロ): 深夜00:00:00.000000以降のマイクロ秒数 | time-micros (int64) | - | time-micros (long) | timestamp(6) |
| 時間(ナノ): 深夜00:00:00.000000以降のナノ秒数 | time-nanos (int64) | - | - | timestamp(9) |
| 時間(ミリ) UTC | time-millis-UTC (int32) | - | - | timestamp(3) |
| 時間(マイクロ) UTC | time-micros-UTC (int64) | - | - | timestamp(6) |
| 時間(ナノ) UTC | time-nanos-UTC (int64) | - | - | timestamp(9) |
| timestamp (millis) | timestamp-millis (int64) | - | - | timestamp(3) |
| timestamp (micros) | timestamp-micros (int64) | - | - | timestamp(6) |
| timestamp (nanos) | timestamp-nanos (int64) | timestamp | - | timestamp(9) |
| タイムスタンプ(ミリ) UTC: unixエポック1970年1月1日00:00:00.000 UTCからのミリ秒数 | timestampmillis-UTC (int64) | - | timestampmillis (long) | timestamp(3) |
| タイムスタンプ(マイクロ) UTC: unixエポック1970年1月1日00:00:00.000000 UTCからのマイクロ秒数 | timestampmicros-UTC (int64) | - | timestampmicros (long) | timestamp(6) |
| タイムスタンプ(ナノ) UTC: unixエポック1970年1月1日00:00:00.000000 UTCからのナノ秒数 | timestampnanos-UTC (int64) | - | - | timestamp(9) |
| 期間: 月数、日数およびミリ秒数 | interval (fixed、size: 12) | - | duration(fixed、size:12) | - |
| 8ビットの符号付き整数 | int_8 (int32) | - | - | number(3)、tinyint |
| 16ビットの符号付き整数 | int_16 (int32) | - | - | number(5)、smallint |
| 32ビットの符号付き整数 | int_32 (int32) | - | int | number(10)、int |
| 64ビットの符号付き整数 | int_64 (int64) | - | long | number(20)、bigint |
| 8ビットの符号なし整数 | uint_8 (int32) | byte | - | number(3)、tinyint |
| 16ビットの符号なし整数 | uint_16 (int32) | short | - | number(5)、smallint |
| 32ビット符号なし整数 | uint_32 (int32) | int | - | number(10)、int |
| 64ビットの符号なし整数 | uint_64 (int64) | long | - | number(20)、bigint |
| 96ビットの符号付き整数 | 5int96 | - | - | number(29)、timestamp(9) |
| IEEE 32ビットの浮動小数点 | float | float | float | binary_float |
| IEEE 64ビットの浮動小数点 | double | double | double | binary_double |
| ブール | boolean | boolean | boolean | number(1) |
| null/値なし | null | - | null | varchar2(1) |
| 列挙 | enum(int) | - | enum(int) | varchar2 |
- Parquetでは、10進数は、固定長のバイト配列、またはサイズが精度で決定されるバイト配列として、int_32、int_64で格納できます。
- ORCでは、10進数は128ビットの整数で格納されます。
- Avroでは、10進数はバイト配列(固定または非固定)として内部的に格納されます。Avroライターによっては、10進数の文字列表現が格納される場合や、スケールなしの値が格納される場合があります。ユーザーにあいまいなデータが表示されるのを避けるために、アクセス・パラメータ
com.oracle.bigdata.avro.decimaltpeを使用して、ファイル内で使用される表現を明示的に宣言することをお薦めします。このパラメータが明示的に指定されていない場合は、ファイルの10進数列にデータのスケールなし表現が格納されると見なされます。ORACLE_BIGDATAアクセス・パラメータを参照してください。 - Parquetのbinary型は、
com.oracle.bigdata.prq.binary_as_stringがFALSEに設定されている場合のみblobとして使用できます。ORACLE_BIGDATAアクセス・パラメータを参照してください。 - Parquetのint_96型は、
com.oracle.bigdata.prq.int96_as_timestampアクセス・パラメータがFALSEに設定されている場合のみnumberとして使用できます。ORACLE_BIGDATAアクセス・パラメータを参照してください。
3.7.4 ORACLE_BIGDATAでの圧縮ファイルのサポート
オブジェクト・ストア内の圧縮されたファイルにアクセスするためのORACLE_BIGDATAドライバのサポートは、次のとおりです。
- 圧縮されたテキスト、Parquet、AvroおよびORCファイル
このドライバでは、gzip、bzip2またはzlibで圧縮されたテキスト、Parquet、AvroおよびORCファイルから読み取ることができます。圧縮形式は、自動的に検出するか、指定することができます。外部表作成の文では、圧縮ファイルを処理するためのパラメータは必要ありません。
次のORACLE_BIGDATAアクセス・パラメータを使用して圧縮タイプを定義します。com.oracle.bigdata.compressiontype=detect|gzip|zlib|bzip2gzip圧縮タイプの定義例は次のとおりです。com.oracle.bigdata.compressiontype=gzip詳細は、ORACLE_BIGDATAアクセス・パラメータを参照してください。
3.8 外部表の問合せ
ユーザーは、他の表を問い合せる場合と同じように、SQL SELECT文を使用して外部表を問い合せることができます。
ノート:
MODIFY EXTERNAL句は、ORACLE_BIGDATAドライバで作成された外部表では許可されません。3.8.1 ユーザー・アクセス権の付与
Hadoopクラスタ上のデータを問い合せるユーザーには、外部表、およびクラスタ・ディレクトリを指すデータベース・ディレクトリ・オブジェクトへのOracle Database内のREADアクセス権が必要です。「クラスタ・ディレクトリについて」を参照してください。
3.8.2 エラー処理について
デフォルトでは、列の値を計算しているときにエラーが発生した場合、問合せはデータを返しません。ほとんどのエラー(特に、列の値を計算中にスローされたエラー)の後も処理は続行します。
エラーの処理方法を決定するには、com.oracle.bigdata.erroroptパラメータおよびcom.oracle.bigdata.overflowパラメータを使用します。
3.8.4 ファイル・リーダーについて
3.8.4.1 OracleによってHadoopソース用に最適化されたParquetリーダーの使用
Parquetファイルの読取りの場合は、Hadoopソース用のカスタムParquetリーダーを使用することもできます。このような固有のドライバによってパフォーマンスが向上し、クラスタ・リソースをより効率的に使用できます。
カスタムParquetリーダーの無効化または再有効化
com.oracle.bigdata.useOracleParquet=falseこの設定をクラスタのプロパティ・ファイルに追加すると、すべてのParquetベースの外部表に対する最適化を無効化できます。デフォルトに戻すには、この設定を削除します。以前に作成したParquet形式のデータとの互換性
このカスタム・リーダーを使用するためにデータ形式を変更する必要はありません。ただし、最高のパフォーマンスを得るために、その形式では各Parquetブロックの列ごとに最小値と最大値を指定する必要があります。これらの値は、問合せを最適化するために、標準のHadoop Parquet InputFormatとカスタムParquetリーダーで使用されます。この結果として得られる最適化により、HiveとOracle Big Data SQLの両方で問合せのパフォーマンスが大幅に向上します。
Impalaで作成したParquetファイルには、各Parquetブロックの列ごとに最小値と最大値が含まれていない点に注意してください。
最小値と最大値を使用できるようにするために、Hiveまたは標準のHadoop Parquet InputFormatで出力を生成するその他のツール(PrestoDBやSparkなど)でParquetファイルを作成することをお薦めします。
ファイルにこれらの値が含まれているかどうかを確認するには、parquet-toolsについてヘルプを実行します。CDH Hadoopディストリビューションでは、parquet-toolsコマンドをパスに構成することもできます。
parquet-tools meta sales.parqこの結果の出力には、各列に最小値、最大値、およびNull値の数が含まれます。
c_quantity : ... :[min: 0, max: 109572, num_nulls: 55]c.total_sales : ... :[min: 0, max: 109571, num_nulls: 41]3.9 データベース・サーバー(Oracle Exadata Machineなど)上のOracle Big Data SQLについて
この項では、Oracle Big Data SQLインストールによってOracle Databaseシステム(Oracle Exadata Machineなど)に加えられる変更について説明します。
3.9.1 bigdata_configディレクトリについて
bigdata_configディレクトリには、すべてのHadoopクラスタに共通の構成情報が含まれています。このディレクトリは、Oracle Databaseシステムの$ORACLE_HOME/bigdatasqlの下にあります。oracleファイル・システムのユーザー(またはOracle Databaseインスタンスを所有するユーザー)は、bigdata_configを所有します。Oracleデータベース・ディレクトリORACLE_BIGDATA_CONFIGはbigdata_configを指します。
3.9.2 一般的な構成プロパティ
インストールで、これらのファイルは$ORACLE_HOME/bigdatasqlの下のbigdata_configディレクトリ内に格納されます。
Oracle DBAは、必要に応じてこれらの構成ファイルを編集できます。
3.9.2.1 bigdata.properties
共通ディレクトリ内の bigdata.propertiesファイルには、HDFS内のデータにアクセスするために必要なJavaクラス・パスおよびネイティブ・ライブラリ・パスを定義するプロパティ/値のペアが含まれています。
次のプロパティを設定する必要があります。
次のリストで、bigdata.propertiesで許可されているすべてのプロパティを説明します。
bigdata.properties
| プロパティ | 説明 |
|---|---|
|
bigdata.cluster.default |
デフォルトのHadoopクラスタの名前。アクセス・パラメータがクラスタを指定しない場合、アクセス・ドライバはこの名前を使用します。必須。 デフォルトのクラスタ名を変更すると、明示的なクラスタ名なしで以前に作成された外部表が使用できなくなる可能性があります。 |
|
bigdata.cluster.list |
Hadoopクラスタ名のコンマ区切りのリスト。オプション。 |
|
java.classpath.hadoop |
Hadoopクラス・パス。必須。 |
|
java.classpath.hive |
Hiveクラス・パス。必須。 |
|
java.classpath.oracle |
Oracle JXAD Java JARファイルへのパス。必須。 |
|
java.classpath.user |
ユーザーJARファイルへのパス。オプション。 |
|
java.libjvm.file |
JVM共有ライブラリ( |
|
java.options |
JVMに渡されるオプションのコンマ区切りのリスト。オプション。 この例では、最大ヒープ・サイズを2GBに設定し、Java Native Interface (JNI)呼出しの詳細なロギングを設定します。 Xmx2048m,-verbose=jni |
|
java.options2 |
JVMに渡されるオプションのスペース区切りのリスト。オプション。デリミタは単一の空白文字にする必要があります。その他のタブなどの空白文字は使用できません。 この例では、最大ヒープ・サイズを2GBに設定し、Java Native Interface (JNI)呼出しの詳細なロギングを設定します。 Xmx2048m -verbose=jni ノート: java.optionsはカンマ区切りですが、java.options2は空白区切りです。これら2つのプロパティは、同じbigdata.propertiesファイル内に共存できます。
|
|
LD_LIBRARY_PATH |
Hadoopネイティブ・ライブラリを検索するためのディレクトリ・パスのコロン区切りの(:)リスト。推奨。 このオプションを設定した場合は、 |
例3-1は、サンプルのbigdata.propertiesファイルを示します。
例3-1 サンプルのbigdata.propertiesファイル
# bigdata.properties # # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. # # NAME # bigdata.properties - Big Data Properties File # # DESCRIPTION # Properties file containing parameters for allowing access to Big Data # Fixed value properties can be added here # java.libjvm.file=$ORACLE_HOME/jdk/jre/lib/amd64/server/libjvm.so java.classpath.oracle=$ORACLE_HOME/hadoopcore/jlib/*:$ORACLE_HOME/hadoop/jlib/hver-2/*:$ORACLE_HOME/dbjava/lib/* java.classpath.hadoop=$HADOOP_HOME/*:$HADOOP_HOME/lib/* java.classpath.hive=$HIVE_HOME/lib/* LD_LIBRARY_PATH=$ORACLE_HOME/jdk/jre/lib bigdata.cluster.default=hadoop_cl_1
3.9.2.2 bigdata-log4j.properties
共通ディレクトリのbigdata-log4j.propertiesファイルは、外部表に対する問合せのロギング動作をJavaコードで定義します。このファイルでは、すべてのlog4jプロパティを使用できます。
例3-2は、サンプルのbigdata-log4j.propertiesファイルと関連するlog4jプロパティを示します。
例3-2 サンプルのbigdata-log4j.propertiesファイル
# bigdata-log4j.properties
#
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
#
# NAME
# bigdata-log4j.properties - Big Data Logging Properties File
#
# DESCRIPTION
# Properties file containing logging parameters for Big Data
# Fixed value properties can be added here
bigsql.rootlogger=INFO,console
log4j.rootlogger=DEBUG, file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
log4j.logger.oracle.hadoop.sql=ALL, file
bigsql.log.dir=.
bigsql.log.file=bigsql.log
log4j.appender.file.File=$ORACLE_HOME/bigdatalogs/bigdata-log4j.log3.9.3 クラスタ・ディレクトリについて
クラスタ・ディレクトリには、Hadoopクラスタの構成情報が含まれています。Oracle DatabaseがOracle Big Data SQLを使用してアクセスする各クラスタにクラスタ・ディレクトリがあります。このディレクトリは、Oracle Databaseシステムの$ORACLE_HOME/bigdatasql/clusters/の下にあります。たとえば、クラスタbda1_cl_1にはディレクトリ$ORACLE_HOME/bigdatasql/clusters/bda1_c1_1があり、$ORACLE_HOME/bigdatasql/clusters/bda1_c1_1/configには次のファイルがあります。これらは、クラスタにアクセスするためのクライアント構成ファイルです。
-
bigdata.hosts(顧客による編集不可) -
core-site.xml -
hdfs-site.xml -
hive-site.xml -
mapred-site.xml(optional) -
log4jプロパティ・ファイル(hive-log4j.propertiesなど)
$ORACLE_HOME/bigdatasql/databases/<データベース名>/bigdata_config/default_clusterは、デフォルト・クラスタのディレクトリへのソフト・リンクです。
データベース・ディレクトリ・オブジェクトはクラスタ・ディレクトリを指します。クラスタ内のデータにアクセスするユーザーには、ディレクトリ・オブジェクトの読取りアクセス権が必要です。