Athena エンジンバージョンのリファレンス - Amazon Athena

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Athena エンジンバージョンのリファレンス

このセクションでは、Athena 以降の クエリエンジンに対する変更点を示します。 は Athena の最初のエンジンバージョンで、Presto 0.172 に基づいています。

Presto 0.217 に基づく には、次の変更が導入されています。

改善と新機能

  • フェデレーテッドクエリ フェデレーテッドクエリは – でサポートされています。詳細については、「」を参照してください。 を使用するAmazon Athena Federated Query (Preview).

  • 地理空間関数 – 25 を超える地理空間関数が追加されました。詳細については、「」を参照してください。の新しい地理空間関数.

  • ネストされたスキーマ ネストされたスキーマを読み取るための – サポートが追加されました。これにより、コストを削減できます。

  • スキーマの進化のサポート Parquet 形式のデータに – スキーマの進化のサポートが追加されました。

    • パーティションスキーマがテーブルスキーマと異なるパーティションから配列、マップ、または行型の列を読み取るためのサポートが追加されました。これは、パーティションの作成後にテーブルスキーマが更新された場合に発生します。変更された列タイプは互換性がある必要があります。行タイプの場合、末尾のフィールドは追加または削除される場合がありますが、対応するフィールド (序数) の名前は同じである必要があります。

    • ORC ファイルは、フィールドがない構造体列を持つことができるようになりました。これにより、ORC ファイルを書き換えることなくテーブルスキーマを変更できます。

    • ORC 構造体列は、序数ではなく名前でマッピングされるようになりました。これにより、ORC ファイルの不足しているフィールドや追加の構造体フィールドが正しく処理されます。

グループ、結合、およびサブクエリの改善

  • 複雑なグループ化 – 複雑なグループ化オペレーションのサポートを追加しました。

  • 相関サブクエリ 述語の相関サブクエリと強制を必要とする相関サブクエリのサポートが追加されました。–IN

  • Cross JOIN – 派生テーブルに対する CROSS JOIN のサポートが追加されました。LATERAL

  • GROUPING SETS – を使用するクエリの集約で、ORDER BY 句のサポートが追加されました。GROUPING SETS

  • 式Lambda 式で行フィールドの参照解除のサポートを追加しました。–Lambda

  • 半結合の Null 値 – 半結合の左側にある null 値のサポートを追加しました (つまり、サブクエリを含む IN 述語)。

  • [ 空間結合–] ブロードキャスト空間結合と空間左結合のサポートが追加されました。

  • ディスクに流出する – メモリを大量に消費する INNER JOIN および LEFT JOIN オペレーションの場合、Athena は中間オペレーションの結果をディスクにオフロードします。これにより、大量のメモリを必要とするクエリを実行できます。

  • INT for INTEGER – データ型のエイリアスとして INT のサポートが追加されました。INTEGER

  • INTERVAL タイプ – タイプへのキャストのサポートが追加されました。INTERVAL

  • IPADDRESS – IP アドレスを表す新しい IPADDRESS 型を追加しました。タイプと VARBINARY タイプの間のキャストのサポートを追加しました。IPADDRESS

  • IS DISTINCT FROM – および IS DISTINCT FROM タイプの JSON サポートを追加しました。IPADDRESS

  • Null 等価チェック –、ARRAY、および MAP データ構造体の null 値の等価チェックがサポートされるようになりました。ROWたとえば、式 ARRAY ['1', '3', null] = ARRAY ['1', '2', null]false を返します。 以前は、null 要素がエラーメッセージを返していました。comparison not supported.

  • 行タイプの強制 フィールド名に関係なく、行のタイプ間の強制が許可されるようになりました。–以前は、ソースタイプのフィールド名がターゲットタイプと一致した場合、またはターゲットタイプに匿名のフィールド名があった場合にのみ、行タイプは別のタイプに強制変換可能でした。

  • 時間減算 – と TIME のすべての型に対して減算を実装しました。TIMESTAMP

  • Unicode – 文字列リテラルでエスケープされた Unicode シーケンスのサポートを追加しました。

  • VARBINARY 連結 – 値の連結のサポートを追加しました。VARBINARY

