11. 自動で最適化された一連の処理が実行される
11
select logistic_reg( 'fasttrack', 'PREDICTIVEMAINT.readingssample', 'asset_status', 'temperature, powerfactor,
airflow, pressure, vibration' ) ;
SELECT table_to_blob("asset_status","temperature","powerfactor","airflow","pressure","vibration" USING
PARAMETERS blob_name='fasttrack') OVER(PARTITION BEST) FROM (SELECT * FROM (SELECT *
FROM (SELECT "asset_status","temperature","powerfactor","airflow","pressure","vibration" FROM
PREDICTIVEMAINT.readingssample WHERE (NOT "asset_status" IS NULL AND NOT "temperature" IS NULL AND NOT
"powerfactor" IS NULL AND NOT "airflow" IS NULL AND NOT "pressure" IS NULL AND NOT "vibration" IS NULL) AND
("asset_status"=0 OR "asset_status"=1)) as filtered1 WHERE NOT "temperature"='inf' AND NOT "powerfactor"='inf'
AND NOT "airflow"='inf' AND NOT "pressure"='inf' AND NOT "vibration"='inf') as filtered2 WHERE NOT
"temperature"='-inf' AND NOT "powerfactor"='-inf' AND NOT "airflow"='-inf' AND NOT "pressure"='-inf' AND NOT
"vibration"='-inf') as filtered3;
(略)
SELECT public.reg_final_newton(xTransAz, xTransAx, deviance USING PARAMETERS
model_name='fasttrack', family=2, epsilon=1e-06, theLastIteration='false',
iterationNumber=-1, dimension=6) OVER() FROM (SELECT
public.reg_transition_newton( USING PARAMETERS model_name='fasttrack', family=2,
iterationNumber=-1, dimension=6, nodes='"v_testdrive_node0001";8')) AS udctf1;
(略)
SELECT public.reg_write_model('temperature','powerfactor','airflow','pressure','vibration' USING PARAMETERS
model_name='fasttrack', family=2, dimension=6, iterations=21, skippedRows=71,
processedRows=982, call='logistic_reg(''fasttrack'', ''PREDICTIVEMAINT.readingssample'', ''"asset_status"'',
''temperature, powerfactor, airflow, pressure, vibration''
SELECT remove_blob(USING PARAMETERS blob_name='fasttrack');
手動実行SQL
自動実行SQL
29. サマリー情報表示SQL
29
=> SELECT CASE
WHEN asset_status = 1
THEN 'DOWN'
WHEN asset_status = 0
AND r.riskscore > 0.1
THEN 'ATRISK'
ELSE 'OK'
END AS STATUS
,COUNT(*)
FROM PREDICTIVEMAINT.riskscores r
WHERE r.unixtimestamp = (
SELECT unixtimestamp
FROM PREDICTIVEMAINT.riskscores
GROUP BY unixtimestamp
ORDER BY unixtimestamp DESC
offset 1 limit 1
)
GROUP BY STATUS;
status | COUNT
--------+-------
OK | 19926
ATRISK | 33
DOWN | 41
(3 rows)
31. タワーマップ情報表示SQL
31
SELECT ROUND(a.latitude_degrees, 1) AS latitude
,ROUND(a.longitude_degrees, 1) AS longitude
,r.asset_status
,a.city_name AS city
,a.prov_state_tp_cd AS stateprov
,COUNT(*) AS tooltip_content
,TO_CHAR(MAX(CASE
WHEN
r.asset_status = 1
THEN
1.0
ELSE r.riskscore
END), 'FM0.0999')
AS riskvalue
FROM PREDICTIVEMAINT.riskscores r
LEFT JOIN PREDICTIVEMAINT.assetlocation al ON al.asset_id
= r.asset_id
LEFT JOIN PREDICTIVEMAINT.orgname o ON o.org_name_id =
al.asset_owner
LEFT JOIN PREDICTIVEMAINT.address a ON a.address_id =
o.address_id
WHERE (
(
a.latitude_degrees BETWEEN 25
AND 49
AND a.longitude_degrees
BETWEEN - 125
AND - 67
)
OR a.prov_state_tp_cd IN (
'AK'
,'HI'
)
)
AND r.unixtimestamp = (
SELECT unixtimestamp
FROM PREDICTIVEMAINT.riskscores
GROUP BY unixtimestamp
ORDER BY unixtimestamp DESC offset 1
limit 1
)
GROUP BY latitude
,longitude
,r.asset_status
,a.city_name
,a.prov_state_tp_cd
ORDER BY riskvalue DESC;
32. タワーマップ情報表示SQL
32
latitude | longitude | asset_status | city | stateprov | tooltip_content | riskvalue
----------+-----------+--------------+-----------------------+-----------+-----------------+-----------
34 | -118.5 | 1 | LOS ANGELES | CA | 1 | 1.0
36 | -86.8 | 1 | BRENTWOOD | TN | 1 | 1.0
34 | -84.2 | 1 | NORCROSS | GA | 1 | 1.0
41.2 | -96.1 | 1 | OMAHA | NE | 1 | 1.0
41.1 | -85.1 | 1 | FORT WAYNE | IN | 1 | 1.0
40.7 | -74 | 1 | NEW YORK | NY | 2 | 1.0
40 | -83.1 | 1 | COLUMBUS | OH | 1 | 1.0
39.7 | -75.6 | 1 | NEW CASTLE | DE | 1 | 1.0
45 | -93.3 | 1 | MINNEAPOLIS | MN | 1 | 1.0
40.3 | -74.1 | 1 | RED BANK | NJ | 1 | 1.0
45.5 | -122.7 | 1 | PORTLAND | OR | 1 | 1.0
37.4 | -121.9 | 1 | SAN JOSE | CA | 1 | 1.0
41.6 | -85.8 | 1 | GOSHEN | IN | 1 | 1.0
40.8 | -74 | 1 | NEW YORK | NY | 2 | 1.0
40 | -75.4 | 1 | RADNOR | PA | 1 | 1.0
43 | -85.7 | 1 | GRAND RAPIDS | MI | 1 | 1.0
41.1 | -76.2 | 1 | BERWICK | PA | 1 | 1.0
39.6 | -104.9 | 1 | GREENWOOD VILLAGE | CO | 1 | 1.0
25.8 | -80.2 | 1 | MIAMI | FL | 1 | 1.0
47.6 | -122.3 | 1 | SEATTLE | WA | 1 | 1.0
40.7 | -73.9 | 1 | NEWARK | NJ | 1 | 1.0
・・・
36. シミュレーター概要
パラメーター 概要
冷却塔数
Towers to launch
冷却塔の数を指定。タワーが多いほど、繰り返しの度にVerticaが取り込むデータを多
くするシミュレーションが可能。例えば、タワーごとに5つのセンサーを使用して5万
のタワーを打ち上げると、繰り返しごとに25万回の読み取りが行われる
測定値データの取り込み間隔(実際の秒数)
Real seconds between readings
タワーの測定値がどれくらいの間隔で取得されるかを制御。シミュレーションでは日、
週、および月にスケールアウトされた結果が表示される
シミュレーション終了前の測定値読み取り数
Readings to take before quitting
シミュレーション中に実行される反復回数。 たとえば、3秒ごとに測定値を取り込む
とすると、この値を1,200とすると、シミュレーションは1時間実行される
タワー故障の確率
Probability of a tower failure
冷却塔の動作が不安定となり、最終的に故障するまでの傾向を制御。 数値が大きい
ほど、タワーが劣化し始める可能性が高くなる
自動メンテナンスの遅延
Automatic maintenance delay
タワーが不安定になり始めると、ランダムな間隔で自動でトリガーされるメンテナン
スイベントをコントロール。これがいつ発生するかは正確には制御できないが、係数
を高い値に設定すると、メンテナンスイベントまでに時間がかかることになり、よっ
て、より多くのタワーが壊れることになる。これを低い値に設定すると、メンテナン
スイベントが平均してより速く発生する
一定の読み取り数ごとのモデルのリフレッシュ間
隔
Model refresh after every # of readings
FastTrackシミュレーターが実行されている間、ロジスティック回帰(予測)モデル
は、ここで指定した読み取りレコード数ごとに更新される
表示リフレッシュ間隔(秒)
Display refresh (in seconds)
指定された間隔でデータのページリフレッシュを制御
36
46. ボストン市街の道路の「穴」
Block Pothole Density:
各ブロックの穴の密度を計算
46
potholes ph blocks_idx roads rd
Spatial Join
[ph.id, block_id]
Spatial Join
[rd.id, block_id]
Group By
[block_id, count(ph.id)]
Group By
[block_id, count(rd.id)]
Join
[block_id, count(ph.id)/count(rd.id)]
Query Result
x
x
x
x pothole road
Block Pothole Density = 3/2
# potholes
# roads
補修すべきボストン市街の道路を分析する
60. 3. SQLを実行
結果をテキストに出力し、ツールにInput
-- Final query to find the number of potholes per road segment in every block
SELECT ph.block_gid, round(ph.potholes/rd.road_segs, 2.0) ph_per_rseg
FROM
-- Potholes per block
(SELECT block_gid, count(ph_gid) potholes
FROM (SELECT stv_intersect(gid, geom using parameters index=‘blocks_idx’)
OVER(PARTITION BEST) AS (ph_gid, block_gid) FROM boston_potholes) t
GROUP BY block_gid) ph,
-- Road segments per block
(SELECT block_gid, count(distinct road_gid) road_segs
FROM (SELECT stv_intersect(road_gid, road_pt using parameters
index='blocks_idx')
OVER(partition by road_gid) AS (road_gid, block_gid)
FROM (SELECT gid road_gid, stv_linestringpoint(geom)
over(partition by gid) AS road_pt FROM eotroads_35) t) t
GROUP BY block_gid) rd
WHERE ph.block_gid = rd.block_gid
ORDER BY ph_per_rseg DESC;
60