NetSuite のデータをPythonのpetlでETL処理する方法|CData Connect AI

Jerod Johnson
Jerod Johnson
Director, Technology Evangelism
CData Connect AI Python SDKとpetlフレームワークで、リアルタイムのNetSuite のデータを抽出・変換・ロードするETLパイプラインの構築方法を解説。読み取りから書き込みまで対応します。

CData Connect AI の Python SDK と petl フレームワークを使うと、NetSuite のデータをローカルにドライバーをインストールすることなく、Pythonで直接抽出・変換・ロードするETLパイプラインを構築できます。パーソナルアクセストークンで接続し、数行のコードで設定完了です。

Python は豊富なモジュールのエコシステムを備えているため、素早く作業に取りかかり、システムをより効果的に連携できます。CData Connect AI Python SDK と petl フレームワークを使えば、NetSuite のデータを抽出・変換して CSV などに出力する NetSuite 連携のアプリケーションやパイプラインを構築できます。この記事では、Connect AI に接続し、petl を使ってNetSuite のデータを抽出・変換し、CSV ファイルに書き出す方法をご紹介します。

Connect AI Python SDK(cdata-connect-ai)は DB-API 2.0(PEP 249)に準拠したクライアントなので、petl は etl.fromdb を使って SDK の接続から直接読み取れます。ソースごとにドライバーをインストールする必要はありません。パーソナルアクセストークンで接続して、パイプラインを構築しましょう。

Python + petl でできること

NetSuite データの定期抽出パイプライン構築

SQL クエリで取得した NetSuite のレコードを petl の etl.fromdb で抽出し、etl.sort などの変換処理をはさんでから CSV に書き出す、軽量な ETL パイプラインを構築できます。

複数データソースとの統合分析

DB-API 2.0 準拠のクライアントなので、同じコードパターンで NetSuite 以外のデータソースにも接続でき、petl 上で結合・整形してから任意の出力先にロードできます。

NetSuite への書き戻し処理の自動化

書き込みに対応した権限を持つ PAT で接続していれば、cursor.executemany を使ったバッチ INSERT により、変換済みデータを NetSuite に自動で書き戻す処理を組み込めます。

NetSuite データ連携について

CData は、Oracle NetSuite のライブデータにアクセスし、統合するための最も簡単な方法を提供します。お客様は CData の接続機能を以下の目的で使用しています:

  • Standard、CRM、OneWorld を含む、すべてのエディションの NetSuite にアクセスできます。
  • SuiteTalk API(SOAP ベース)のすべてのバージョンと、SQL のように機能し、より簡単なデータクエリと操作を可能にする SuiteQL に接続できます。
  • Saved Searches のサポートにより、事前定義されたレポートとカスタムレポートにアクセスできます。
  • トークンベースおよび OAuth 2.0 で安全に認証でき、あらゆるユースケースで互換性とセキュリティを確保します。
  • SQL ストアドプロシージャを使用して、ファイルのアップロード・ダウンロード、レコードや関連付けのアタッチ・デタッチ、ロールの取得、追加のテーブルやカラム情報の取得、ジョブ結果の取得などの機能的なアクションを実行できます。

お客様は、Power BI や Excel などのお気に入りの分析ツールからライブ NetSuite データにアクセスするために CData ソリューションを使用しています。また、CData Sync を直接使用するか、Azure Data Factory などの他のアプリケーションとの CData の互換性を活用して、NetSuite データを包括的なデータベースやデータウェアハウスに統合しています。CData は、Oracle NetSuite のお客様が NetSuite からデータを取得し、NetSuite にデータをプッシュするアプリを簡単に作成できるよう支援し、他のソースからのデータを NetSuite と統合することを可能にしています。

当社の Oracle NetSuite ソリューションの詳細については、ブログをご覧ください:Drivers in Focus Part 2: Replicating and Consolidating ... NetSuite Accounting Data


はじめに


Connect AI で NetSuite に接続する方法は?

