LoginSignup
0
0

More than 1 year has passed since last update.

Athenaの特定のSQLクエリ構文のクエリ結果が変更になるよう(2021/12/1以降)

Posted at

概要

  • 2021年12月1日以降、Athenaの特定のSQLクエリ構文のクエリ結果が変更になるようです。
  • 今回は、その該当するクエリ構文がどのようなものかをまとめました。

該当するクエリ構文

1: CHAR 型カラムと文字列リテラルの比較の評価が容易になります。文字列リテラルにはパディングは必要ありません。

データ型 CHAR (5) の col5 という名前の列があり、列 col5 の値 'abcd ' (末尾のスペースに注意) の行が含まれている。

現在の仕様: クエリで結果を一致させるには、まったく同じ文字列リテラルを使用する必要があった。

SELECT 1 FROM t WHERE col5 = 'abcd '; (末尾にスペースが必要)

新しい仕様: 条件と一致するためにクエリの末尾にスペースを入れる必要がなくなった。

SELECT 1 FROM t WHERE col5 = 'abcd';

ちなみに、上記のクエリは両方とも一致し、現在の動作は引き続き有効な模様。

2: MAP 型の存在しないキーにアクセスすると、結果として NULL が返されるのではなく、エラーが発生する。

現在の仕様: MAP データから存在しないキー「abc」の値にアクセスする際に、キー 'abc' は MAP に存在しないため、Athena は NULL を返す。

新しい仕様: Athenaが「マップに存在しないキー:abc」を示すエラーを返す。

下記のようなクエリを発行し、NULL を返すことを望む場合は、TRY 関数を利用する。

SELECT MAP(array['foo', 'bar'], array[1, 2])['abc'];
SELECT TRY(MAP(array['foo', 'bar'], array[1, 2])['abc']);

3: 「.field [n]」形式の匿名行フィールドへのアクセスはサポートされなくなった。

現在の仕様: 匿名行のフィールドにアクセスすると、Athena は次のクエリの最初のフィールド ('a') を返す。

SELECT ROW('a', 'b').field0;

新しい仕様: Athena は「列 'ROW ('a', 'b') .field0' を解決できません」というエラーを報告する。

ただ、匿名でない行にアクセスする方法には影響しない。
次のクエリは変わらず動作し、'a' を返します。

SELECT CAST(row('a', 'b') AS ROW(col0 char, col1 char)).col0;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0