X

Big Data、Data Integration、Data Lakeに関するテクノロジー、製品・サービス情報、セミナー情報などをお届けします

Big Data SQLをはじめよう - Introduction

これからBig Data SQLを動かすにあたり必要なステップを説明します。とても簡単!この記事を読んだ後、皆が私に賛同してくれることを願っています。まずはじめに、Big Data SQLが何か?を知りたければこちらのBlogをお勧めします。Oracle Big Data SQL: One Fast Query, Big Data SQL 2.0 - Now Available. (Big Data SQLのデザインゴールをカバーしています。)

Big Data SQLのゴールの一つは透過性です。HDFSにあるディレクトリやHCatalogにあるテーブルをリンクするようなテーブルを外部表として定義するだけで、Oracle Database上のテーブルのように動作させることができます。製品ドキュメントも参考になるでしょう。

Big Data SQLをはじめよう

Big Data SQLを使って、HDFS上に格納されたデータをOracle Database経由でクエリを実行する、もっともシンプルな例を紹介します。

まずはデータが実際にHadoop環境のHDFS上に格納されていることを確認します。これを実行するには、Hadoop環境で、HiveコンソールからHive表のDDLを確認します。

hive> show create table web_sales;
OK
CREATE EXTERNAL TABLE web_sales(
  ws_sold_date_sk int,
  ws_sold_time_sk int,
....
  ws_net_paid_inc_ship float,
  ws_net_paid_inc_ship_tax float,
  ws_net_profit float)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '|'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://democluster-ns/user/hive/warehouse/tpc_ds_3T/web_sales'

DDLより、データはテキストファイル(CSV形式)で、以下のHDFSディレクトリに格納されていることが分かります。

$ /user/hive/warehouse/tpc_ds_3T/web_sales

DDLより、各フィールドの区切り文字は“|” です。念のため確認してみましょう。

$ hdfs dfs -ls /user/hive/warehouse/tpc_ds_3T/web_sales|tail -2
... hive 33400655 2015-05-11 13:00 /user/hive/warehouse/tpc_ds_3T/web_sales/part-01923
... hive 32787672 2015-05-11 13:00 /user/hive/warehouse/tpc_ds_3T/web_sales/part-01924
$ hdfs dfs -cat /user/hive/warehouse/tpc_ds_3T/web_sales/part-01923|tail -2
2451126|36400|2451202|302374|9455484|1765279|2274|6715269|2004559|472683|5807|
2451126|36400|2451195|289906|9455484|1765279|2274|6715269|2004559|472683|5807|

確かにHadoop環境のHDFS上にCSVファイルがありました。これをデータベースからフェッチしてみます。

新しい形式の外部表、新しい待機イベント、新しい行ソース

Big Data SQLでは、

  • 新しい形式の外部表(ORACLE_HIVEとORACLE_HDFSドライバ)
  • 新しい待機イベント(cell external table smart scan)
  • 実行計画における新しい行ソース(External Table Access Storage Full)

が導入されています。
上のHDFSディレクトリに対し、以下のようにOracle外部表を定義します。

CREATE TABLE WEB_SALES_EXT (
SS_SOLD_DATE_SK NUMBER,
…
SS_NET_PROFIT NUMBER
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_HIVE
DEFAULT DIRECTORY "DEFAULT_DIR"
ACCESS PARAMETERS
(
com.oracle.bigdata.cluster=democluster
com.oracle.bigdata.tablename=web_sales)
)
REJECT LIMIT UNLIMITED
PARALLEL;

このDDLでは、ORACLE_HDFSドライバを使った外部表であり、クラスタ名とHive環境のテーブル名(web_sales表)を指定しています。テーブル作成が終わったら、データベースに対しクエリを実行することができます。はじめに、とてもシンプルなクエリを実行してみましょう(Filter条件に合致する行から、ある列の最小値を求める)。その後、Oracle Enterprise Managerで、クエリがどのように処理されたかを確認します。

SQL> SELECT min(w.ws_sold_time_sk) 
FROM WEB_SALES_EXT w
WHERE w.ws_sold_date_sk = 2451047;

新しい待機イベント“cell external table smart scan” や、実行計画における新しい行ソース“external table access storage full” が確認できます。

この表がOracleのデータ・ディクショナリに存在することは、以下のクエリで確認できます。

SQL> SELECT t.OBJECT_NAME,t.OBJECT_TYPE
FROM user_objects t 
WHERE object_name='WEB_SALES_EXT';

OBJECT_NAME OBJECT_TYPE
----------- -------------
WEB_SALES_EXT TABLE

Big Data SQLでは、新たにOracleのデータ・ディクショナリ、”ALL_HIVE_TABLES”が追加されました。

SQL> SELECT table_name,LOCATION,table_type
FROM ALL_HIVE_TABLES 
WHERE object_name='WEB_SALES_EXT';

TABLE_NAME LOCATION                                 TABLE_TYPE
----------- -------------------------------------- -----------
WEB_SALES_EXT hdfs://democluster-ns/.../web_sales    EXTERNAL_TABLE

Oracleを使って、Hadoopへのクエリがとても簡単に実行できたことがお分かりいただけたでしょうか。次のBlogで、もっと複雑なクエリについて紹介していきます。

本投稿はBig Data SQL Quick Start. Introduction - Part1.を元に投稿しています。

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.