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

Magic ETL v2にアップグレード(ベータ)

Version 2

 

はじめに

DomoのMagic ETLは、前モデルと同様の使いやすいグラフィカルインターフェースを備えた新しいデータ処理エンジンの、Magic ETL v2でメジャーアップグレードされています。v2はv1と広範囲にわたり互換性があり、ほとんどの既存の変換を円滑にバージョンアップできます。この新しいエンジンは従来のエンジンの代替として使用されます。時間の経過とともに、Magic ETL v1は廃止される予定です。

Magic ETL v2は、よりパフォーマンスが高く、機能が豊富で一貫性があります。一部の改善点は、Magic ETL v1との完全な動作の互換性を抑えることによりもたらされています。このドキュメントでは、Magic ETL v2に切り替える際に想定される動作の異なる点のすべてについて説明します。大幅な改善が行われているため、できるだけ多くのデータパイプラインで実行することをお勧めします。

アップグレードする理由

ユーザーに見えないところで実行することができる大幅な改善点があります。例えば、パフォーマンスを向上させることが唯一の目標である場合、DataFlowの作成者が新しいリリースを使用することを選択しなくても、「インプレース」で行うことができました。また、Magic ETLをより内部的に一貫性のあるものにし、他のDomo機能(Beast Modeなど)との整合性を向上させたいとも考えました。私たちの目標の1つは、Magicがユーザーの入力なしで列名の衝突を解決するすべてのケースを排除することでした。結合行と追加行はいずれも名前の競合を処理し、v2では両方ともv1とは異なる方法で処理します。「id_1_2_1_1」のような名前の列がv1から出てくることがよくあるため、この変更はデータのクリーン性において重要であると多くのお客様から伺いました。しかしながら、ユーザーに選択を許可せずにこれらの変更を行うことはできませんでした。

自動名前の変更の再考はほんの始まりに過ぎませんでした。Magic ETL v2は、Domo Beast Mode、様々なSQLデータベース、およびスプレッドシートソフトウェアにより発想を得た、200を超える機能を持つ新しいスクリプトシステムを備えています。スクリプトにより、Magic ETLは大きく変わります。スクリプトシステムによって提供される機能は、従来の設定のタイルのクラスターをより簡潔に表現するだけではありません。一部のケースでは、MySQL DataFlowでできること以上のことを実現します。スクリプトを使用して、列を所定の位置で編集したり、新しい列を追加したり(新しい[スクリプトを追加]タイルを参照)、[グループ化]タイルまたは[行をフィルター]タイルの一部として使用して複雑な集計やフィルター条件を作成できます。新しいスクリプトシステムで利用可能な、サポートされている機能の完全なリストはこちらで確認できます。

この機能を取得する

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

主要な動作の変更

v2にはv1とは異なる動作を引き起こす可能性のある変更があります。これは、「列が見つかりません」や「重複した列名」などのエラーとして、またはより微妙に異なる出力データとして表示される場合があります。したがって、既存のDataFlowをv2に移行する前、またはv1の動作に既に慣れている場合は新規のDataFlowを作成する前に、これらすべての変更を認識することが重要です。

結合

v2の[データの結合]タイルには大きな変更が2つあります。

  1. 重複する結合キーが少ないテーブルが結合の左側にあることを確認することは、重要ではなくなりました。 「左の入力には、10,000を超える重複が存在することはできません。」というエラーが表示されるv1の問題は、v2で解消されました。
  2. 名前の競合は、ユーザ入力がないと解決されなくなりました。代わりに、[データを結合]タイルの設定に名前の競合解消を説明するセクションを追加しました。このセクションは、自動または手動で入力できます。競合する列の名前変更に加えて、[データを結合]タイルの設定でも削除できるようになりました。

3.png

行を追加(合併)

v1では、[行を追加]タイルに入る2つ以上の列の名前が同じで、データタイプが異なる場合、それらは結合されません。代わりに、「ID整数」や「IDテキスト」のような名前で2つ以上の新しい列が作成されます。v2では、[行を追加]タイルは列名を変更しません。タイプが異なる列では、名前を共有しているすべての列のタイプを指定すると、可能な限り最適なタイプにデータが変換されます。例えば、ある列のタイプが「整数」で、別の列のタイプが「小数」の場合、列は「小数」タイプの列に結合されます。日付と小数のようにタイプが完全に互換性のない場合、結果の列はテキストタイプになります。この動作は、[行を追加]タイル設定の新しいオプションを使用して、より厳格な動作に置き換えることができます。より厳格な動作とは、同じ名前の2つの列のタイプが異なる場合にエラーが発生します(つまり、実行に失敗します)。

1.png

行をフィルター