CData Connect AI では、直感的なクリック操作ベースのインターフェースでデータソースに接続できます。

  1. Connect AI にログインし、Sources をクリックして、 Add Connection をクリックします
  2. 接続の追加
  3. 「Add Connection」パネルから「NetSuite」を選択します
  4. データソースの選択
  5. NetSuite に接続するために必要な認証プロパティを入力します。

    NetSuiteへの接続

    NetSuite では、2種類のAPI でデータにアクセスできます。どちらのAPI を使用するかは、Schema 接続プロパティで以下のいずれかを選択して指定してください。

    • SuiteTalk は、NetSuite との通信に使用されるSOAP ベースの従来から提供されているサービスです。幅広いエンティティをサポートし、INSERT / UPDATE / DELETE の操作も対応しています。ただし、SuiteQL API と比べるとデータの取得速度が劣ります。また、サーバーサイドでのJOIN に対応していないため、これらの処理はCData 製品がクライアントサイドで実行します。
    • SuiteQL は、より新しいAPI です。JOIN、GROUP BY、集計、カラムフィルタリングをサーバーサイドで処理できるため、SuiteTalk よりもはるかに高速にデータを取得できます。ただし、NetSuite データへのアクセスは読み取り専用となります。

    データの取得のみが目的でしたらSuiteQL をお勧めします。データの取得と変更の両方が必要な場合は、SuiteTalk をお選びください。

    NetSuite への認証

    CData 製品では、以下の認証方式がご利用いただけます。

    • トークンベース認証(TBA)はOAuth1.0に似た仕組みです。2020.2以降のSuiteTalk とSuiteQL の両方で利用できます。
    • OAuth 2.0 認証(OAuth 2.0 認可コードグラントフロー)は、SuiteQL でのみご利用いただけます。
    • OAuth JWT 認証は、OAuth2.0 クライアント認証フローの一つで、クライアント認証情報を含むJWT を使用してNetSuite データへのアクセスを要求します。

    トークンベース認証(OAuth1.0)

    トークンベース認証(TBA)は、基本的にOAuth 1.0 の仕組みです。この認証方式はSuiteTalk とSuiteQL の両方でサポートされています。管理者権限をお持ちの方がNetSuite UI 内でOAuthClientId、OAuthClientSecret、OAuthAccessToken、OAuthAccessTokenSecret を直接作成することで設定できます。 NetSuite UI でのトークン作成手順については、ヘルプドキュメントの「はじめに」セクションをご参照ください。

    アクセストークンを作成したら、以下の接続プロパティを設定して接続してみましょう。

    • AuthScheme = Token
    • AccountId = 接続先のアカウント
    • OAuthClientId = アプリケーション作成時に表示されるコンシューマーキー
    • OAuthClientSecret = アプリケーション作成時に表示されるコンシューマーシークレット
    • OAuthAccessToken = アクセストークン作成時のトークンID
    • OAuthAccessTokenSecret = アクセストークン作成時のトークンシークレット

    その他の認証方法については、ヘルプドキュメントの「はじめに」をご確認ください。

    接続の設定(Salesforce の例)
  6. 「Save & Test」をクリックします
  7. 「Permissions」タブに移動し、ユーザーベースの権限を更新します。 権限の更新

パーソナルアクセストークン(PAT)を生成する

Python SDK は、アカウントのメールアドレスとパーソナルアクセストークン(PAT)を使って Connect AI に認証します。アクセスの粒度を保つために、アプリケーションごとに個別の PAT を作成することをおすすめします。

  1. Connect AI アプリの右上にある歯車アイコン()をクリックして、設定ページを開きます。
  2. 設定ページの Access Tokens セクションに移動し、 Create PAT をクリックします。
  3. PAT に名前を付けて Create をクリックします。 新しい PAT の作成
  4. パーソナルアクセストークンは作成時にのみ表示されます。必ずコピーして安全な場所に保管してください。

必要なモジュールをインストールする方法は?

pip ユーティリティを使って、SDK と petl フレームワークをインストールします。

pip install cdata-connect-ai
pip install petl

