In-Database Processingエクステンション
はじめに
Altair AI StudioまたはAltair AI Hubを使用してリモートデータを処理する場合、大きく分けて3つの異なるアプローチがあります。
- リモートリポジトリからデータをダウンロードし、AI Studio / AI Hubで処理してから、Read Amazon S3、Read Google Storage、Write Database、Write Salesforceなどのオペレータを使用して再度データを書き戻すことができます。
- リモートリポジトリのネイティブツールを使用して、リモートリポジトリ内でデータを処理できます。
- Execute SQLオペレータはリモートデータベース内でSQLを直接実行します。
- In-Database Processingエクステンションを使用すると、Google BigQuery、Oracle、Snowflake、その他サポートされているサービスのどれであっても、リモートリポジトリのクエリ言語に自動的に変換されるネイティブAI Studioプロセスを作成できます。
このドキュメントでは、3番目の方法であるIn-Database Processingに焦点を当てます。
Install In-Database Processing Extension in Studio |
サポートされているサービス
現在、In-Database Processingエクステンションは以下のサービスをサポートしています。
- Databricks
- Embedded
- Google BigQuery
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
- Snowflake
その他のサービスについても、ご要望に応じて継続的にサポートを追加していきます。
上記のリストにないデータベースであっても、エクステンションはあらゆるSQLデータベースを標準SQLでサポートします。サポートしているSQLデータベースとサポートしていないSQLデータベースの違いは次のとおりです。
- サポートされているSQLデータベース(およびSQLだけでなく、サポートされているすべてのサービス)は、In Database NestオペレータのSQL dialectパラメータリストに表示されます。サポートされていないSQLデータベースはその他として表示されます。
- サポートされているSQLデータベースでは、非標準関数(PostgreSQLのstring_aggなど)がGenerate Attributes (In Database)オペレータの関数リストに表示されます。サポートされていないSQLデータベースでは、標準SQL関数のみが使用可能です。
独自のIn-Database Processingエクステンションを書くことも可能であることに注意してください。
現在、OracleはIn-Database Processingエクステンションでサポートされているデータベースですが、Oracle DBのサンプルエクステンションをgithubで提供しています。
In-Database Processingの利点
大規模なデータセットをインターネット経由で移動させるのは、時間もコストもかかります。
In-Database Processingエクステンションを使用すると、データストレージプロバイダーのコンピューティング能力と効率性を活用して、時間とコストの両方を節約できます。さらに、次のような利点もあります。
- ネットワークの混雑を緩和
- ローカルメモリの使用量を制限
- データを一箇所に安全に保管
- AI Studioで通常行うようにオペレータを連鎖させることができ、エクステンションはこの連鎖を複雑なクエリに変換してリモートで実行します。つまり、これはSQLクエリビルダです。
目次
In Database Nest
概要
このメタオペレータを使用すると、データベースからデータを抽出するサブプロセスを定義することができます。
説明
このオペレータはサブプロセスが定義するステップをSQLに変換し、そのコードを選択したデータベースに送信します。オペレータは使用するデータベース接続を指定します。このメタオペレータの内部で使用できるのは、In-Database Processingオペレータグループのオペレータのみです。オペレーターには入力ポートはありませんが、任意の数の出力を持つことができます。これらの各出力は、そのポートに接続されたオペレータによって生成されたクエリのインメモリデータセットの結果を提供します。並列化を有効にすると、これらのクエリはデータベース内で同時に実行されます。クエリは出力ポートの自然な順序で送信されます。生成されたクエリは各データセットのアノテーションとして利用でき、データへのアノテーションや他のアノテーションオペレータでさらに処理することができます。
マクロ
ネスト内部には、パラメータで使用できる定義済みのマクロが用意されています。以下を参照してください。
- process_start_db: 選択したデータベースタイプに基づく、データベース固有の形式によるプロセス開始日時(値は引用符で囲まれたリテラル、または日付関数式になる可能性があることに注意してください)
- t_db: 選択したデータベースタイプに基づく、データベース固有の形式による現在の日付と時刻(値は引用符で囲まれたリテラル、または日付関数式になる可能性があることに注意してください)
- db_id: データベースのタイプ、つまり使用されるSQL方言(手動で選択または自動検出されます)
詳細: In Database Nest
Data Access
Retrieve
このオペレータは後続のIn-Database Processingオペレータが作成するクエリのソーステーブルを定義します。
詳細: Retrieve
Store
このオペレータは入力データをデータベースに書き込みます。このオペレータには、選択したスキーマで適切なCREATE TABLE権限が必要であることに注意してください。このオペレータの出力がNest出力に接続されていない限り、このプロセスを実行しているマシンのメモリにデータが取り込まれることはありません。この方法では、プロセス全体がデータベースにプッシュされるため、メモリ不足を心配することなくETLプロセスを実装することができます。
詳細: Store
Blending (16)
Aggregate
このオペレータは指定されたグループ化属性のリストを使用して、よく知られているGROUP BY操作を実行します。そして、選択した列に対して指定した集約関数を適用します。集約関数は2つの異なる方法で定義することができます。リストで明示的に定義するか、属性セレクタを使用してこれらの列のデフォルトの集約関数を指定する方法です。この2つの方法は組み合わせることができます。SQLで知られているHAVING句は、このオペレータに続く追加のFilter Examplesオペレータでシミュレートできることに注意してください。
詳細: Aggregate
Convert Type
選択した列のデータ型を変換します。属性フィルタが選択したすべての列に適用されるデフォルトの変換を指定することができます。 個々の列のデータ型変換を指定することもできます。推奨されるデータ型はデータベース固有のもので、ドロップダウンリストにないデータ型は手動で入力することができます。特定のデータ型については、DECIMAL(8,2)、NUMERIC(6,3)、VARCHAR2(150)など、さらにデータ型を指定することができます。出力メタデータのデータ型は、これらのデータベース固有の値に対してのみ使用可能で、そうでない場合は汎用のattribute_valueが使用されます。
詳細: Convert Type
Custom Query
このオペレータはカスタムSQLクエリをプロセスのステップとして実行することができます。クエリでは複数の入力を使用することができます。入力を参照するには、クエリ内で input1、input2 などを使用します。SELECT式では、これらの入力を参照するために t1、t2 のエイリアスを使用します。複数の入力を使用するクエリの例を以下に示します。
SELECT t2.* FROM input1 JOIN input2 ON t1.a1 = t2.a1
出力ポートのメタデータは、指定されたSQLクエリの予想される結果を自動的に反映するわけではないことに注意してください。デフォルトでは、出力ポートのメタデータは単に最初の入力ポートのメタデータをコピーします。これを変更するには、メタデータパラメータを使用して、予想されるメタデータを手動で設定し、後続のオペレータをより簡単に設定できるようにします。また、Read Metadataボタンをクリックするだけで、指定したクエリをデータベースが解析して、このパラメータを設定することもできます。SQLコードを変更し、異なる結果が返ってくることを希望する場合は、毎回このボタンをクリックしなければならないことに注意してください。
詳細: Custom Query
Filter Example Range
このオペレータはより少数の行セットだけを保持することを可能にします。行数とオフセットを指定することができ、オフセットはサンプルを開始する行を定義します。サンプルはランダムなサンプルではなく、データセットの後続の行から構成されることに注意してください。
Filter Examples
このオペレータは式(データベース固有の関数も使用可能)または単純な式の組み合わせによって定義された基準に基づいて、行のセットをフィルタリングします。どちらの場合も、適切なボタンをクリックすることでアクセスできるダイアログが役立ちます。
フィルタ式を作成する際に、process_start_dbやt_dbのような組み込みマクロが役に立つ場合があります。詳細については、Nestオペレータのヘルプを確認してください。
詳細: Filter Examples
Generate Attributes
このオペレータは新規列を作成することや、既存の列を上書きすることができます。新規列は最後の列として表示され、上書きされた列は列リスト内の位置を保持します。式エディタダイアログを使用すると、列式を簡単に作成できます。データベース固有の組み込み関数、列、定数も表示されます。オペレータは式の構文をチェックすることはできないことに注意してください。プロセス実行中に式が間違っているとエラーが発生するだけです。表示される関数リストと関数の説明は、選択したデータベースタイプの特定のバージョンを反映したものであり、その目的はUIで式を作成する手助けをするだけです。そうでない場合、データベースバージョンによって多少異なる関数や構文が簡単に提供される可能性があります。
属性式を作成する際に、process_start_dbやt_dbのような組み込みマクロが役に立つ場合があります。詳細については、Nestオペレータのヘルプを確認してください。
Generate Rank
行のランクは、指定された行の前のランクの数に 1 を加えたものです。行の密なランクは、指定された行の前の明確なランクの数に 1 を加えたものです。パーティショニングが定義されていない場合、データセット全体がソートされるため、大規模なデータ セットでは操作が遅くなる可能性があります。データセットに一意なID変数を追加する場合は、データベース固有の関数、例えばOracleのROWNUMを使用することをお勧めします。
詳細: Generate Rank
Join
このオペレータはよく知られている(等価)結合操作を実装しています。内部結合、左結合、右結合、または外部結合が可能です。キーのリストはパラメータで定義することができます。このオペレータは(名前に基づいて)重複する列を削除または保持することができます。
詳細: Join
Rename
このオペレータはデータセットの1つ以上の列の名前を変更することができます。
参照: Rename
Rename by Replacing
このオペレータは列名の一部(空白、括弧、その他の不要な文字など)を指定した置換文字で置き換えます。replace_whatパラメータは正規表現で定義することができます(説明についてはチュートリアルを参照してください)。replace_byパラメータには任意の文字列を指定することができます。空文字列でもかまいません。定義された正規表現のグループは、$1, $2, $3…でアクセスすることができます。
Reorder Attributes
このオペレータは属性の順序を定義することができます。また、属性のサブセット(正規表現を使用可能)に対して属性の順序を定義し、それらの属性のみをSELECTし、一致しない属性を削除することもできます。また、一致しない属性をソートし、指定した属性リストに追加または前置することもできます。
Replace
このオペレータは適用されるすべてのノミナル属性の文字列値の一部を置き換えます。属性フィルタタイプにより、それらを制限することができます。各属性の値について、replace whatの正規表現が文字列に一致するかどうかがチェックされます。文字列の一致した部分はそれぞれreplace_whatパラメータの値で置き換えられます。置換は空の場合があり、キャプチャグループを含むことができます。
データベースによっては正規表現をサポートしていない場合があり、その場合は特殊文字を使用するとデザイン時に警告が表示されることに注意してください。また、正規表現はデータベースエンジンによって異なる可能性があることにも注意してください。より複雑な例については、データベースのドキュメントを参照してください。
値が置き換えられた列の出力データ型はデータベースによって異なることに注意してください(例えば、MySQLの場合、LONGTEXTはRapidMinerではTextになります)。その他の場合、置換式によって値がデフォルトの戻り値のデータ型に対して大きくなりすぎる場合もあり、その場合は結果が誤っている可能性があります(例えば、Oracleでは最大 4000 文字)。
例: 属性には「color red」、「color green」、「color blue」という値が含まれます。
- 「color 」を「」に置き換えると、「red」、「green」、「blue」になります。
- 「color 」を「colour」に置き換えると、「colour red」、「colour green」、「colour blue」になります。
- 「color¥s」を「」に置き換えると、「red」、「green」、「blue」になります。
- 「\s+」を「_」 に置き換えると、「color_red」、「color_green」、「color_blue」になります。
詳細: Replace
Sample
このオペレータはFilter Example Rangeオペレータに似ています。sampleパラメータの設定により、サンプル内の例数を絶対ベースまたは確率ベースで指定できます。絶対サンプルの場合、返される行の正確な数を定義することができます。一方、確率の場合、必要なパラメータはサンプル確率であり、[0,1]の値で、返される行数をすべての行と比較して定義します。ゼロの場合、絶対サンプルを 0 に設定するのと同じです。1 の場合、入力が返されます。データベースによっては、ランダムサンプル生成のためのシードを定義することが可能です。そうでない場合は、結果が決定論的でない可能性があります。
詳細: Sample
Select Attributes
このオペレータはパラメータに従って特定の列のみを保持します。
Sort
このオペレータは指定したパラメータに従って行を並べ替えます。複数のソート属性と方向(昇順、降順)を選択することができます。ソートは通常、時間とメモリの点で最もコストのかかるデータベース操作の1つであることに注意してください。
参照: Sort
Union
このオペレータは最初の入力の行に2番目の入力の行を追加することで、スキーマが同じか互換性のある2つの入力データセットを結合します。重複した行を削除することもできますが、デフォルトでは保持されます。
参照: Union
Cleansing (3)
Declare Missing Value
指定された値は、指定されたサブセット全体を通してNULLに置き換えらるため、後続のオペレータによって欠損値として扱われます。
Remove Duplicates
このオペレータはデータセット内の異なる行のみを保持します。つまり、重複行のインスタンスは1つしか保持しません。
Replace Missing Values
例の欠落値を置き換えます。値が欠落している場合、「minimum」、「maximum」、「average」、「none 」のいずれかの関数で置き換えられ、Example Setの欠落していない属性値に適用されます。「none」は値が置き換えられないことを意味します。関数はパラメータリストの列を使用して選択することができます。属性名がキーとしてこのリストに表示されている場合、その値が関数名として使用されます。属性名がリストにない場合は、デフォルトパラメータで指定された関数が使用されます。補充「値 」は、ユーザー定義パラメータを補充に使用することを示します。これは、名目値または数値にすることができます。
Utility (2)
Multiply
このオペレータはこの時点から複数の分岐を開始するために使用することができます。同じデータセットを異なる分岐で異なるように処理することができます。このオペレータはデータベースに一時的なデータを書き込まないため、入力のクエリは出力ごとに再実行されることに注意してください。もちろん、データベースのオプティマイザーがこれを改善してくれます。
詳細: Multiply
Subprocess
任意の数の内部オペレータを持つことができる単純なオペレータチェーンです。オペレータはその後に適用され、その出力は後続のオペレータの入力として使用されます。オペレータチェーンの入力は最初の内部オペレータの入力として使用され、最後のオペレータの出力はオペレータチェーンの出力として使用されます。
詳細: Subprocess