メインコンテンツまでスキップ
waffle.svg
Domo Knowledge Base

Magic ETL v2タイル:スクリプティング(ベータ)

Version 2

 

はじめに

ETL DataFlowの[スクリプティング]タブでは2つのタイルを使用できます。これには以下のものが含まれます。

  • Pythonスクリプト
  • Rスクリプト

ETL DataFlowの作成については、「ETL DataFlowを作成する」を参照してください。

Data Centerについては、「Data Centerのレイアウト」を参照してください。

Scripting Tab.png

この機能を取得する

この機能のベータ版への参加に興味がある場合は、カスタマーサクセスマネージャー(CSM)にお問い合わせください。

注記:この機能は、オンデマンドおよび有料でのご利用になります

 

機能の有効化をリクエストするには

  • Domoカスタマーサクセスマネージャー、テクニカルコンサルタント、またはAEにお問い合わせください。

  • CSM、TC、またはAEの連絡先情報がない場合は、Buzzで/Supportを使用するか、support@domo.comにメールを送信して、テクニカルサポートに問い合わせてください。

機能によっては、利用する前に研修が必要なものもあります。

すべてのスクリプティングタイルに関する一般的な情報

このセクションでは、ETLのすべてのスクリプティングタイルに関する情報を提供します。特定のタイルについては、以下のいずれかのリンクをクリックして、該当するタイルのセクションにジャンプしてください。

スクリプティングタイルは、DomoのETL機能の強力なツールです。この機能を使用すると、カスタムのRまたはPythonアルゴリズムを記述して、DataFlowに直接実装できます。これにより、データが更新されるたびに実行される複雑なデータサイエンス分析を作成できます。

ツアーを見る

すべてのスクリプティングタイルは同じ外観をしています。唯一の違いはサポートされる言語です。

タイルの本体はコードエディターです。ここはスクリプトを記述する場所です。ここには、タイルがサポートする言語の構文ハイライト表示があります。

scripting_actions_code_editor.png

タイルの右側には、スクリプティングタイルに現在接続されている入力タイルを検索するためのリストがあります。入力の名前をクリックすると、スクリプト内のカーソルの位置にコードスニペットが挿入されます。このコードスニペットは、データをスクリプトに読み込み、変数に保存します。変数名は好きな名前に変更できます。

scripting_actions_inputs.png

タイルの右側には、[パッケージ] という名前の2番目のタブがあります。このタブをクリックすると、サポートされる言語の使用可能なパッケージを検索するためのリストが表示されます。パッケージ名の上にカーソルを合わせると、説明が表示されます。また、表示される矢印をクリックすると、パッケージのドキュメントがあるWebサイトに移動します。入力と同様に、パッケージをクリックすると、スクリプト内のカーソルの位置にコードスニペットが挿入されます。このコードスニペットは、スクリプトで使用するために選択されたライブラリをインポートします。

scripting_actions_packages.png

タイルエディターパネルのツールバーの右側には、[テンプレートアイコン]ボタンscripting_actions_code_template_icon.pngがあります。このボタンをクリックすると、最初にスクリプティングタイルを開いたときに表示されるサンプルのコードテンプレートへと、スクリプトがリセットされます。すでにスクリプトを記述している場合は、このボタンをクリックすると(確認プロンプトの後に)スクリプトが上書きされるので注意が必要です。ただし、タイルを閉じない限り、コードエディター内にカーソルを置いてCommand+zまたはCTRL+zを押すことで、上書きされたスクリプトを元に戻すことができます。

[スキーマ] タブでは、スクリプトの結果がどのようになるかをタイルに表示します。これを使用するには、タイルエディターパネルのツールバーで [スキーマ] をクリックします。このタブについて詳しくは、このドキュメントの「生成されるスキーマを設定する」を参照してください。

scripting_actions_schema.png

[コンソール]タブには、スクリプトが生成する標準出力(stdout)と標準エラー(stderr)が表示されます。このタブは、タイルでプレビューが実行されるまで使用できません。プレビューが実行されると、タイルエディターパネルのツールバーのオプションとして表示されます。

scripting_actions_console.png

[プレビュー] タブには、スクリプトの実行結果が表示されます。このタブも、プレビューが実行されるまで表示されません。プレビューが実行されると、タイルエディターパネルのツールバーのオプションとして表示されます。

