ビジネス・レポートおよび予測のためのOracle Modern Data Platformの実装

This section describes how to provision OCI services, implement the use case, visualize data, and create forecasts.

Provision OCI Services

このユースケースの簡単なデモのためにリソースをプロビジョニングするための主なステップについて説明します。

  1. Create an OCI Object Storage Bucket.
    詳細は、バケットの作成を参照してください。
  2. Oracle Big Data ServiceおよびAutonomous Data Warehouseをプロビジョニングします。

Oracle Modern Data Platformのユースケースの実装

実装の詳細に進む前に、全体的なフローを見てみましょう。

  1. RAWデータはOCI Object Storageに存在します。
  2. Oracle Big Data Serviceでネイティブに実行されているSparkは、OCI Object Storageからデータを読み取ります。データをクレンジング、変換および匿名化し、最後にデータをAutonomous Data Warehouseに保持します。
  3. ユーザーは、Oracle Analytics Cloudを使用してデータを視覚化し、予測を行います。


oci-modern-data-reporting-flow-oracle.zip

ノート:

選択したデータ・フローは単純な例であり、実際のビジネス・ユース・ケースはより関与することが予想されます。

次の項では、サンプル・データのアップロード方法、OCI Object StorageOracle Big Data Serviceの構成方法、およびデータを変換してAutonomous Data Warehouseにデータを移動する単純なSpark scalaジョブの起動方法について説明します

  1. サンプル・データを取得し、作成したOCI Object Storageバケットにアップロードします。このソリューションのデモ実装に使用されるデータは、Kaggleからダウンロードした時系列販売データです。このデータセット内の各レコードには次のフィールドがあります。
    1. オーダーID
    2. 製品名
    3. オーダー数量
    4. 販売価格
    5. 注文日
    6. 購入住所
    サンプル・データの詳細は、「詳細の参照」セクションの「Kaggle: Sample Sales Data」リンクを参照してください。
  2. OCI Object Storageアクセスの構成: Oracle Big Data Serviceクラスタでは、外部ハイブ表を作成するためにオブジェクト・ストレージ・バケットへのアクセスが必要です。
    For implementation details, follow the steps in this document: Using Object Storage API keys.
  3. Oracle Big Data Serviceにログインし、Hiveを起動します。この例の売上データを含むObject Storageバケットに基づいて外部表を作成します。
    create external table if not exists sales_obj_store
    (Order_ID bigint,
    Product string,
    Quantity_Ordered int,
    PriceEach double,
    Order_Date string,
    Purchase_Address string)
    row format delimited
    fields terminated by ','
    stored as TEXTFILE
    location 'oci://bucket_namej@namespace/sales_data/'
  4. 前述の外部表を使用してデータを問い合せることができることを確認します。
     select * from sales_obj_store limit 20;
  5. Autonomous Data WarehouseへのOracle Big Data Serviceアクセスの構成: Autonomous Data Warehouseウォレット・ファイルをダウンロードし、Autonomous Data Warehouseクラスタに移動し、「データベース接続」をクリックしてウォレット・ファイルをダウンロードします。ウォレットをOracle Big Data Serviceクラスタのディレクトリに格納します。
  6. Download the Oracle JDBC driver and related jar files on the Oracle Big Data Service cluster.Drivers can be downloaded from this link: Oracle Database JDBC driver and Companion Jars Downloads.Sparkジョブの起動時にこれらのjarを渡します。
  7. データを変換し、データをAutonomous Data Warehouseに移動する単純なSpark scalaジョブを起動します。
    1. このジョブは、文字列フィールドをタイムスタンプ・フィールドに変換する単純な変換を実行します。
    2. このジョブは、完全な顧客住所を削除してデータを匿名化し、そこからzipフィールドを抽出します。
    import com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider
    
    import java.util.Properties
    
    import org.apache.spark.sql.Dataset
    import org.apache.spark.sql.Row
    import org.apache.spark.sql.SaveMode
    import org.apache.spark.sql.SparkSession
    import oracle.jdbc.OracleConnection
    
    val jdbcUrl = s"jdbc:oracle:thin:@(description=(retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=xxxx_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))?TNS_ADMIN=/home/xxx/wallet"
    
    val connectionProperties = new Properties()
    var options = collection.mutable.Map[String, String]()
    options += ("driver" -> "oracle.jdbc.driver.OracleDriver")
    options += ("url" -> jdbcUrl)
    options += (OracleConnection.CONNECTION_PROPERTY_USER_NAME -> "xxxx")
    options += (OracleConnection.CONNECTION_PROPERTY_PASSWORD -> "xxxxx")
    options += (OracleConnection.CONNECTION_PROPERTY_TNS_ADMIN -> "/home/xxx/wallet")
    options += ("dbtable" -> "schema_name.sales")
    
    /* read from hive */
    val dfsales = spark.sql("select * from sales")
    
    /* transform */
    val ts = to_timestamp($"order_date", "MM/dd/yy HH:mm")
    val dfsales_orcl = dfsales.withColumn("order_date",ts)
    val dfsales_orcl_zip = dfsales_orcl.select(col("*"), substring_index(col("purchase_address"), " ", -1).as("zip"))
    val dfsales_orcl_transformed = dfsales_orcl_zip.drop("purchase_address")
    
    /* write to ADW */
    dfsales_orcl_transformed.write.format("jdbc").options(options).mode("append").save()
データ変換ジョブが終了したら、Autonomous Data Warehouseでデータを表示できることを確認します。