fluentpluginbigquery メインで触る人が転々と移り変わって、今私が良く弄っている。 いかつい 複雑 総ダウンロード数が多い 開発する上で知見をいくつか獲得したので、その辺を元に話を。 そういえば、さっきv1.2.0 の話でretry 方法の改善案が上がってて期 待している。 現在、 r e t r y _ s t a t e _ c r e a t e という内部API を読んで強制中断して いるケースがある。
プラグイン開発者がやるべきこと 独自のパース処理やフォーマット処理ではなくplugin helper を利用 する f o r m a t t e r _ c o n f i g = c o n f . e l e m e n t s ( " f o r m a t " ) [ 0 ] @ f o r m a t t e r = f o r m a t t e r _ c r e a t e ( u s a g e : ' o u t _ b i g q u e r y _ f o r _ l o a d ' , c o n f : f o r m a t t e r _ c o n f i g , d e f a u l t _ t y p e : ' j s o n ' ) d e f f o r m a t ( t a g , t i m e , r e c o r d ) @ f o r m a t t e r . f o r m a t ( t a g , t i m e , r o w ) e n d
chunk with metadata v1.0 からmetadata をキーにしてbuffer chunk を分けられる様になっ た。 metadata とは以下のものを差す。 tag time record のproperty そして、キーに利用したメタデータはconfig 上でplaceholder として 利用可能になる。
fluentpluginbigquery の例 < m a t c h b q . { h t t p _ l o g s , a p p _ l o g s } > @ t y p e b i g q u e r y t a b l e $ { t a g [ 1 ] } $ % Y % m % d s c h e m a _ p a t h s c h e m a s / $ { t a g [ 1 ] } . j s o n < b u f f e r t a g , t i m e > t i m e k e y 1 d < / b u f f e r > < / m a t c h >
プラグイン側の対応方法 p l a c e h o l d e r _ v a l i d a t e ! と e x t r a c t _ p l a c e h o l d e r s を利用する p l a c e h o l d e r _ p a r a m s = " p r o j e c t = # { @ p r o j e c t } / d a t a s e t = # { @ d a t a s e t } / . . . 省略" p l a c e h o l d e r _ v a l i d a t e ! ( : b i g q u e r y , p l a c e h o l d e r _ p a r a m s ) p r o j e c t = e x t r a c t _ p l a c e h o l d e r s ( @ p r o j e c t , c h u n k . m e t a d a t a ) d a t a s e t = e x t r a c t _ p l a c e h o l d e r s ( @ d a t a s e t , c h u n k . m e t a d a t a )