関数の追加の入力タイプ

次の関数は追加の入力タイプを受け入れるようになりました。各関数の詳細については、Presto のドキュメントに対応するリンクを参照してください。

追加された 関数

以下のリストには、Athena エンジンバージョン 2 で新しく更新された関数が含まれています。この一覧には地理空間関数は含まれていません。地理空間関数のリストについては、「の新しい地理空間関数」を参照してください。

各関数の詳細については、Presto のドキュメントに対応するリンクを参照してください。

集計関数

reduce_agg()

配列関数および演算子

array_sort() - コンパレータとして Lambda 関数を受け取る、この関数のバリアントが追加されました。

ngrams()

バイナリ関数と演算子

from_big_endian_32()

from_ieee754_32()

from_ieee754_64()

hmac_md5()

hmac_sha1()

hmac_sha256()

hmac_sha512()

spooky_hash_v2_32()

spooky_hash_v2_64()

to_big_endian_32()

~_ieee754_32()

~_ieee754_64()

日付/時刻関数および演算子

ミリ秒()

parse_duration()

~_milliseconds()

マップ関数および演算子

multimap_from_entries()

数学関数および演算子

inverse_normal_cdf()

wilson_interval_lower()

wilson_interval_upper()

分位ダイジェスト関数

分位ダイジェスト関数qdigest 分位ダイジェストタイプが追加されました。

文字列関数および演算子

haming_distance()

split_to_multimap()

パフォーマンスの改善

エンジンバージョン 2 では、次の機能のパフォーマンスが向上しました。Athena

クエリパフォーマンス
  • バケット化されたテーブル – 書き込み対象のデータが既に適切にパーティション分割されている場合 (例: 出力がバケット化された結合からのもの) の、バケット化されたテーブルへの書き込みのパフォーマンスが向上しました。

  • DISTINCT – を使用する一部のクエリのパフォーマンスが向上しました。DISTINCT

  • フィルタと射影オペレーション – フィルタと射影オペレーションは、可能な場合は列によって常に処理されるようになりました。エンジンは、ディクショナリエンコードが有効な場合、自動的に活用します。

  • 交換の収集 – 交換の収集のクエリのパフォーマンスが向上しました。

  • グローバル集計 – フィルタ処理されたグローバル集計を実行する一部のクエリのパフォーマンスが向上しました。

  • GROUPING SETS, CUBE, ROLLUP –、GROUPING SETS、または CUBE を含むクエリのパフォーマンスが向上しました。ROLLUP

  • 非常に選択的なフィルター – 非常に選択的なフィルターでクエリのパフォーマンスが向上しました。

  • JOIN および AGGREGATE オペレーション – および JOIN オペレーションのパフォーマンスが強化されました。AGGREGATE

  • LIKE – テーブルの列で LIKE 述語を使用するクエリのパフォーマンスが向上しました。information_schema

  • ORDER BY および LIMIT – や ORDER BY を含むクエリの計画、パフォーマンス、メモリ使用量を改善して、不要なデータ交換を回避しました。LIMIT

  • ORDER BYORDER BY オペレーションがデフォルトで分散され、より大きな ORDER BY 句を使用できるようになりました。

  • ROW 型の変換 – 型間で変換するときのパフォーマンスが向上しました。ROW

  • [ 構造型] – 構造型を処理し、スキャン、結合、集計、またはテーブルの書き込みを含めるクエリのパフォーマンスが向上しました。

  • UNION – クエリのパフォーマンスを改善しました。UNION

