データ転送ツールのEmbulkは大量データの投入に威力を発揮しますが、filter pluginを組み合わせることによってかなり複雑な処理も実現できるため、yamlで書けるETLツールとしても優秀です。 今回RDBMSで正規化されたテーブルにデータを投入する必要ができたので、unpivot処理を行うpluginを書きましたので公開しておきます。 github: embulk-filter-unpivot インストール
merge_direct モードで発行されるクエリは、抜粋するとこんな感じになる。実際にはプリペアドステートメントを作成した後でパラメータを設定してガシガシ回しているみたいだし、このクエリがそのまま発行されている訳ではない。 INSERT INTO ramen ( name, location, created_at, updated_at) VALUES ( 'しじみラーメン和歌山', '青森', '2015-07-19', '2015-07-19' ) ON DUPLICATE KEY UPDATE name = VALUES(name), location = VALUES(location), created_at = VALUES(created_at), updated_at = VALUES(updated_at) ; このクエリを次のように書き換えられれば、この悩みは解決し
結論 SQL で WITH mysql_native_password を使ってパスワードを定義する。 具体例 mysql> ALTER USER 'YOUR_USERNAME'@'YOUR_HOSTNAME' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD'; 補足 Embulk の MySQL プラグインを使ったら遭遇しました*1 DBeaver を使った場合も同様でした すなわち JDBC で起きるということでしょう 上記コマンドで ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 50, found 49. Created with MySQL 80012, now running 80013. Please use mysql_upgr
Embulkにはfilterプラグインという仕組みがあり、これを自作することで、Embulkで入力およびパースした結果を色々と加工することができます。例えば、「すべてのログにホスト名を追加する」といった、ログの種類によらない共通処理を定義するのに向いた仕組みです。 ただ、いろいろ試してみた結果、以前の記事で取り上げたような特殊なログを処理する場合でも、 パース処理の中で、一度完成したらほとんど直す必要がない基本的な部分 → parserプラグイン 試行錯誤しながら、何度か直す必要がある部分 → filterプラグイン と使い分けた方が、コードの見通しが良くなりました。個人的には、parserプラグインと同じくらいfilterプラグインも自作することが多そうなので、作り方をメモしておきます。 特定カラムに含まれる文字列を置換するfilterプラグイン 一例として、以下のようなCSVファイルを
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く