はじめに
Magic ETLでは、PythonスクリプトとRスクリプトの2つのスクリプティングタイルを使用できます。注: これらのタイルは、Domoコンサンプション契約を締結しているユーザーはデフォルトで使用できます。コンサンプション契約を締結していないユーザーの場合は、これらのタイルは オンデマンド で 有料 で使用することができます。スクリプティングタイルを有効にするには、Domoアカウントチームにご連絡ください。タイルを使用する前に、トレーニングが必要となる場合があります。

全般的な情報
このセクションでは、Magic ETLのすべてのスクリプティングタイルに関する情報を提供します。特定のタイルについては、以下のいずれかのリンクをクリックして、該当するタイルのAPIリファレンスを参照してください。 スクリプティングタイルは、Magic ETLの強力なツールです。この機能を使用すると、カスタムのRまたはPythonアルゴリズムを記述して、DataFlowに直接実装できます。これらを使用して、データが更新されるたびに実行される複雑なデータサイエンス分析を作成できます。ツアーを見る
すべてのスクリプティングタイルは同じ外観をしています。唯一の違いはサポートされる言語です。 タイルの本体はコードエディターです。ここはスクリプトを記述する場所です。ここには、タイルがサポートする言語の構文ハイライト表示があります。


があります。このボタンをクリックすると、最初にスクリプティングタイルを開いたときに表示されるサンプルのコードテンプレートへと、スクリプトがリセットされます。既にスクリプトを記述している場合は、このボタンをクリックすると(確認プロンプトの後に)スクリプトが上書きされるので注意が必要です。ただし、タイルを閉じない限り、コードエディター内にカーソルを置いてCommand+zまたはCTRL+zを押すことで、上書きされたスクリプトを元に戻すことができます。
[スキーマ] タブでは、スクリプトの結果をどのようにタイルに表示するかを指定します。このタブを使用するには、タイルエディターパネルのツールバーで [スキーマ] をクリックします。このタブの詳細については、この記事の「 生成されるスキーマを設定する 」セクションを参照してください。

stdout )と標準エラー( stderr )が表示されます。このタブは、タイルでプレビューが実行されるまで使用できません。プレビューが実行されると、タイルエディターパネルのツールバーのオプションとして表示されます。


スクリプティングタイルにデータを入出力する
Domoには、Domoエコシステムからスクリプトにデータをインポート(読み込み)してから、スクリプトの結果をDomoエコシステムにエクスポート(書き込み)するための基本的なAPIが用意されています。このAPIは、スクリプト言語ごとに異なり、各言語のセマンティクスに従います。注記: Domoでスクリプティングタイルを使用するときには、以下のデータタイプに関する問題に注意してください。
- Pythonでは、LONGがDOUBLEになります。これはNumPYが整数列のNULL値をサポートしていないためです。
- PythonとRでは、DECIMALがDOUBLEになります。これはNumPYまたはRに類似のタイプがないためです。
ステップ1:Domoパッケージをインポートする
スクリプトの最初の行では、言語固有のDomoパッケージをスクリプトにインポートする必要があります。選択した言語の標準のパッケージインポートセマンティクスに従います。これは初期テンプレートコードの一部です。代わりに、コードエディターの右側にある [パッケージ] リストで「domo」を検索し、パッケージをクリックしてコードスニペットをエディターに挿入することもできます。ステップ2:データをスクリプトに読み込む
スクリプトを記述する次のステップは、データにアクセスすることです。各言語には、独自のセマンティックバージョンのDomo「読み込み」メソッドがあります。これは初期コードテンプレートに含まれています。代わりに、コードエディターの右側にある入力リストでいずれかの入力をクリックすることもできます。これにより、入力データを読み込んで変数に格納するコードスニペットが挿入されます。この変数の名前は、必要に応じて変更できます。ステップ3:スクリプトからデータをエクスポートする
スクリプトを記述する最後のステップは、結果をDomoエコシステムに返すことです。各言語には、独自のセマンティックバージョンのDomo「書き込み」メソッドがあります。これも初期コードテンプレートに含まれています。ただし、このためのコードスニペットを挿入する方法はほかにはありません。この「書き込み」メソッドでは、スクリプトの結果を格納している変数の名前を使います。 スクリプトごとに作成できるエクスポートは1つのみです。 このページのトップへ生成されるスキーマを設定する
スクリプトが生成するスキーマをタイルに伝える方法は3つあります。必要に応じて、これらの方法を組み合わせて使用することで適切な結果を得ることができます。これらの手順はすべて、タイルの [スキーマ] タブで行います。列を手動で追加する
列を手動で追加するには、次の手順に従います。-
スクリプトが生成する列の名前を [列名] フィールドに入力します。