クエリプランニングのパフォーマンス
  • 計画パフォーマンス 多数の列を持つ複数のテーブルを結合するクエリの計画パフォーマンスが向上しました。–

  • 述語の評価 – 計画で述語プッシュダウン中に述語の評価パフォーマンスが向上しました。

  • キャストの述語プッシュダウンサポート – の述語プッシュダウンをサポート <column> IN <values list> 述語。値リスト内の値で、列の型と一致するためにキャストが必要なとき。

  • 述語推論とプッシュダウン – を使用してクエリに対して拡張された述語推論とプッシュダウン <symbol> IN <subquery> 述語。

結合パフォーマンス
  • マップ列で結合 – マップ列を含む結合と集計のパフォーマンスが向上しました。

  • のみの非等価条件との結合 ハッシュ結合の代わりにネステッドループ結合を使用して、非等値との結合のパフォーマンスを改善しました。–

  • 外部結合 – 外部結合を含むクエリに対して結合ディストリビューションタイプが自動的に選択されるようになりました。

  • 関数結合に対する範囲 条件が関数に対する範囲である結合のパフォーマンスが向上しました (例: –)。a JOIN b ON b.x < f(a.x) AND b.x > g(a.x)

サブクエリのパフォーマンス
  • 相関 EXISTS サブクエリ – 相関 EXISTS サブクエリのパフォーマンスが向上しました。

  • 等価性を持つ相関サブクエリ – 等価述語を含む相関サブクエリのサポートが向上しました。

  • 不等号を持つ相関サブクエリ – 不等値を含む相関サブクエリのパフォーマンスが向上しました。

  • count(*) aggregations over subqueries – 既知の一定の基数を持つサブクエリにおける count(*) 集計のパフォーマンスが向上しました。

  • 外部クエリフィルタの伝達 – 外部クエリからのフィルタをサブクエリに伝達できる場合の、相関サブクエリのパフォーマンスが向上しました。

関数のパフォーマンス
  • 集計ウィンドウ関数 – 集計ウィンドウ関数のパフォーマンスが向上しました。

  • element_at() – マップのサイズに比例するのではなく一定の時間となるようにマップの element_at() のパフォーマンスを改善しました。

  • grouping() に関係するクエリのパフォーマンスが改善されました。–grouping()

  • JSON キャスト – キャストのパフォーマンスが JSON から ARRAY、または MAP に向上しました。

  • マップリターン関数 – マップを返す関数のパフォーマンスが向上しました。

  • Map-to-map キャスト – マップツーマップキャストのパフォーマンスを改善しました。

  • min() と max() – 関数と min() 関数は、不要なオブジェクトの作成を避けるために最適化されており、ガベージコレクションのオーバーヘッドを減らしています。max()

  • row_number() – 生成された行番号でフィルタに続いて row_number() を使用したクエリのパフォーマンスとメモリ使用量が改善されました。

  • ウィンドウ関数 – 句と PARTITION BY 句が同じウィンドウ関数を含むクエリのパフォーマンスが向上しました。ORDER BY

  • ウィンドウ関数 – 同様の仕様を持つ特定のウィンドウ関数 (LAG など) のパフォーマンスが向上しました。

地理空間パフォーマンス
  • ジオメトリのシリアル化 – ジオメトリ値のシリアル化パフォーマンスが向上しました。

  • 地理空間関数 –、ST_Intersects()ST_Contains()ST_Touches()ST_Within()ST_Overlaps()ST_Disjoint()transform_values()ST_XMin()ST_XMax()ST_YMin()ST_YMax()ST_Crosses() のパフォーマンスが向上しました。array_intersect()

  • ST_Distance() – 関数を含む結合クエリのパフォーマンスが向上しました。ST_Distance()

  • ST_Intersection() 座標軸に整列された長方形 (たとえば、– 関数と ST_Intersection() 関数で生成されるポリゴン) 用に ST_Envelope() 関数を最適化しました。bing_tile_polygon()

マップ関数

  • マップサブスクリプトのパフォーマンスが O(n) から O(1) に向上しました。以前は、特定の関数によって生成されたマップのみが、この改善を活用していました。

  • 関数と map_from_entries() 関数を追加しました。map_entries()

