Datasetのスケジュール以外でのデータ挿入について

現在、クラウド上のビックデータのコネクターを使用してDatasetに連携しています。

 

Datasetの設定で毎日自動実行するようにスケジュールして日次でデータを取り込み始めているのですが、

毎日取得しているデータとは別にデータ(過去データ等)を挿入したいときに、

日次で取り込むように設定したQueryを別のQueryに書き換えて実行し、

そのあと日次で取り込むQueryに書き換え直すという作業をしなくてはなりません。

 

現在日次で動作させているQueryをわざわざ書き換えるというのは手間が発生するとともに、

書き換えるという作業自体がエラーもしくは不適切なデータの混入に繋がりかねません。

 

Datasetにデータを取り込むQueryが設定で1つ分しか書けないというのは少々不便な気がします。

設定以外でデータを取り込むQueryを記述できるようになる、

あるいは設定できるスケジュールのQueryが複数設定できるようになると良いのですが...

1 votes

· Last Updated

Comments

  • こんにちは。

    データの積上げはSQLのDataFlowを使えば上手く出来ますよ。

     

    まず、毎日積上げDataset(NEWとします)と過去データ(OLDとします)のDatasetを作成します。

    そしてSQLのDataFlowを新規で作成し、上記のNEWとOLDをUNIONでSELECTし、

    出力DatasetをOLDに設定します。

    その際に処理日などで「CURRENT_DATE」を使用すればいいかと。

     

    NEWは1日分、OLDは処理実行日+過去データ という流れになります。

     

    なので処理スケジュールの設定としては

     NEW ⇒ OLD ⇒ UNION(SQL)

    とすれば自動化が出来るかと思います。

     

  • 現状の仕様でどうにかするにはそうするしかないですよね....

    その方法ですとコネクターのDatasetが2つ(主データ、過去データ)、DataFlowのDatasetが1つ(SQL結果)の合計3つのDatasetができるということですよね。

     

    ただ色々と問題もありまして、まず元が同じビッグデータから取ってきているのに一つのDatasetで管理できなくなるということ。

    次にマスタではなく実績データなので日次でデータ数が最低200万件程増加していき、データ件数が膨大になるのですが、別Datasetで過去データを持つということは、DataFlowも日次でDatasetが更新されたタイミングで更新しなければならないことになるため、総合的に日次の更新時間が延びること(データ置き換えのみではなくDatasetと同じくDataFlowでもデータの追加が出来たらまだ良かったのですが...)。

    内部でデータをどう保持しているのか詳細は不明ですが、どうやらデータ容量が無制限ではないらしいということを聞いたので、元のDatasetとは別にDataFlowのDatasetを持つことになるので膨大なデータが2倍になってしまうこと(データ容量を2倍食う?)。

    などあるので1Dataset内でスケジュールとは別にSQLが発行出来たら便利だと思ったんですね。

  • 私は下記のようにやっています

    # 先のぐっさん(ぐっさんさん?)も同じようなことをしていると思いますが

     

    コネクターDataSet(移行用)で過去データを「1回だけ」取得

    積み上げDataFlowを新規作成し、出力DataSet「OLD」にSELECT * FROM 移行用でコピー(これが終わったら移行用はいらない)

    コネクターDataSet NEWを新規作成し、(例えば前日分のみ等の)差分を毎日取得するようにする

    積み上げDataFlowを「修正」して、

     入力DataSet:OLD、NEW

     出力DataSet:OLD

     出力SQL:

      SELECT * FROM NEW

      UNION ALL

      SELECT * FROM OLD

        LEFT JOIN (SELECT DISTINCT 日付 FROM NEW) AS NEW_日付

        ON NEW_日付.日付 = OLD.日付

      WHERE NEW_日付.日付 IS NULL

     

    NEWは1日分を取得してくるためと、たまに前日分だけ必要なときに使用します

    それ以外の場合はOLDを使用します

     

  • どーも、ぐっさんです。

    (ぐっさんさんじゃないですw)

    @ユーザー06052さんと同じ方法です!

    説明が足りませんでしたね、補足有難うございました。

  • こんにちは

    ぐっさん、ユーザー06052さん、ありがとうございます。

     

    なるほど、DataFlowでは置き換えや追加ということ自体が入力Datasetに依存するということですかね。

    ちょっと勘違いしてました(汗)

     

    途中でDataFlowを修正しても中身に入っているデータに影響はないのですね、

    修正してしまうと中身は一度削除されてから修正した内容のデータに書き換わってしまうものだと思ってました。

     

    ユーザー06052さんのSQLで

    NEW_日付.日付 IS NULLの条件は重複するデータがある場合、

    OLDのデータを切り捨てて、NEWのデータを入れるようにしているということでしょうか?

  • こんにちは。

    ユーザー02499さん

     

    出力DataSetの中身はDataFlowを実行しない限り書き換わらないですね。

    それから日付の条件はおっしゃる通りです。

    「昨日のデータがおかしかったからもう一回取って」

    とか言われることもあるので、そんなときに手動取込でリカバリできるようにしてます。

    ※「おとといのをもう一回」みたいなときは取込条件の日付変更ですけども