-
使用可能なデータタイプのリストで、この列のデータタイプを選択します。

-
[列を追加] ボタンをクリックして別の列を追加します。

列を一括で追加する
列を一括で追加するには、次の手順に従います。- 特定の[入力DataSet]タイルの列を一括で追加します。 [DataSetから追加] ボタンをクリックして入力元の[入力DataSet]タイルを選択します。

- 列の右端にある[X]ボタンを使用して余分な列を削除します。

スクリプトを実行する
Domoにスクリプトを実行させるには、次の手順に従います。-
タイルエディターパネルのツールバーの右側にある
ボタンか、キャンバスの上部にあるツールバーの [プレビューを実行] ボタンをクリックします(プレビューに問題がある場合は、この記事の「 トラブルシューティング 」セクションを参照してください)。
プレビューの実行が完了すると、新しい列を作成するためのテキスト入力の下にセンテンスが表示されます。このセンテンスは、プレビューが返した列のうち、タイルのスキーマの一部としてリストされていない列の数を示しています。
- センテンスの最後にあるボタンをクリックします。
設定ステップ
これをまだ完了していない場合は、この記事の「 ツアーを見る 」セクションに目を通し、スクリプティングタイルの様々な機能を把握しておいてください。- 新しいMagic ETL DataFlowを起動します。
- [入力DataSet] タイルをキャンバスにドラッグし、使用するDataSetを選択します。 左側のスライドバーの[データサイエンス]セクションにスクリプティングタイルがあります。
-
記述する言語に対応するスクリプティングタイルをキャンバスにドラッグし、[入力Dataset]からこのスクリプティングタイルに接続をドラッグします。

-
(条件付き)画面の下にエディターパネルが開いていない場合は、先ほどキャンバスに追加したスクリプティングタイルをクリックして選択すると、エディターパネルが開きます。
コードエディターには、初期コードテンプレートが自動で記述されます。テンプレートの内容に関する詳細は、前述の「 スクリプティングタイルにデータを入出力する 」を参照してください 。黄色のバナーも表示されます。これは現段階では無視してください。後で設定ステップのところで説明します。
テンプレートがスクリプティングタイルに接続されている[入力DataSet]タイルからデータを取得し、変数に格納していることが分かります。これがスクリプトで操作する必要がある変数です。

-
(条件付き)データソースが複数ある場合は、別の[入力Dataset]タイルをドラッグして必要な次のDataSetを選択し、このタイルをスクリプティングタイルに接続して別のインポートステートメントをスクリプトに追加します。
データを保持する変数を作成している行の下に、スクリプトを記述するスペースが表示されます。


- 表示されている行にスクリプトを記述し、テンプレートの最下部にあるエクスポートステートメントがスクリプトの最終生成物を表す変数をエクスポートしていることを確認します。 タイルがまだ設定済みとしてマークされておらず、そのことを知らせる黄色のバナーがタイルの上部にまだ表示されていることが分かります。これはスクリプトの結果がどのようになるかをタイルがまだ認識していないためです。
-
タイルにこの情報を提供するには:
- タイルエディターパネルのツールバーで [スキーマ] タブをクリックします。
- この記事の「 生成されるスキーマを設定する 」セクションに記載されている方法のいずれかを選択し、そのステップに従います。その後、以下に示すステップを続行します。
- [出力DataSet]タイルをスライドバーからドラッグし、キャンバスにドロップします。
-
スクリプティングタイルからこの新しい[出力DataSet]タイルに接続をドラッグします。

