注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このトピックでは、Contour の 式 で使用する可能性のある配列関数について強調します。
配列は Contour の式ボードでのみサポートされていることに注意してください。行の式で配列を使用した後、array_join を使用して結果の配列を文字列に変換し、他の Contour ボードで使用できるようにする必要があります。
配列の長さを取得するには、array_length 関数を使用できます。これはフィルター処理する際に役立ちます。
例えば、配列行 items_array がある場合、フィルター式ボードで array_length 関数を使用して配列の長さを取得できます。下記のように指示されています。
array_length(items_array) > 0 # 配列の長さが0より大きい場合
array_agg 関数を使用して、行内の値を結合することができます。
例えば、購入された商品のテーブルがあるとします。特定の顧客によって購入されたすべての商品の配列を含む新しい行を作成したいと思います。
ユーザーのテーブルが以下のようになっているとします:
| customer_id | item |
|---|---|
| 123 | bread |
| 123 | eggs |
| 444 | milk |
| 444 | bananas |
| 444 | bread |
以下の関数を使用して、結合された値を含む新しい行を作成することができます:
// "customer_id" ごとに "item" を集約し(array_agg)、その結果をカンマ区切りの文字列に結合(array_join)します
array_join( array_agg("item") OVER (PARTITION BY "customer_id"), ', ' )
これをその部分に分けると:
array_agg は、指定した行のすべての値の配列を返します。ここでは、行の引数として window function を指定しました。したがって、array_agg("item")
とすると、行のすべての値を集計しますが、
array_agg("item") OVER (PARTITION BY "customer_id")
とすると、customer_id ごとに 値を集計します。
array_agg_distinct は、指定した行のすべての異なる値の配列を返します。array_agg とは異なり、この関数は結果の配列中で各値が一度だけ表示されることを保証します。
array_join は変換関数で、配列内のアイテムをデリミタで区切って文字列に結合します。一般的には、次のようになります:
array_join(<array>, <delimiter>)
したがって、[milk, bananas, bread] は "milk, bananas, bread" になります。
結果の行、items_array は次のようになります:
| customer_id | items_array |
|---|---|
| 123 | eggs, bread |
| 444 | milk, bananas, bread |
すでにプライマリキーと値の配列をマッピングする行がある場合、explode 関数を使用してこれらを分解することができます。これにより、配列内の各値に対して新しい行が作成されます。したがって、次のようになります:
| customer_id | items_array |
|---|---|
| 123 | eggs, bread |
| 444 | milk, bananas, bread |
Expression Editor を開き、'Replace column' を選択します。コード explode(items_array) は次のテーブルを生成します:
| customer_id | items_array |
|---|---|
| 123 | eggs |
| 123 | bread |
| 444 | milk |
| 444 | bananas |
| 444 | bread |
explode 関数は null を削除することに注意してください。null を保持するには、explode_outer 関数を使用します。