Oracle® Fusion Middleware WebCenter Sites: Analytics開発者ガイド 11gリリース1 (11.1.1.6.0) E49683-01 |
|
![]() 前 |
![]() 次 |
Analyticsでカスタム・レポートのRAWデータを処理するには、そのデータを処理する新しいAnalyticsジョブを開発する必要があります。処理されたデータはデータベースに挿入されます。
注意: この演習では、演習1でAnalyticsインストールに追加したパラメータに基づいて新しいAnalyticsジョブを開発する方法を、順を追って説明します。開発するAnalyticsジョブは、Analyticsインストールに含まれているデフォルトのAnalyticsジョブを再現したものです。このチュートリアルでは、この演習におけるAnalyticsジョブの開発で使用されるすべてのBeanクラスおよびマッパー・クラスの名前は、デフォルトのAnalyticsジョブを上書きしないように名前が変更されています。 |
この演習の内容は次のとおりです。
Analyticsジョブを開発するために必要な手順の概要は、次のとおりです。
入力として最適な場所を選択します。
analytics
ディレクトリ内のフォルダから場所を選択します。Analyticsジョブはこれをレポートの入力データとして使用します。特定の場所を入力として選択する基準は、特定のレポートで必要なデータに主に依存します。ほとんどの場合、次の場所はレポートのデータ要件を十分に満たします。
Sesdata
: この場所には、すべてのセッションのデータに加えて、訪問者の詳細、オブジェクト・インプレッションおよびセッションに関連するその他の情報が格納されています。
注意: カスタム・レポートを作成する際は、 場所、プロセッサおよび各場所に格納されるデータのタイプの詳細は、『Oracle Fusion Middleware WebCenter Sites: Analytics管理者ガイド』を参照してください。 |
スキーマを拡張します。
処理されたデータを格納するには、Analytics表に新しいL3
表を追加します。
新しいBeanクラスを作成します。
Beanクラスの一番の目的は、出力データを格納することです。フレームワークでは、Beanクラスを使用してジョブの最終出力を格納します。データベース・インジェクション・プロセッサは、各Beanクラスに格納されているデータを取り出し、そのデータをL3
表(前の手順で作成済)に挿入します。
新しいBeanクラスは、フレームワークで提供される事前定義済のクラスを拡張したものです。実装の詳細は、第4.1.1項「新規Analyticsジョブの開発例」および第4.1.2項「New Browsersレポート用のAnalyticsジョブの開発」を参照してください。
新しいMapper
クラスを作成します。
Mapper
クラスは、入力データを処理するビジネス・ロジックをカプセル化します。すべての入力Beanごとに、マッパー・クラスはBeanクラス(手順3で作成済)の新しいインスタンスを作成し、処理されたデータを新しく作成されたインスタンスに格納します。マッパー・クラスの出力はAnalyticsフレームワークによって収集され、処理されてから、最終的に指定の出力場所に書き込まれます。
新しいマッパー・クラスは、フレームワークで提供される事前定義済のクラスを拡張したものです。実装の詳細は、次の項を参照してください。
プロセッサを構成します。
新しくコーディングしたBeanクラスとマッパー・クラスをAnalyticsフレームワークに統合するには、それらを既存のプロセッサ構成ファイル(.xml
ファイル)に追加する必要があります。
図4-1は、Analytics-Hadoopジョブ・フレームワークに統合されたカスタム・マッパーを使用したジョブの実行フローを示しています。
図4-1 analytics hadoopジョブ・フレームワークに統合されたカスタム・マッパーを使用したジョブの実行フロー・チャート
Mapフェーズでは、プロセッサが入力場所からデータを読み取ります。このデータはカスタム・マッパーに渡されます。カスタム・マッパーは、すべての入力BeanをカスタムBeanに変換します。
Reduceフェーズでは、カスタム・マッパーから収集されたデータは、処理されてから出力場所に書き込まれます。出力場所のコンテンツには、カスタムBeanが含まれます。この集約データは、データベース・インジェクション・プロセッサによってデータベースに格納されます。
この項の内容は、次のとおりです。
NewBrowsersレポートでは、レポート期間内に訪問者が指定のサイトのページ・ビューにアクセスするときに使用したブラウザを識別します。
ブラウザのカウントは、各ブラウザのセッションのカウントです。セッションの集計値を単純に合計します。ユーザーが選択できる有効なすべての時間範囲について合計を集計すると、集計値があまりに多くなりすぎるので、日単位の合計に焦点を当てます。
データの集計は、単一のMap-Reduceフェーズで行います。(1) 開始点はセッション・データ(SesData
場所)です。このデータを使用して、SesProcessed
場所内のL3NewBrowserBean
オブジェクトとして格納される、中間/未圧縮のRAWデータを生成します。(2) SessionProcessor
プロセッサがSessionBean
オブジェクトを使用してL3NewBrowserBean
オブジェクトを作成します。このオブジェクトには、データベースに挿入できる集計データが格納されます。図4-2は、この実装を示しています。
SesData
場所には、すべてのセッションのすべてのデータがあります。このデータを、レポート・データを生成するための開始点として使用します。そのデータを追加または変更する必要はありません。既存のSessionBean
オブジェクトを使用できます。
SessionProcessor
プロセッサを拡張して、siteid
、dateid
、browserid
の組合せ(siteid/dateid/browserid組合せ)ごとに、新しいL3NewBrowserBean
オブジェクトを作成します。このオブジェクトは、SessionProcessorプロセッサによってSesinjected場所に格納されます。
SessionInjection
プロセッサがデータベースにデータを挿入します。新しいBeanは必要ありませんが、データベースに正しく挿入するには、L3
Bean (SessionProcessor
で作成済)のフィールドをアグリゲータで適切に注釈付けする必要があります。
注意: アグリゲータは、集計可能なBeanのフィールドにタグを付けるためのJava注釈です。
|
第4.1項「Analyticsジョブの作成の概要」に記載されている一般的な手順に従って、Analyticsジョブを開発します。
第4.1.2.5項「手順5: プロセッサ定義へのBeanおよびマッパーの追加」
NewBrowsersレポートではセッションのデータを集計するため、入力場所はsesdata
場所です。
データを格納するには、新しい表を追加して事前集計済のL3
データを格納する必要があります。analytics
ユーザーとして次のSQL文を実行します。
CREATE TABLE L3_DATEXSITEXNEWBROWSERXCOUNT ( DATEID NUMBER NOT NULL , SITEID NUMBER(6) , BROWSERID NUMBER , COUNT NUMBER);commit;
このレポートでは、1つのBeanが必要です。
L3NewBrowserBean
: このクラスは、データベース内のL3
表にマップされます。L3NewBrowserBean
は、ブラウザ・アクセスの集計カウントを格納するために使用されます。このBeanのコンテンツは、L3_DATEXSITEXNEWBROWSERXCOUNT
表に注入されます。
L3NewBrowserBean
Beanクラスを作成します。サンプル・コードは、第4.1.2.3項「L3NewBrowserBean.java」の例を参照してください。
例4-1 L3NewBrowserBean.java
package com.fatwire.analytics.domain.l3;
import javax.persistence.AttributeOverride;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import com.fatwire.analytics.domain.AbstractL3Bean;
import com.fatwire.analytics.domain.annotation.Aggregate;
import com.fatwire.analytics.domain.annotation.SumAggregator;
import com.fatwire.analytics.domain.key.DateSiteEntityKey;
/**
* this class represents entries in the L3_dateXsiteXnewbrowserXcount table
*/
@Entity(name="L3_dateXsiteXnewbrowserXcount")
@AttributeOverride(name = "key.firstEntity", column = @Column(name = "BROWSERID", nullable = false, insertable = false, updatable = false))
public class L3NewBrowserBean extends AbstractL3Bean<DateSiteEntityKey> {
private static final long serialVersionUID = 1L;
/** the primary key definition of the object/table */
@Id
private DateSiteEntityKey key = new DateSiteEntityKey();
/** the count value for the entity */
@Aggregate(aggregatorClass = SumAggregator.class)
private Long count;
/** overwrite constructor to set the hadoop keys
public L3NewBrowserBean() {
keys = new String[]{"dateid", "siteid", "browserid", "type"};
}
public Long getBrowserid() {
return key.getFirstEntity();
}
public void setBrowserid(Long browserid) {
key.setFirstEntity(browserid);
}
@Transient
public DateSiteEntityKey getKey() {
return key;
}
public void setKey(DateSiteEntityKey key) {
this.key = key;
}
public Long getSiteid() {
return key.getSiteid();
}
public void setSiteid(Long siteid) {
key.setSiteid(siteid);
}
public Long getDateid() {
return key.getDateid();
}
public void setDateid(Long dateid) {
key.setDateid(dateid);
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
}
L3NewBrowserBean
のコードは、次のように分析されます。
行16: com.fatwire.analytics.domain.AbstractL3Bean
クラスを拡張します。
プライベート・メンバー変数を宣言します。
key
: 主キー
count
: セッション数
@Entity
注釈によってこのクラスが永続エンティティとして指定され、JPAサービスで使用できるようになります(行14)。name属性の値は、エンティティのマップ先のデータベース表の名前です。
@Attribute
注釈(行15)により、L3_DATEXSITEXNEWBROWSERXCOUNT
表は、BROWSERID
列にマップされる永続エンティティのkey.firstEntity
属性を持ちます。
L3
複数列主キーの実装であるDateSiteEntity
キーを使用します(行20)。
注意:
ここで、Entityは数値エンティティを表します。 実装の選択は、 |
@Id
注釈(行19)を使用して、DateSiteEntity
キー・メンバー変数をエンティティの主キーとして指定します。
@Aggregate注釈を使用して、countフィールドにSumAggregator
の注釈を付けます。SumAggregator
注釈を使用して、各ブラウザのセッション数が合計されます。(行22)
Beanクラスのどの複数のインスタンスを集計するかに基づいて、コンストラクタでキーを指定します(行25-26)。type
は、Beanクラスの名前を表します。
このレポートでは、L3NewBrowserMapper (L3NewBrowserMapper.java)
という1つのマッパー・クラスが必要です。
例4-2 L3NewBrowserMapper.java
package com.fatwire.analytics.report.mapper;
import java.io.IOException;
import org.apache.log4j.Logger;
import com.fatwire.analytics.domain.SessionBean;
import com.fatwire.analytics.domain.l3.L3NewBrowserBean;
import com.fatwire.analytics.mapreduce.AbstractAnalyticsMapper;
import com.fatwire.analytics.mapreduce.AnalyticsOutputCollector;
/**
* L3 mapper on New Browser
*/
public class L3NewBrowserMapper extends AbstractAnalyticsMapper<SessionBean, L3NewBrowserBean> {
/** initialize logging */
private static final Logger logger = Logger.getLogger(L3NewBrowserMapper.class);
@Override
public void map(SessionBean input, AnalyticsOutputCollector<L3NewBrowserBean> outputCollector) throws IOException {
if(logger.isTraceEnabled()) {
logger.trace("mapping input bean '"+ input +"' to L3NewBrowserBean");
}
L3NewBrowserBean output = new L3NewBrowserBean();
output.setDateid(input.getDateid());
output.setSiteid(input.getSiteid());
output.setBrowserid(input.getBrowserid());
output.setCount(1L);
// collect the output bean
outputCollector.collect(output);
}
}
L3NewBrowserMapper
クラスのコードは、次のように分析されます。
L3NewBrowserMapper
クラスはAbstractAnalyticsMapper
クラスを拡張して(行11)、mapメソッドをオーバーライドします(行16-17)。
mapメソッドでは、SessionBean
からL3NewBrowserBean
の値を設定することによって、すべての入力SessionBean
がL3NewBrowserBean
に変換されます(行19-25)。
L3NewBrowserBean
のcountプロパティは、すべての入力Beanで1L
に設定されます(行26)。
作成されたすべてのL3NewBrowserBean
は、出力コレクタ(AnalyticsOutputCollector
)によって収集されます(行29)。
デバッグ文を追加します(行19)。
新しくコーディングしたBeanクラスとマッパー・クラスを有効にするには、それらを既存のプロセッサ定義に追加する必要があります。マッパーの追加は、対応するプロセッサ・フォルダ内のspring-mapper.xml
ファイルにマッパーを追加することによって行います。
この演習では、次のものを構成します。
L3NewBrowserMapper
L3NewBrowserBean
Beanおよびマッパーをプロセッサ定義に追加するには:
L3NewBrowserMapper
を構成します。
processors/sesprocessor/spring-mapper.xml
ファイルをテキスト・エディタで開きます。
bean class行(太字で表示)をspring- mapper.xml
ファイルに追加します。
<bean id="AnalyticsMapperConfigBean" class="java.util.ArrayList"> <constructor-arg> <list> <bean id="clickstreamMapper" class="com.fatwire.analytics.report.mapper.L3ClickstreamMapper"/> <bean id="newBrowserMapper" class="com.fatwire.analytics.report.mapper.L3NewBrowserMapper"/> <bean id="osMapper" class="com.fatwire.analytics.report.mapper.L3OperatingsystemMapper"/> <bean id="sessionEntryidMapper" class="com.fatwire.analytics.report.mapper.L3SessionEntryMapper"/> <bean id="sessionExitidMapper" class="com.fatwire.analytics.report.mapper.L3SessionExitMapper"/> <bean id="ipMapper" class="com.fatwire.analytics.report.mapper.L3IpMapper"/> <bean id="hostnameMapper" class="com.fatwire.analytics.report.mapper.L3HostnameMapper"/> <bean id="jsMapper" class="com.fatwire.analytics.report.mapper.L3JsMapper"/> <bean id="searchengineMapper" class="com.fatwire.analytics.report.mapper.L3SearchengineMapper"/> <bean id="refererMapper" class="com.fatwire.analytics.report.mapper.L3RefererMapper"/> <bean id="screenresMapper" class="com.fatwire.analytics.report.mapper.L3ScreenresMapper"/> <bean id="sessionQuantilMapper" class="com.fatwire.analytics.report.mapper.L3SessionQuantilMapper"/> <bean id="objectDurationMapper" class="com.fatwire.analytics.report.mapper.L3ObjectDurationMapper"/> <bean id="engageMapper" class="com.fatwire.analytics.report.mapper.L3EngageMapper"/> </list> </constructor-arg> </bean>
L3NewBrowserBeanを構成します。
processor/sesprocessor/spring-combiner_reducer.xmlファイルをテキスト・エディタで開きます。
entry key行(太字で表示)をspring- combiner_reducer.xmlファイルに追加します。
<util:map id="AnalyticsCombinerReducerConfigBean" map-class="java.util.HashMap">
<entry key="com.fatwire.analytics.domain.l3.L3ClickstreamBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3OperatingsystemBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3NewBrowserBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionEntryBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionExitBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3IpBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3HostnameBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3JsBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SearchengineBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3RefererBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3ScreenresBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionQuantilBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3ObjectDurationBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecSegBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecSegObjBean" value-ref="analyticsBeanReducer"/>
</util:map>
次の手順を実行して、データベース・インジェクションを構成します。
processors/sesinjection/spring-combiner.xml
ファイルをテキスト・エディタで開きます。
entry key行(太字で表示)をspring-combiner.xmlスニペットに追加します。
<util:map id="AnalyticsCombinerConfigBean" map-class="java.util.HashMap">
<entry key="com.fatwire.analytics.domain.l3.L3ClickstreamBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3NewBrowserBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3OperatingsystemBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SearchengineBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionEntryBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionExitBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3IpBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3HostnameBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3JsBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SearchengineBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3RefererBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3ScreenresBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionQuantilBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3ObjectDurationBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecSegBean" value-ref="analyticsBeanReducer"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecSegObjBean" value-ref="analyticsBeanReducer"/>
</util:map>
processors/sesinjection/spring-reducer.xml
ファイルをテキスト・エディタで開きます。
entry key行(太字で表示)をspring-reducer.xml
スニペットに追加します。
<util:map id="AnalyticsReducerConfigBean" map-class="java.util.HashMap">
<entry key="com.fatwire.analytics.domain.l3.L3ClickstreamBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3NewBrowserBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3OperatingsystemBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3SearchengineBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionEntryBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionExitBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3IpBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3HostnameBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3JsBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3SearchengineBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3RefererBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3ScreenresBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3SessionQuantilBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3ObjectDurationBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecSegBean" value-ref="databaseInjection"/>
<entry key="com.fatwire.analytics.domain.l3.L3EngageRecSegObjBean" value-ref="databaseInjection"/>
</util:map>
新しいAnalyticsジョブを開発したら、jarファイル(hadoop-jobs.jar
)を再作成することによって、開発した新しいジョブと既存のhadoop-jobsコンポーネントを統合します。新しいhadoop-jobs.jar
ファイルをhadoop-jobsディレクトリにコピーします。jar
ファイルを再作成することによって、hadoop-jobsコンポーネントは、この演習で開発した新しいAnalyticsジョブでキャプチャされたデータを処理できるようになります。
新しいAnalyticsジョブと既存のhadoop-jobsコンポーネントを統合するには:
hadoop-jobs.jar
ファイルを作成します。
hadoop-jobsインストール・ディレクトリにある既存のhadoop-jobs.jar
ファイルを、作成したばかりのjarファイルに置き換えます。次に、runコマンドが使用する実際のjarである._tmp_hadoop-jobs.jar
ファイルを削除します。このjarを削除することによって、runコマンドはこれを新しいhadoop-jobs.jar
から再構築します。
パラメータ(第2章「演習1: データ・キャプチャ用の新規パラメータの追加」で追加済)でキャプチャされたデータを処理するために、hadoop-jobsコンポーネントを実行します。
このチュートリアルの第5章「演習4: 表示するレポートの作成および準備」では、レポート・インタフェースで新しいレポートを作成する方法を、順を追って説明します。例として、ブラウザごとの訪問者数を表示するNewBrowsersレポートを作成します。
注意: このチュートリアルで作成するNewBrowsersレポートは、Analyticsインストールに含まれているデフォルトのBrowsersレポートを再現したものです。このチュートリアルでは、構成するBrowsersレポートのxmlファイルおよびレポート名に加えて、Beanクラスおよびマッパー・クラスの名前も、デフォルトのBrowsersレポートを上書きしないように名前が変更されています。 |