大規模データ・セットでの定期推定のテスト

このトピックでは、大規模データ・セットで定期推定をテストするためのガイドラインを示します。

大規模データ・セットで定期推定を実行する前に、おおよその設備数および推定期間を把握しておくことが重要です。これは、計量コンポーネントの「最新測定日時」を確認することで、かなり迅速に測定できます。次のサンプル問合せは、指定された処理日からの月数ごとに計量コンポーネントの数を提供します。最新の連続する測定日時は次のとおりです。

select count(*)
, round((to_date(:processDateTime,'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm)/31,0) MONTHS
from d1_measr_comp mc
group by round((to_date(:processDateTime,'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm)/31,0)
order by 2
;

次に、処理する特定の「最新測定日時」の計量コンポーネントの数をスレッド別に示す、より複雑な問合せを示します。作業をさらに行うことで、定期推定用に構成され、かつ計量コンポーネントが実際にその構成に基づいて推定する準備が整っている、取付済設備および計量コンポーネントのみが示されます。

このパラメータは次のとおりです。
  • threads: 1を入力して、結果がスレッドに分割されないようにします

  • processDateTime: システム日付を使用する場合は空白のままにし、それ以外の場合は日時をYYYY-MM-DD-HH24.MI.SSの形式で指定します

with threads as (
 select rownum thread_nbr
 , lpad(round((rownum - 1) * (rpad('9',12,'9')+1)/:threads,0),12,'0') low_id
 , lpad(round(rownum * ((rpad('9',12,'9')+1)/:threads),0)-1,12,'0') high_id
 from dual
 connect by rownum <= :threads
)
select /*+ parallel */ threads.thread_nbr
, threads.low_Id
, threads.high_id
, nvl(mc.adj_latest_msrmt_dttm,mc.latest_msrmt_dttm) LATEST_MSRMT_DTTM
, count(*) MC_COUNT
from threads
inner join d1_dvc dvc
 on dvc.d1_device_id between threads.low_id and threads.high_id
inner join d1_dvc_cfg dc
 on dc.d1_device_id = dvc.d1_device_id
inner join d1_install_evt ie
 on ie.device_config_id = dc.device_config_id
 and ie.d1_install_dttm < sysdate
 and (ie.d1_removal_dttm is null or ie.d1_removal_dttm >= sysdate)
inner join d1_measr_comp mc
 on mc.device_config_id = dc.device_config_id
inner join d1_measr_comp_type mct
 on mct.measr_comp_type_cd = mc.measr_comp_type_cd
 and hrs_wait_before_est > 0
where (to_date(nvl(:processDateTime,sysdate),'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm) * 24 > mct.hrs_wait_before_est
group by threads.thread_nbr
, threads.low_Id
, threads.high_id
, nvl(mc.adj_latest_msrmt_dttm,mc.latest_msrmt_dttm)
order by 1, 4
;