注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このトピックでは、Contour の式で使用すると便利な配列関数を紹介します。
Contour では、配列は式ボードでのみサポートされています。列の式で配列を操作した後は、ほかの Contour ボードでも使用できるように、array_join を使用して結果の配列を文字列に変換する必要があります。
array_length 関数を使用すると、配列の長さを取得できます。これは、絞り込みを行うときに役立ちます。
たとえば、配列の列 items_array がある場合、以下に示すように、フィルター式ボードで array_length 関数を使用して配列の長さを取得できます。
array_length(items_array) > 0
array_agg 関数を使用すると、列内の値を結合できます。
購入履歴のテーブルがあり、特定の顧客が購入したすべての項目の配列を含む新しい列を作成したいとします。
テーブルが次のようになっている場合を考えます。
| customer_id | item |
|---|---|
| 123 | bread |
| 123 | eggs |
| 444 | milk |
| 444 | bananas |
| 444 | bread |
次の関数を使用すると、結合した値を含む新しい列を作成できます。
array_join( array_agg("item") OVER (PARTITION BY "customer_id"), ', ' )
これを部分ごとに説明します。
array_agg は、指定した列のすべての値を配列として返します。ここでは、列の引数としてウィンドウ関数を渡しています。そのため、列内のすべての値を集約する次の式ではなく、array_agg("item")
次の式を使用しています。
array_agg("item") OVER (PARTITION BY "customer_id")
この式は、customer_id ごとに値を集約します。
array_agg_distinct は、指定した列の重複しないすべての値を配列として返します。array_agg とは異なり、この関数では、結果の配列に各値が1回だけ出現することが保証されます。
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 |
式エディターを開き、「列を置換」を選択します。コード explode(items_array) を使用すると、次のテーブルになります。
| customer_id | items_array |
|---|---|
| 123 | eggs |
| 123 | bread |
| 444 | milk |
| 444 | bananas |
| 444 | bread |
explode 関数は null を除外します。null を保持するには、explode_outer 関数を使用します。