NULL値は、比較関数によって異なる方法で処理されます。SQLおよびv2 DataFlowでは、nullとの比較の結果は常にnullであり、[行をフィルター]タイルによって誤った結果として処理されます。v2のほとんどのコンテキストでは、nullはnullと等しくありませんが、nullもnullと等しくないわけでもありません。また、nullは0以下ですが、0以上でもあり、0と等しくもありません。[行をフィルター]タイルが参照する列にnullがある場合、関数または他の引数に関係なく、それらの行はすべてドロップされます。nullを適切に処理できる関数は、「is null」と「is not null」のみです。v1では、フィルターが「column = null」のテストを実行した可能性があります。同じ結果を持たないため、 このようなフィルターは、「is null」演算子を使用するように変更する必要があります。

フローをv1からv2に切り替えた後、正常に実行されていても行が欠落しているような出力の場合は、この変更が原因である可能性があります。「is not equal to」関数を使用すると、特に驚くことがあります。「column <> 5」は、列の値が5の行のみをドロップするように見えるかもしれませんが、実際には、上記の理由により、列はnullの行もドロップします。次の表に、[行をフィルター]でのnullの動作の追加の例を示します。

テスト

評価済みの結果

フィルターの有効性

4 <> 5 true keep
5 <> 5 false drop
null <> 5 null drop
null = null null drop
null <> null null drop
null is null true keep
null is not null false drop
5 is not null true keep
5 is null false drop

より複雑な方法でnullを処理するには、新しいスクリプトシステムを使用します。[行をフィルター]タイルは、スクリプトの評価をサポートする3つのタイル([グループ化][スクリプトを追加]が他の2つ)の1つです。IFNULL()関数は、フィルター式からnull結果を処理する場合に特に適しています。例えば、列「col」にnull値があり、「col」の値が5でない行をフィルターしてnullを保持する場合は、次の式を記述できます:IFNULL(col <> 5, TRUE)

null処理の他に、フィルタースクリプトによって簡単になるシナリオは他にも多くあります。v1では、以下の1つのスクリプトで、それぞれ複数の条件を持つ2つの個別の[行をフィルター]タイルが必要でした。

2.png

日付と時刻の解析

受信テキストを日付または日付と時刻の値に変換処理を行う日付と時刻の解析が、大幅に変更されました。一般的にはv1よりも厳格です。v1で解析に成功したテキストの一部には、v2でエラーになるものがありますより厳格にすることの目的は、月が日と混同されるような、値がサイレントに解釈されないような状況を回避することです。v2は、あいまいではない日付と時刻の形式の固定リストと、あいまいな形式の固定リストを使用します(例えば、米国では「01/02/2020」は1月2日、その他のほとんどの場所では2月1日)。v2が日付を解析できない場合は、列単位で[入力DataSet]タイルにカスタムフォーマットを指定できます。フォーマットの仕様については、「Java Date TimeFormatterクラスに関するOracleのドキュメント」を参照してください。

日付と時刻の演算

v2での日付と時刻の演算は、Domoの管理メニューで指定された会社のタイムゾーンでデフォルトで実行されます。v1はこれらの演算を国際標準時間である協定世界時(UTC)に実行しました。これは、タイムゾーンがアメリカ/デンバーで、日付と時刻の列で「日付の月」を使用している企業は、デンバーの観点からその月のタイムスタンプを取得します。ただし、協定世界時(UTC)ではありません。

週関連の関数は、Beast Modeで使用されるのと同じアルゴリズムを使用するようになりました。1週目は、その年の日曜日の最初の週です。これはv1と異なります。[スクリプトを追加]タイルを使用して、週の動作を調整することができます。week()関数は2番目の引数(0から7までの整数)を受け入れ、日付の週を計算するときに使用する「週モード」を表示します。これらのモードは「OracleのMySQLドキュメント」で説明されており、Beast Modeの動作に反映されています。

その他の考慮事項

v2によりv1の動作が変更される方法を理解するだけでなく、v2による変換機能の向上について理解することは価値があります。v1に精通していてもv2を初めて使用するユーザーの方は、必ず次のことを試してください。

  • 新しい[スクリプトを追加]タイル:200以上の機能をサポートしており、そのほとんどはMagic ETL固有の機能です。初めて[スクリプトを追加]を使用する場合は、スクリプトエディタを展開して関数リストを参照してください。
  • [入力DataSet]タイル:着信列のタイプの変更、エラーやnullの処理方法の設定ができるようになりました。テキスト列のすべてのnullを代わりに空の文字列として解釈する場合は、そのように実行できるようになりました。
  • 新しい[動的アンピボット]タイル:一部のシナリオでは、従来の[アンピボット](列を折りたたむ)タイルよりも、理にかなっています。一部の列をピボットして多くの列をそのままの状態にするのではなく、一部を除きすべての列をピボットする場合は、この新しいタイルを使用することをお勧めします。