キャスト

  • JSON、または REAL から TINYINT にキャストする機能が追加されました。SMALLINT

  • JSON のすべてのフィールドが含まれていなくても、ROWJSON にキャストできるようになりました。ROW

  • のパフォーマンスが改善されました。CAST(json_parse(...) AS ...)

  • から JSON、または ARRAY 型へのキャストのパフォーマンスが向上しました。MAP

新しい JSON 関数

重要な変更

重要な変更には、バグ修正、地理空間関数の変更、変更された関数、制限の導入などがあります。ANSI SQL コンプライアンスの改善により、標準以外の動作に依存するクエリが破損する可能性があります。

バグ修正

以下の変更により、クエリが正常に実行される原因となった動作の問題が正しくなりましたが、不正確な結果があります。

  • json_parse() で末尾の文字が無視されなくなりました。 – などの入力は [1,2]abc として正常に解析されました。[1,2] 末尾の文字を使用すると、エラーメッセージが表示されるようになりました。Cannot convert '[1, 2]abc' to JSON.

  • round() 小数精度補正round(x, d) が DECIMAL の場合、または x がスケール 0 の DECIMAL で x が負の整数である場合に、x が正しく丸めるようになりました。d以前は、これらのケースでは丸めは発生しませんでした。

  • round(x, d) および truncate(x, d) – 関数 dround(x, d) の署名のパラメータ truncate(x, d)INTEGER 型になりました。 以前は、d タイプは BIGINT でした。

  • キーが重複している map()map() で、破損したマップをサイレント生成するのではなく、重複キーのエラーが発生するようになりました。現在重複するキーを使用してマップ値を構築しているクエリは、エラーで失敗するようになりました。

  • map_from_entries() が null エントリでエラーを発生させる – は、入力配列に null エントリが含まれているとエラーを発生させるようになりました。map_from_entries()を値として渡してマップを構築するクエリが失敗するようになりました。NULL

  • テーブル サポートされていないパーティションタイプを持つテーブルを作成できなくなりました。–

  • 統計関数の数値安定性の向上 統計関数 –、corr()covar_samp()regr_intercept() の数値安定性が向上しました。regr_slope()

  • タイムゾーン情報 タイムゾーン情報は、Java 1.8 SDK の –java.time パッケージを使用して計算されるようになりました。

  • INTERVAL_DAY_TO_SECOND および INTERVAL_YEAR_TO_MONTH データ型の SUM – を直接使用することはできません。SUM(NULL)を使用するには、SUM(NULL)NULLBIGINTDECIMALREALDOUBLEINTERVAL_DAY_TO_SECOND などのデータ型に INTERVAL_YEAR_TO_MONTH をキャストします。

地理空間関数の変更

地理空間関数への変更には、次のようなものがあります。

  • 関数名の変更 – 一部の関数名が変更されました。詳細については、「」を参照してください。での地理空間関数名の変更.

  • VARBINARY 入力 – タイプは地理空間関数への入力で直接サポートされなくなりました。VARBINARYたとえば、ジオメトリの面積を直接計算するには、ジオメトリを VARCHAR 形式または GEOMETRY 形式で入力する必要があります。回避策は、次の例のように変換関数を使用することです。

    • を使用して Well-Known Binary (WKB) 形式で ST_area() 入力の領域を計算するには、最初に入力を VARBINARY に渡します。次に例を示します。ST_GeomFromBinary()

      ST_area(ST_GeomFromBinary(<wkb_varbinary_value>))
    • を使用してレガシーバイナリ形式で ST_area() 入力の領域を計算するには、最初に同じ入力を VARBINARY 関数に渡します。次に例を示します。ST_GeomFromLegacyBinary()

      ST_area(ST_GeomFromLegacyBinary(<legacy_varbinary_value>))
  • ST_ExteriorRing() および ST_Polygon()ST_ExteriorRing() および ST_Polygon() は多角形のみを入力として受け入れるようになりました。以前は、これらの関数は他のジオメトリを誤って受け入れていました。

  • ST_Distance() –SQL/MM の仕様で定められているとおり、入力の 1 つが空のジオメトリの場合、ST_Distance() 関数は を返すようになりました。NULL以前は、NaN が返されていました。