scripting_actions_preview.png

 

スクリプティングタイルにデータを入出力する

Domoには、Domoエコシステムからスクリプトにデータをインポート(読み込み)してから、スクリプトの結果をDomoエコシステムにエクスポート(書き込み)するための基本的なAPIが用意されています。このAPIは、スクリプト言語ごとに異なり、各言語のセマンティクスに従います。

注記:Domoでスクリプティングタイルを使用するときには、以下のデータタイプに関する問題に注意してください。

  • Pythonでは、LONGがDOUBLEになります。これはNumPYが整数列のNULL値をサポートしていないためです。

  • PythonとRでは、DECIMALがDOUBLEになります。これはNumPYまたはRに類似のタイプがないためです。

 

言語固有のAPIコールを確認する最も簡単な方法は、新規作成され、接続されたスクリプティングタイルで提供される初期コードテンプレートを調べることです。

ステップ1:Domoパッケージをインポートする

スクリプトの最初の行では、言語固有のDomoパッケージをスクリプトにインポートする必要があります。選択した言語の標準のパッケージインポートセマンティクスに従います。これは初期テンプレートコードの一部です。代わりに、コードエディターの右側にある[パッケージ] リストで「domo」を検索し、パッケージをクリックしてコードスニペットをエディターに挿入することもできます。

ステップ2:データをスクリプトに読み込む

スクリプトを記述する次のステップは、データにアクセスすることです。各言語には、独自のセマンティックバージョンのDomo「読み込み」メソッドがあります。これは初期コードテンプレートに含まれています。代わりに、コードエディターの右側にある入力リストでいずれかの入力をクリックすることもできます。これにより、入力データを読み込んで変数に格納するコードスニペットが挿入されます。この変数の名前は、必要に応じて変更できます。

ステップ3:スクリプトからデータをエクスポートする

スクリプトを記述する最後のステップは、結果をDomoエコシステムに返すことです。各言語には、独自のセマンティックバージョンのDomo「書き込み」メソッドがあります。これも初期コードテンプレートに含まれています。ただし、このためのコードスニペットを挿入する方法は他にはありません。この「書き込み」メソッドでは、スクリプトの結果を格納している変数の名前を使います。スクリプトごとに作成できるエクスポートは1つのみです。

生成されるスキーマを設定する

スクリプトが生成するスキーマをタイルに伝える方法は3つあります。必要に応じて、これらの方法を組み合わせて使用することで適切な結果を得ることができます。これらの手順はすべて、タイルの [スキーマ] タブで行います。

列を手動で追加する

列を手動で追加するには、以下の手順を実行します。

  1. スクリプトが生成する列の名前を [列名] フィールドに入力します。

    scripting_actions_manual_column_name.png

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

    scripting_actions_manual_data_type.png

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

    scripting_actions_manual_add_column.png

    重要:タイルの設定を完了するには、追加したすべての列に値を入力する必要があります

列を一括で追加する

列を一括で追加するには、以下の手順を実行します。

1. 特定の「入力DataSet」タイルの列を一括で追加します。[DataSetから追加]ボタンをクリックして入力元の「入力DataSet」タイルを選択します。

scripting_actions_bulk_add_from_dataset.png

2. 列の右端にある「X」ボタンを使用して余分な列を削除します。

scripting_actions_bulk_schema_output.png

Domoにスクリプトを実行させる

Domoにスクリプトを実行させるには、以下の手順を実行します。

  1. タイルエディターパネルのツールバーの右側にあるscripting_actions_preview_icon.pngボタンか、キャンバスの上部にあるツールバーの [プレビューを実行]ボタンをクリックします。(プレビューに問題がある場合は、このドキュメントの「トラブルシューティング」セクションを参照してください)。

    プレビューの実行が完了すると、新しい列を作成するためのテキスト入力の下にセンテンスが表示されます。このセンテンスは、プレビューが返した列のうち、タイルのスキーマの一部としてリストされていない列の数を示しています。
     
  2. センテンスの最後にあるボタンをクリックします。 

スキーマを設定すると、スクリプトの結果がどのようなものかがタイルに伝わり、タイルが設定済みとしてマークされます(スクリプトが記述されていることが前提)。

[スキーマ]タブに表示される列は、DataFlowの次のタイルに渡されます。

