Perl言語のシンプルな表関数
この例では、次のファイル名を使用する: 'TimeSplitMany.pm
コード
この例のコードでは、カンマで区切られた文字列(例えば "12:30:55,4:20:18")で表された時刻を可変個数受け取るテーブル関数を作成している。 この関数は、各時間表現に対して1行を出力する。各行は、時間を構成要素に分割して表示する。
sub
_runUdtf()function
でAEのI/Oを制御しなければならない。package TimeSplitMany;
use nzae::Ae;
use strict;
use autodie;
our @ISA = qw(nzae::Ae);
my $ae = TimeSplitMany->new();
$ae->run();
sub runUdtf(@)
{
my $self = shift;
while ($self->getNext())
{
my @row = $self->getInputRow();
if ( scalar( @row ) > 0 )
{
my @timeArray = split(/,/, $row[0]);
if ( scalar( @timeArray ) > 0 )
{
for (my $i = 0; $i <= $#timeArray; $i++)
{
my @time = split(/:/, $timeArray[$i]);
if ( scalar( @time ) > 0 )
{
$self->output( @time );
}
else
{
croak(nzae::Exceptions::AeInternalError->new("Error in
splitting input "));
}
}
}
else
{
croak(nzae::Exceptions::AeInternalError->new("Error in input
"));
}
}
else
{
croak(nzae::Exceptions::AeInternalError->new("Error fetching
row"));
}
}
}
1;
デプロイメント
スクリプトをデプロイする:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy TimeSplitMany.pm
登録
表機能 AE を登録する:
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language perl --version 3 \
--template udtf --exe TimeSplitMany.pm \
--sig "time_split_many(varchar(1000))" \
--return "table(hour varchar(2), minute varchar(2), second varchar(2))"
実行中
nzsqlでクエリを実行する:
SELECT * FROM TABLE WITH FINAL (time_split_many('13:22:47,22:12:45,03:22:09'));
HOUR | MINUTE | SECOND
-----------+--------------+--------
13 | 22 | 47
22 | 12 | 45
03 | 22 | 09
(3 rows)