ETL ツールのEmbulk を使ってHubDB のデータをDB にロードする方法

OSS のETL ツールEmbulk のJDBC Plugin を使って、HubDB のデータを簡単にDB に同期する方法をご紹介します。

杉本和也
リードエンジニア

最終更新日:2023-10-13

この記事で実現できるHubDB 連携のシナリオ

こんにちは!リードエンジニアの杉本です。

Embulk は、大量のデータをDB、クラウドデータストア、DWH にロードできるオープンソースETL ツールです。近頃のトレンドでは1社で複数のオンプレアプリやSaaS を使っており、データ分析にはETL ツールを使ってデータを丸ごとDB/DWH にロードしてから、分析や可視化をすることが主流になっています。Embulk にはいろいろなプラグインがあり、多様なInput とOutput 処理をサポートしています。この記事では、Embulk のJDBC Input Plugin と CData Driver for HubDB を使って、HubDB のデータを簡単にDB にロードする方法をご紹介します。この例ではロード先のDB にはMySQL を使います。

Embulk でHubDB のデータをロード

  • CData JDBC Driver for HubDB をEmbulk と同じマシンにインストールします。CData JDBC ドライバは30日間の無償トライアルが利用できるので、サイドバーからお気軽にダウンロードしてご利用ください。
  • 以下のパスにJDBC Driver がインストールされます。後ほどこのパスを使います。
    C:\Program Files\CData\CData JDBC Driver for HubDB 2019J\lib\cdata.jdbc.hubdb.jar
  • 次に、EmbulkとCData JDBC Driverをつなぎこむための、JDBC Input Plugin をインストールします。以下のリンクからダウンロードできます。

    https://github.com/embulk/embulk-input-jdbc/tree/master/embulk-input-jdbc

    インストール用のコマンドはこちら:

    embulk gem install embulk-input-jdbc
  • 今回はロード先DB としてMySQL を使います。ほかにもSQL Server、PostgreSQL、Google BigQuery などを使うことも可能です。ロードに必要な以下のプラグインをインストールしましょう。

    https://github.com/embulk/embulk-output-jdbc/tree/master/embulk-output-mysql

    コマンドはこちら。

    embulk gem install embulk-output-mysql
  • config ファイルを作成し、HubDB -> MySQL のジョブを作成します。hubdb-mysql.yml というファイル名で、以下の内容で作成しました。
  • in: type: jdbc driver_path: C:\Program Files\CData\CData JDBC Driver for HubDB 2025J\lib\cdata.jdbc.hubdb.jar driver_class: cdata.jdbc.hubdb.HubDBDriver url: jdbc:hubdb:AuthScheme=OAuth;OAuthClientID=MyOAuthClientID;OAuthClientSecret=MyOAuthClientSecret;CallbackURL=http://localhost:33333;InitiateOAuth=REFRESH table: "NorthwindProducts" out: type: mysql host: localhost database: DatabaseName user: UserId password: UserPassword table: "NorthwindProducts" mode: insert
  • JDBC URL の内容は、ご利用の環境や資格情報を入力してください。

    HubDBデータソースへの接続には、パブリックHubSpotアプリケーションを使用したOAuth認証とプライベートアプリケーショントークンを使用した認証の2つの方法があります。

    カスタムOAuthアプリを使用する

    すべてのOAuthフローでAuthSchemeを"OAuth"に設定する必要があります。特定の認証ニーズ(デスクトップアプリケーション、Webアプリケーション、ヘッドレスマシン)に必要な接続プロパティについては、ヘルプドキュメントを確認してください。

    アプリケーションを登録し、OAuthクライアント認証情報を取得するには、以下の手順を実行してください。

    1. HubSpotアプリ開発者アカウントにログインします。
      • アプリ開発者アカウントである必要があります。標準のHubSpotアカウントではパブリックアプリを作成できません。
    2. 開発者アカウントのホームページで、アプリタブをクリックします。
    3. アプリを作成をクリックします。
    4. アプリ情報タブで、ユーザーが接続する際に表示される値を入力し、必要に応じて変更します。これらの値には、パブリックアプリケーション名、アプリケーションロゴ、アプリケーションの説明が含まれます。
    5. 認証タブで、「リダイレクトURL」ボックスにコールバックURLを入力します。
      • デスクトップアプリケーションを作成する場合は、http://localhost:33333のようなローカルにアクセス可能なURLに設定します。
      • Webアプリケーションを作成する場合は、ユーザーがアプリケーションを承認した際にリダイレクトされる信頼できるURLに設定します。
    6. アプリを作成をクリックします。HubSpotがアプリケーションとそれに関連する認証情報を生成します。
    7. 認証タブで、クライアントIDクライアントシークレットを確認します。これらは後でドライバーを設定する際に使用します。
    8. スコープの下で、アプリケーションの意図する機能に必要なスコープを選択します。

      テーブルにアクセスするには、最低限以下のスコープが必要です:

      • hubdb
      • oauth
      • crm.objects.owners.read
    9. 変更を保存をクリックします。
    10. 統合に必要な機能にアクセスできる本番ポータルにアプリケーションをインストールします。
      • 「インストールURL(OAuth)」の下で、完全なURLをコピーをクリックして、アプリケーションのインストールURLをコピーします。
      • コピーしたリンクをブラウザで開きます。アプリケーションをインストールする標準アカウントを選択します。
      • アプリを接続をクリックします。結果のタブは閉じて構いません。

    プライベートアプリを使用する

    HubSpotプライベートアプリケーショントークンを使用して接続するには、AuthSchemeプロパティを"PrivateApp"に設定します。

    以下の手順に従ってプライベートアプリケーショントークンを生成できます:

    1. HubDBアカウントで、メインナビゲーションバーの設定アイコン(歯車)をクリックします。
    2. 左サイドバーメニューで、統合 > プライベートアプリに移動します。
    3. プライベートアプリを作成をクリックします。
    4. 基本情報タブで、アプリケーションの詳細(名前、ロゴ、説明)を設定します。
    5. スコープタブで、プライベートアプリケーションがアクセスできるようにしたい各スコープに対して読み取りまたは書き込みを選択します。
    6. テーブルにアクセスするには、最低限hubdbとcrm.objects.owners.readが必要です。
    7. アプリケーションの設定が完了したら、右上のアプリを作成をクリックします。
    8. アプリケーションのアクセストークンに関する情報を確認し、作成を続行をクリックし、その後トークンを表示をクリックします。
    9. コピーをクリックして、プライベートアプリケーショントークンをコピーします。

    接続するには、PrivateAppTokenを取得したプライベートアプリケーショントークンに設定します。

  • テーブル名は取得したいテーブル名を入れます。
  • これで準備完了です。あとは「embulk run」で実行するだけです。
  • embulk run hubdb-mysql.yml
  • 実行後MySQL Workbenchからテーブルを確認してみると、データが取得できているはずです。

クエリ条件でフィルタリングしたデータのロード

ちなみに、上記の例ではテーブル名を直接指定しましたが、以下のようにSQL クエリを書いてもいいです。 WHERE 句で作成日や修正日を指定すれば、最新のデータだけを対象にすることも可能です。

in: type: jdbc driver_path: C:\Program Files\CData\CData JDBC Driver for HubDB 2019J\lib\cdata.jdbc.hubdb.jar driver_class: cdata.jdbc.hubdb.HubDBDriver url: jdbc:hubdb:AuthScheme=OAuth;OAuthClientID=MyOAuthClientID;OAuthClientSecret=MyOAuthClientSecret;CallbackURL=http://localhost:33333;InitiateOAuth=REFRESH query: "SELECT PartitionKey, Name FROM NorthwindProducts WHERE [RecordId] = 1" out: type: mysql host: localhost database: DatabaseName user: UserId password: UserPassword table: "NorthwindProducts" mode: insert

おわりに

CData JDBC Driver for HubDB をEmbulk で使うことで、HubDB と連携して簡単にデータを取得できます。ぜひ、30日の無償評価版をお試しください。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。