設定ステップ

これをまだ完了していない場合は、この記事の「ツアーを見る」セクションに目を通し、スクリプティングタイルの様々な機能を把握しておいてください。

  1. 新しいETL DataFlowを開始します。

  2. 「入力DataSet」タイルをキャンバスにドラッグし、使用するDataSetを選択します。

    左側のスライドバーの「データサイエンス」セクションに[スクリプティング]タイルがあります。

  3. 記述する言語に対応する[スクリプティング]タイルをキャンバスにドラッグし、「入力Dataset」からこの[スクリプティング]タイルに接続をドラッグします。

    scripting_actions_configure1.png

  4. (条件付き)画面の下にエディターパネルが開いていない場合は、先ほどキャンバスに追加した[スクリプティング]タイルをクリックして選択すると、エディターパネルが開きます。

    コードエディターには、初期コードテンプレート自動で記述されます。テンプレートの内容に関する詳細は、このドキュメントの「スクリプティングタイルにデータを入出力する」セクションを参照してください。黄色のバナーも表示されます。これは現段階では無視してください。後で設定ステップのところで説明します。

    テンプレートがスクリプティングタイルに接続されている「入力Dataset」タイルからデータを取得し、変数に格納していることが分かります。これがスクリプトで操作する必要がある変数です。

    scripting_actions_code_editor.png

  5. (条件付き)データソースが複数ある場合は、別の「入力Dataset」タイルをドラッグして必要な次のデータセットを選択し、このタイルを[スクリプティング]タイルに接続して別のインポートステートメントをスクリプトに追加します。

    scripting_actions_configure2.png

    データを保持する変数を作成している行の下に、スクリプトを記述するスペースが表示されます。

    scripting_actions_configure3.png

  6. 表示されている行にスクリプトを記述し、テンプレートの最下部にあるエクスポートステートメントがスクリプトの最終生成物を表す変数をエクスポートしていることを確認します。

    タイルがまだ設定済みとしてマークされておらず、そのことを知らせる黄色のバナーがタイルの上部にまだ表示されていることが分かります。これはスクリプトの結果がどのようになるかをタイルがまだ認識していないためです。

  7. タイルにこの情報を提供するには、以下の手順を実行します。

    1. タイルエディターパネルのツールバーで [スキーマ] タブをクリックします。

    2. この記事の「生成されるスキーマを設定する」セクションに記載されている方法のいずれかを選択し、そのステップに従います。その後、以下に示すステップを続行します。

  8. 「出力DataSet」タイルをスライドバーからドラッグし、キャンバスにドロップします。

  9. [スクリプティング]タイルからこの新しい「出力DataSet」タイルに接続をドラッグします。

    scripting_actions_configure4.png

  10. 「出力DataSet」タイルを開き、名前を付けて説明を入力します。

    これでタイルがDataFlow内に完全に設定されます。

  11. 次に、左上隅にあるフィールドにDataFlowの名前を入力します。

  12. キャンバスのツールバーの [Settings] ボタンを使用してパネルの設定を行います。

  13. DataFlowを保存します。

おめでとうございます。スクリプティングタイルを活用するDataFlowが作成できました。これは、1つの「入力Dataset」タイル、1つのスクリプティングタイル、1つの「出力Dataset」タイルのみを使用するごく基本的な設定でした。スクリプティングタイルの前後に、従来のすべてのDataFlowタイルを使用してデータを操作できることも、覚えておいてください。

APIリファレンス

domomagicは、「Pythonタイル」と「Rタイル」の作成者の両方に提供されるシンプルなAPIで、PythonおよびRコンテキストとの間でデータを読み込み/読み込み解除できるようにします。

PythonスクリプトタイルモジュールのAPIリファレンス

Python Script.png

メソッドシグネチャ

パラメーター

戻り値

read_dataframe(input_name=None)

input_name:ETL入力タイルの名前。使用可能な入力が1つしかない場合は必要ありません。

入力タイルを表すPandas DataFrame。 

write_dataframe(dataframe)

dataframe:ETLタイルの出力として使用されるPandas DataFrame。 

該当なし
read_array(column_name,input_name=None) column_name:列の名前。