- [出力DataSet]タイルを選択してタイルエディターを開き、そのタイルの名前と説明を入力します。 これでタイルがDataFlow内に完全に設定されます。
- 次に、左上隅にあるフィールドにDataFlowの名前を入力します。
- キャンバスのツールバーの [設定] ボタンを使用してパネルの設定を行います。
- DataFlowを保存します。
APIリファレンス
domomagicは、Magic ETLの「Pythonタイル」と「Rタイル」の作成者の両方に提供されるシンプルなAPIで、PythonとRのコンテキストの間でデータをロード/アンロードできるようにします。PythonスクリプトタイルモジュールのAPIリファレンス

RスクリプトタイルパッケージのAPIリファレンス

メソッドシグネチャー | パラメーター | 戻り値 |
|---|---|---|
|
| 入力タイルのdata.frame。 |
|
| 該当なし |
read.dataframe 関数は、以下のパラメーターもサポートしており、動作をカスタマイズできます。
このページのトップへ
スクリプティングタイルのプロジェクトディレクトリと/tmpディレクトリ
Magic ETLのPythonとRのスクリプティング環境では、プロジェクトディレクトリと/tmpディレクトリという2つの特別なディレクトリを使用して、DataFlowのスクリプティングタイル間でデータを保存し、共有できます。これらのディレクトリを使用すると、複雑なデータ処理タスクを簡単に処理できます。プロジェクトディレクトリ
プロジェクトディレクトリは、DataFlow内のすべてのスクリプティングタイルの共有スペースであり、そのコンテンツは実行間で保持されます。つまり、統計モデルなどをプロジェクトディレクトリに保存して、複数の実行にわたって作業を続けることができます。プロジェクトディレクトリは /home/domo/project にあります。ただし、スクリプト内では単に「project」と呼びます。プロジェクトディレクトリに加えた変更は、正常に実行された後にのみ保存されます。プレビューまたは失敗した実行への変更は破棄されます。 プロジェクトディレクトリの合計サイズは、8ギガバイト(8GB)を超えてはなりません。この制限を増やす、バックアップからディレクトリを復元する、またはDataFlowから別のDataFlowにディレクトリをコピーする必要がある場合は、 Domoサポート
までお問い合わせください。
使用事例
プロジェクトディレクトリの使用事例としては、次のようなものがあります。- 使用事例1 — 統計モデルを経時的にトレーニングします。これにより、複数のバージョンを保持しながら、どのバージョンが最適かを把握できます。
- 使用事例2 — 最後に正常に実行された後の新しいバッチのみを読み込む入力DataSetオプションを使用すると、複雑な計算を更新したり、新しいデータで統計を集計したりできます。最初からすべてを再計算する必要はありません。
プロジェクトディレクトリを設定する
- 必要なスクリプティングタイル(PythonやR)と、必要な入出力DataSetタイルを使用してDataFlowを作成します。
-
最初のスクリプティングタイルでは、PythonかRかにかかわらず、データを段階的に処理するスクリプトを記述し、中間結果またはモデルをプロジェクトディレクトリに保存します。

-
PythonかRかに関係なく、別のスクリプティングタイルで、前のタイルからプロジェクトディレクトリに保存された中間結果またはモデルを読み込み、必要に応じて処理を続けます。