Python で NetSuite のデータの ETL アプリを構築する方法は?

必要なモジュールをインストールしたら、ETL アプリを構築する準備は完了です。以下にコードスニペットを紹介しますが、完全なソースコードは記事の末尾に掲載しています。

まずモジュールをインポートし、アカウントのメールアドレスと PAT で Connect AI に接続します。

import petl as etl
import cdata_connect_ai

conn = cdata_connect_ai.connect(
    username="[email protected]",
    password="<your_pat>",
)

NetSuite をクエリする SQL ステートメントを作成する方法は?

SQL を使って、NetSuite をクエリするステートメントを作成します。この記事では、SalesOrder エンティティからデータを読み取ります。識別子は <Connection>.<Schema>.<Table> という3つの部分で構成されており、接続名はデフォルトでソース名(例:NetSuite1)になります。

sql = (
    "SELECT CustomerName, SalesOrderTotal "
    "FROM [NetSuite1].[NetSuite].[SalesOrder] "
    "WHERE Class_Name = 'Furniture : Office'"
)

NetSuite のデータの抽出・変換・ロードを実装する方法は?

接続とクエリが準備できたら、petl を使ってNetSuite のデータを抽出・変換・ロードします。この例では、NetSuite のデータを抽出し、SalesOrderTotal カラムでデータを並べ替えて、CSV ファイルにロードします。

table1 = etl.fromdb(conn, sql)

table2 = etl.sort(table1, 'SalesOrderTotal')

etl.tocsv(table2, 'salesorder_data.csv')

新しい行を NetSuite に書き戻す方法は?

NetSuite が書き込みに対応している場合は、バッチ INSERT で行を書き戻せます。SDK の executemany は、@name のプレースホルダーと、1行につき1つのパラメータ辞書のリストを受け取ります。

cur = conn.cursor()
cur.executemany(
    "INSERT INTO [NetSuite1].[NetSuite].[SalesOrder] (CustomerName, SalesOrderTotal) "
    "VALUES (@val1, @val2)",
    [
        {"@val1": "New value 1", "@val2": "New value 1"},
        {"@val1": "New value 2", "@val2": "New value 2"},
    ],
)
print(f"Rows inserted: {cur.rowcount}")

conn.close()

注意:書き込み可能なソースであっても、読み取り専用の PAT や接続権限では書き込み操作は拒否されます。

CData Connect AI Python SDK を使えば、petl のような ETL パッケージでのデータへの直接アクセスも含め、通常のデータベースと同じようにNetSuite のデータを扱えます。

関連情報と無料トライアル

これで、CData Connect AI Python SDK を使って、petl でリアルタイムのNetSuite のデータをパイプライン処理できるようになりました。NetSuite(および数百種類のその他のデータソース)への接続について詳しくは、Connect AI のページをご覧ください。

CData Connect AI の詳細、または無料トライアルにお申し込みください:

無料トライアル お問い合わせ



完全なソースコード

import petl as etl
import cdata_connect_ai

conn = cdata_connect_ai.connect(
    username="[email protected]",
    password="<your_pat>",
)

sql = (
    "SELECT CustomerName, SalesOrderTotal "
    "FROM [NetSuite1].[NetSuite].[SalesOrder] "
    "WHERE Class_Name = 'Furniture : Office'"
)

table1 = etl.fromdb(conn, sql)

table2 = etl.sort(table1, 'SalesOrderTotal')

etl.tocsv(table2, 'salesorder_data.csv')

cur = conn.cursor()
cur.executemany(
    "INSERT INTO [NetSuite1].[NetSuite].[SalesOrder] (CustomerName, SalesOrderTotal) "
    "VALUES (@val1, @val2)",
    [
        {"@val1": "New value 1", "@val2": "New value 1"},
        {"@val1": "New value 2", "@val2": "New value 2"},
    ],
)
print(f"Rows inserted: {cur.rowcount}")
conn.close()

はじめる準備はできましたか?

CData Connect AI の詳細、または無料トライアルにお申し込みください:

無料トライアル