🎃

Cloud Spanner のGoogleSQL句に新しく追加されたARRAY関数とLambda式

2023/04/06に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の永山です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンになります。

データML ディビジョンでは活動の一環として、毎週Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

今回紹介するリリースは、「Cloud Spanner のGoogleSQL句に新しく追加されたARRAY関数とLambda式」についてになります。

このリリースによって、新たなARRAY関数の機能が追加され、配列の処理がよりシンプルに行えるようになりました。

リリース内容と検証

本稿では、新しく追加された以下の機能についてまとめました。

Cloud Spanner のリリースノート(2023/3/172023/3/21

ARRAY_INCLUDES_ALL 関数

  • 検索対象の配列にすべての検索値が含まれている場合はTRUEを返し、そうでない場合はFALSEを返します。
  • フォーマットは以下になります。
      ARRAY_INCLUDES_ALL( 検索対象の配列, 検索値の配列 )  
関数 出力値
ARRAY_INCLUDES_ALL([1,2,3,4,5], [3,4,5]) TRUE
ARRAY_INCLUDES_ALL([1,2,3,4,5], [4,5,6]) FALSE

ARRAY_INCLUDES_ANY 関数

  • 検索対象の配列に一つでも検索値が含まれている場合はTRUEを返し、そうでない場合はFALSEを返します。
  • フォーマットは以下になります。
      ARRAY_INCLUDES_ANY( 検索対象の配列, 検索値の配列 )  
関数 出力値
ARRAY_INCLUDES_ANY([1,2,3], [3,4,5]) TRUE
ARRAY_INCLUDES_ANY([1,2,3], [4,5,6]) FALSE

ARRAY_MIN 関数

  • 配列内の最小値を返します(文字列の場合は一番短い文字列)。
  • 配列自体がNULLの場合や、配列の要素が空、またはNULLのみ含まれている場合、NULLが返されます。
  • 配列にNaNが含まれている場合はNaNが返されます。
  • フォーマットは以下になります。
      ARRAY_MIN( 配列 )  
関数 出力値
ARRAY_MIN([8,37,NULL,55,4]) 4
ARRAY_MIN(["a","bb","ccc",NULL,"dddd"]) a
ARRAY_MIN(NULL) NULL
ARRAY_MIN([]) NULL
ARRAY_MIN([NULL,NULL,NULL]) NULL

ARRAY_MAX 関数

  • 配列内の最大値を返します(文字列の場合は一番長い文字列)。
  • 配列自体がNULLの場合や、配列の要素が空、またはNULLのみ含まれている場合、NULLが返されます。
  • 配列にNaNが含まれている場合はNaNが返されます。
  • フォーマットは以下になります。
      ARRAY_MAX( 配列 )  
関数 出力値
ARRAY_MAX([8,37,NULL,55,4]) 55
ARRAY_MAX(["a","bb","ccc",NULL,"dddd"]) dddd
ARRAY_MIN(NULL) NULL
ARRAY_MIN([]) NULL
ARRAY_MIN([NULL,NULL,NULL]) NULL

Lambda 式

  • 以下の関数でLambda式を設定することが可能です。

    ARRAY_INCLUDES( 検索対象の配列, Lambda式 )

    • 以下のフォーマットでLambda式を構成
        element_alias -> boolean_expression  

    ARRAY_FILTER( 対象配列, Lambda式 )

    • 以下のフォーマットでLambda式を構成
        element_alias -> boolean_expression  
       または
        (element_alias, index_alias) -> boolean_expression  

    ARRAY_TRANSFORM( 対象配列, Lambda式 )

    • 以下のフォーマットでLambda式を構成
        element_alias -> boolean_expression  
       または
        (element_alias, index_alias) -> boolean_expression  

    例:ARRAY_INCLUDES( 検索対象の配列, Lambda式 )

    • 検索対象の配列の値がLambda式で指定した範囲に含まれればTRUEを返し、含まれない場合はFALSEを返す。

      関数 出力値
      ARRAY_INCLUDES([1,2,3], e -> e > 2) TRUE
      ARRAY_INCLUDES([1,2,3], e -> e > 3) FALSE

ARRAY_FILTER 関数

  • 対象配列にフィルターをかけた結果を返します。
  • 対象配列がNULLの場合、NULLが返されます。
  • フォーマットは以下になります。
      ARRAY_FILTER( 対象配列, Lambda式 )  
関数 出力値
ARRAY_FILTER([1,2,3], e -> e > 1) [2,3]
ARRAY_FILTER([-1,-2,2,5], (e, i) -> e > i) [5]

ARRAY_TRANSFORM 関数

  • 対象配列にLambda式で変換をかけた結果を返します。
  • 対象配列がNULLの場合、NULLが返されます。
  • フォーマットは以下になります。
      ARRAY_TRANSFORM( 対象配列, Lambda式 )  
関数 出力値
ARRAY_TRANSFORM([1,2,3], e -> e + 1) [2,3,4]
ARRAY_TRANSFORM([1,2,3], (e, i) -> e + i) [1,3,5]

まとめ

今回の記事の内容をまとめると、Cloud SpannerにGoogleSQLで使用できる関数やLambda式が増えたことで、より一層データの抽出や処理がシンプルに実行できるようになります。
これからも新しい機能の追加に期待です。

Discussion