- 必要に応じて、最終結果または更新されたモデルをプロジェクトディレクトリに保存し、[出力DataSet]タイルを使用して最終結果を保存します。
/tmpディレクトリ
/tmpディレクトリは、DataFlow内のすべてのスクリプティングタイルの共有スペースです。あるスクリプティングタイルで/tmpディレクトリにファイルを作成すると、同じDataFlow内の別のスクリプティングタイルからこのファイルにアクセスできます。プロジェクトディレクトリとは異なり、/tmpディレクトリの内容は一時的なものであり、DataFlowの実行中に削除されます。使用事例
/tmpディレクトリの使用事例としては、次のようなものがあります。- 使用事例1 — 1つのスクリプトに複数の出力DataFrameを/tmp内のファイルとして作成し、ダウンストリームのスクリプティングタイルの別のテーブルで使用します。
- 使用事例2 — DataFrameとして簡単に表現できないスクリプティングタイル間でオブジェクトを共有します。
- 使用事例3 — スクリプティングタイル間のアクセス効率を改善します。
- PythonかRかに関係なく、必要なスクリプティングタイルと、必要な入出力DataSetタイルを使用してDataFlowを作成します。
-
最初のスクリプティングタイルで、必要に応じてデータを処理するスクリプトを記述し、結果のデータまたはオブジェクトを/tmpディレクトリに保存します。

-
2番目のスクリプティングタイルで、前のタイルから/tmpディレクトリに保存されているデータを読み取ります。

- 必要に応じてデータの処理を続行し、出力DataSetタイルを使用して最終結果を保存します。
トラブルシューティング
- スクリプトを記述した後にタイルが設定済みとしてマークされない場合は、生成されるスキーマを提供したことを確認してください。詳細については、「 生成されるスキーマを設定する 」を参照してください。
-
スクリプトの動作に関するフィードバックを得るには、プレビューを実行します。キャンバス上部のツールバーで [プレビュー] を選択すると、プレビューを実行できます。プレビューを実行すると、タイルエディターパネルのツールバーに [コンソール] タブが表示されます。このタブには、スクリプトが生成する標準出力(
stdout)と標準エラー(stderr)が表示されます。プレビューが失敗する場合は、コンソールにエラーが表示されていないか確認してください。 - スクリプトが失敗する場合は、この記事の「 スクリプティングタイルにデータを入出力する 」セクションに記載されている3つのステップすべてを適切に実行したことを確認してください。Domoに書き込む変数の名前をチェックし、その名前が正しいことを確認してください。
-
プレビューはサンプルのDataSetに対してのみ実行されます。スクリプトが正常に機能するためにデータにいくらかの可変性が必要な場合は、プレビューで使用したサンプルがこの可変性要件を満たさない場合があります。キャンバスのツールバーの 行の上限 を変更することで、プレビューサンプルのサイズを設定できます。
注記: サンプルのサイズが大きいと、プレビューの実行時間が長くなります。
- スクリプトの実行に必要なパッケージ/ライブラリを明示的にインポートしたかを確認します。使用可能なパッケージのリストが [パッケージ] タブに表示されます。
- 列のすべての値がNULL値になる場合は、スクリプトによって列が実際には生成されていない可能性があります。ある列が [スキーマ] タブのリストに表示されている場合、その列は、スクリプトが実際にその列を生成するかどうかに関係なく、結果に追加されます。スクリプトが列を生成しない場合は、その列のすべての値がNULL値に設定されます。プレビューを実行してから [スキーマ] タブを調べることで、スクリプトによって作成される列と作成されない列を確認できます。各列のステータスは、列データタイプの右側に表示されます。
- スクリプトが実行時にメモリー不足エラーで失敗する場合は、入力DataSetが大きすぎるか、スクリプトがデータの急増を引き起こす何らかのJoin処理を実行している可能性があります。データがスクリプティングタイルに挿入される前にデータにフィルターをかけたり、スクリプトのリファクタリングを行ったりすることで、データの急増を防ぎます。メモリーエラーのトラブルシューティングの詳細については、「 スクリプティングタイルのメモリーエラーのトラブルシューティング 」を参照してください。