ANSI SQL コンプライアンス

以下の構文と動作の問題は、ANSI SQL 標準に従うように修正されました。

  • cast() オペレーション REAL または DOUBLE から DECIMAL への – cast() オペレーションが SQL 標準に準拠するようになりました。たとえば、cast (double '100000000000000000000000000000000' as decimal(38)) では以前 100000000000000005366162204393472 を返しましたが、現在は 100000000000000000000000000000000 を返しています。

  • JOIN ... の使用JOIN ... USING が標準の SQL セマンティクスに準拠するようになりました。以前は、JOIN ... USING で列内のテーブル名の修飾が必要だったため、両方のテーブルの列が出力に表示されます。テーブル条件が無効になり、列が出力に 1 回のみ存在するようになりました。

  • ROW 型のリテラルが削除された – ROW 型のリテラル形式 ROW<int, int>(1, 2) はサポートされなくなりました。代わりに、構文 ROW(1 int, 2 int) を使用してください。

  • log() 関数 – 以前は、SQL 標準違反で、log() 関数内の引数の順序が逆でした。これにより、クエリが他の SQL 実装との間で変換されると、log() は誤った結果を返します。と同等のものが正しく log(x, b) になるようになりました。ln(x) / ln(b)

  • グループ化された集約セマンティクス グループされた集約は、等価セマンティクスではなく – セマンティクスを使用します。IS NOT DISTINCT FROMグループ化された集計は、正しい結果を返し、NaN 浮動小数点値をグループ化するときにパフォーマンスが向上するようになりました。マップ、リスト、および null を含む行型のグループ化がサポートされています。

  • 引用符で囲んだデータ型は使用できなくなりました ANSI SQL 標準に従って、データ型を引用符で囲むことはできません。–たとえば、SELECT "date" '2020-02-02' は有効なクエリではなくなりました。代わりに、構文 SELECT date '2020-02-02' を使用します。

  • [Anonymous row field access (匿名行フィールドへのアクセス)] – 匿名行フィールドは、構文 [.field0, .field1, ...] を使用してアクセスできなくなります。

置換された関数

以下の関数はサポートされなくなり、同じ結果を生成する構文に置き換えられました。

  • information_schema.__internal_partitions__ – の使用がサポートされなくなりました。__internal_partitions__同等の構文には、SELECT * FROM "<table_name>$partitions" または SHOW PARTITIONS を使用します。 詳細については、「特定の表のパーティションのリスト化」を参照してください。

  • 置換された地理空間関数 – 名前が変更された地理空間関数のリストについては、「での地理空間関数名の変更」を参照してください。

Limits

エンジンバージョン 2 では、リソースの制限によりクエリが失敗しないように、以下の制限が導入されました。Athenaこれらの制限は、ユーザーが設定することはできません。

  • 結果要素の数 – 結果要素の数nは、関数 min(col, n)max(col, n)min_by(col1, col2, n)max_by(col1, col2, n) で 10,000 以下に制限されています。

  • GROUPING SETS – グループ化セット内のスライスの最大数は 2048 です。

  • テキストファイルの最大行長 – テキストファイルのデフォルトの最大行長は 100 MB です。

  • シーケンス関数の最大結果サイズ – シーケンス関数の最大結果サイズは 50000 エントリです。たとえば、SELECT sequence(0,45000,1) は成功しますが、SELECT sequence(0,55000,1) はエラーメッセージ で失敗します。The result of the sequence function must not have more than 50000 entries。 この制限は、タイムスタンプを含むシーケンス関数のすべての入力タイプに適用されます。