input_name:ETL入力タイルの名前。使用可能な入力が1つしかない場合は必要ありません。
入力から得られる単一の列。NumPy配列として表現。
read_array_dict(input_name=None) input_name:ETL入力タイルの名前。使用可能な入力が1つしかない場合は必要ありません。 列名のOrderedDictとしてNumPy配列にマップされる入力。
write_array_dict(array_dict) array_dict: ETLコンテキストへの出力としてNumPy配列にマップされる列名のディクショナリ。配列は同じ長さでなければなりません。 該当なし

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

R Script.png

メソッドシグネチャ

パラメーター

戻り値

read.dataframe(input.name=NULL、以下を参照)

input.nameETL入力タイルの名前。使用可能な入力が1つしかない場合は必須ではありません。

入力タイルのdata.frame。

write.dataframe(table)

tabledata.frameまたはマトリックスをETLタイルの出力としてエクスポートします。 

該当なし

Rパッケージのread.dataframe関数は、以下のパラメーターもサポートしており、動作をカスタマイズできます。

パラメーター

説明

colClasses

名前付きの列に割り当てられる、クラスの名前付きの文字ベクトル。

stringsAsFactors

文字列列を要素として読み込むかどうかを指定する論理値。デフォルトはfalseで、colClassesによって上書きされます。

integersAsNumerics

整数を数値(浮動小数点数)として読み込むかどうかを指定する論理値。デフォルトはtrueで、colClassesによって上書きされます。

allVerbatimExcept

デフォルトの動作に従って読み込まれる列名の文字ベクトル。その他の列はすべて文字列として逐字的に読み込まれ、元のタイプで書き込まれます。Rコンテキストとの間で変換を行うと精度が失われるかエラーが発生し、実行される計算に列が必要ない場合に役立ちます。

allIgnoredExcept

読み込まれる列名の文字ベクトル。その他の列はすべて無視されます。

トラブルシューティング

  • スクリプトを記述した後にタイルが設定済みとしてマークされない場合は、生成されるスキーマを提供したことを確認してください。詳細は、この記事の「生成されるスキーマを設定する」セクションを参照してください。

  • プレビューを実行することは、スクリプトの動作に関するフィードバックを得るための最も簡単な方法です。プレビューを実行するには、タイルエディターパネルのツールバーの右側にあるプレビューボタンか、キャンバスの上部にあるツールバーの[プレビュー]ボタンをクリックします

  • プレビューを実行すると、タイルエディターパネルのツールバーに[コンソール]タブが表示されます。このタブには、スクリプトが生成する標準出力(stdout)と標準エラー(stderr)が表示されます。プレビューが失敗する場合は、コンソールにエラーが表示されていないか確認してください。

  • スクリプトが失敗する場合は、この記事の「スクリプティングタイルにデータを入出力する」セクションに記載されている3つのステップすべてを適切に実行したことを確認してください。Domoに書き込む変数の名前を再確認し、その名前が正しいことを確認してください。

  • プレビューはサンプルのdatasetに対してのみ実行されます。スクリプトが正常に機能するためにデータにいくらかの可変性が必要な場合は、プレビューで取り込んだサンプルがこの可変性要件を満たさない場合があります。キャンバスのツールバーの [行制限] を変更することで、プレビューサンプルのサイズを設定できます。

    注記:サンプルのサイズが大きいと、プレビューの実行時間が長くなります。
  • スクリプトの実行に必要なパッケージ/ライブラリを明示的にインポートしましたか。使用可能なパッケージのリストは、コードエディターの右側のセクションの [パッケージ] タブにあります。

  • 列のすべての値がNULL値になる場合は、スクリプトによって列が実際には生成されていない可能性があります。ある列が [スキーマ]タブのリストに表示されている場合、その列は、スクリプトが実際にその列を生成するかどうかに関係なく、結果に追加されます。スクリプトが列を生成しない場合は、その列のすべての値がNULL値に設定されます。プレビューを実行してから [スキーマ]タブを調べることで、スクリプトによって作成される列と作成されない列を確認できます。各列のステータスは、列データタイプの右側に表示されます。

  • スクリプトが実行時にメモリー不足エラーで失敗する場合は、入力DataSetが大きすぎるか、スクリプトがデータの急増を引き起こす何らかの結合処理を実行している可能性があります。データがスクリプトタイルに挿入される前にデータにフィルターをかけたり、スクリプトのリファクタリングを行なったりすることで、データの急増を防ぎます。