DATETIME型で集約関数max、minは使えるのか

69 views
Skip to first unread message

ペガス

unread,
Jan 22, 2013, 12:10:35 AM1/22/13
to us...@asakusafw.com
お世話になっております、ペガスです。

DMDL集計モデルの集約関数についての質問になりますが、
max、minはDATETIME型に対して使うことができるのでしょうか。

上記のような処理を実施したところ、
以下に示す警告が出た後にエラーが発生していました。

***警告**
13/01/22 13:45:48 WARN mapred.LocalJobRunner: job_local_0001
java.lang.NullPointerException
        at com.asakusafw.runtime.value.DateTimeOption.get(DateTimeOption.java:58)
        at com.example.batchapp.logaop.vobject.stage0004.MapOutputFragment1.add(MapOutputFragment1.java:30)
        at com.example.batchapp.logaop.vobject.stage0004.MapOutputFragment1.add(MapOutputFragment1.java:9)
        at com.example.batchapp.logaop.vobject.stage0004.MapFragment2.add(MapFragment2.java:25)
        at com.example.batchapp.logaop.vobject.stage0004.StageMapper2.run(StageMapper2.java:32)
        at com.asakusafw.runtime.stage.input.StageInputMapper.run(StageInputMapper.java:51)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
        at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:210)

***エラー***
2013/01/22 13:45:49 ERROR [YS-CORE-E04001] Job "stage0004" execution was failed: batchId=logaop, flowId=vobject, executionId=f3031fb6-9876-41cf-b6d8-f488356f9ac9, phase=main, jobId=stage0004, serviceId=hadoop
com.asakusafw.yaess.basic.ExitCodeException: Unexpected exit code from Hadoop job: code=1 (batch=logaop, flow=vobject, phase=main, stage=stage0004, exection=f3031fb6-9876-41cf-b6d8-f488356f9ac9)
        at com.asakusafw.yaess.basic.ProcessHadoopScriptHandler.execute0(ProcessHadoopScriptHandler.java:217) ~[asakusa-yaess-core-0.2.6.jar:na]
        at com.asakusafw.yaess.basic.ProcessHadoopScriptHandler.execute(ProcessHadoopScriptHandler.java:163) ~[asakusa-yaess-core-0.2.6.jar:na]
        at com.asakusafw.yaess.basic.ProcessHadoopScriptHandler.execute(ProcessHadoopScriptHandler.java:75) ~[asakusa-yaess-core-0.2.6.jar:na]
        at com.asakusafw.yaess.core.task.ScriptJob.execute(ScriptJob.java:59) ~[asakusa-yaess-core-0.2.6.jar:na]
        at com.asakusafw.yaess.core.Job.launch(Job.java:53) ~[asakusa-yaess-core-0.2.6.jar:na]
        at com.asakusafw.yaess.basic.JobExecutor$Executing$1.call(JobExecutor.java:101) [asakusa-yaess-core-0.2.6.jar:na]
        at com.asakusafw.yaess.basic.JobExecutor$Executing$1.call(JobExecutor.java:97) [asakusa-yaess-core-0.2.6.jar:na]
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.6.0_24]
        at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.6.0_24]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.6.0_24]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.6.0_24]
        at java.lang.Thread.run(Thread.java:679) [na:1.6.0_24]

以上、ご確認の程よろしくお願い致します。

KAWAGUCHI, Akira

unread,
Jan 22, 2013, 6:33:23 AM1/22/13
to us...@asakusafw.com
かわぐちです。

> max、minはDATETIME型に対して使うことができるのでしょうか。

DATETIME型にもこれらの集計関数は使うことが出来ますが、
集計関数のmax,minやsumはレコードの値にnullが含まれると
例外を送出するようになっています。
詳しくは以下を参照してください。

このような場合、集計演算子を適用する前に
分岐演算子などうぃ使ってnullを含むレコードを
除外するなどの方法で対応することができると思います。


2013年1月22日火曜日 14時10分35秒 UTC+9 ペガス:

ペガス

unread,
Jan 22, 2013, 6:56:32 PM1/22/13
to us...@asakusafw.com
かわぐちさん、ご指導ありがとうございます。

確かに集計レコード中にNULLデータがありましたので、
それを除去するようなロジックを組み込んでみます。

2013年1月22日火曜日 20時33分23秒 UTC+9 KAWAGUCHI, Akira:
Reply all
Reply to author
Forward
0 new messages