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

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

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

このセクションでは、Athena エンジンバージョン 1 以降の Athena クエリエンジンの変更点を示します。Athena エンジンバージョン 1 はアテナの初期エンジンバージョンであり、Presto 0.172

Athena エンジンのバージョン 2

に基づいているAthena エンジンのバージョン2、Presto 0.217では、次の変更点を紹介しています。現在、Athena エンジンのバージョン 2 は、アフリカ (ケープタウン)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、カナダ (中部)、欧州 (フランクフルト)、中部)、欧州 (フランクフルト)、カナダ (中部)、欧州 (フランクフルト)、欧州 (中部)、欧州 (フランクフルト) (フランクフルト)、中部)、欧州 (中部)Paris)、中東 (バーレーン)、および米国西部 (北カリフォルニア)、およびオレゴン) リージョンです。

改善と新機能

  • フェデレーテッド・クエリ— フェデレーションクエリは、Athena エンジンバージョン 2 でサポートされています。詳細については、「Amazon Athena フェデレーティッドクエリの使用」を参照してください。

  • 地理空間関数— 25 以上の地理空間関数が追加されました。詳細については、「Athena エンジンバージョン 2 の新しい地理空間関数」を参照してください。

  • ネストされたスキーマ— ネストされたスキーマを読み取るためのSupport が追加され、コストが削減されました。

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

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

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

    • ORC 構造体列は、序数ではなく名前でマップされるようになりました。これは、ORCファイル内の欠落または余分な構造体フィールドを正しく処理します。

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

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

  • 相関性のあるサブクエリ— 相関サブクエリのサポートを追加IN述語と、強制を必要とする相関サブクエリです。

  • クロス結合— のサポートが追加されました。CROSS JOINに対してLATERAL派生テーブル。

  • グループ化セット— のサポートが追加されました。ORDER BYを使用するクエリのための集計の句GROUPING SETS

  • Lambda 式— Lambda 式の行フィールドの逆参照のサポートが追加されました。

  • セミジョインのNull 値— セミジョインの左側に null 値のサポートを追加 (つまり、INサブクエリを含む述語)。

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

  • ディスクへの流出— メモリを大量に消費するINNER JOINおよびLEFT JOIN操作では、Athena は中間操作の結果をディスクにオフロードします。これにより、大量のメモリを必要とするクエリの実行が可能になります。

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

  • 間隔タイプ— キャストのサポートがINTERVALタイプ。

  • IPADDRESSES— 新しいIPADDRESS型を使用して IP アドレスを表します。間にキャストのサポートが追加されました。VARBINARYタイプおよびIPADDRESSタイプを作成することができます。

  • とは区別される— 以下を追加。IS DISTINCT FROMのサポートはJSONおよびIPADDRESSタイプ。

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

  • 行タイプの強制— フィールド名に関係なく、行タイプ間の強制が可能になりました。以前は、ソース型のフィールド名がターゲット型と一致する場合、またはターゲット型に匿名フィールド名がある場合にのみ、行型が別の型に強制されていました。

  • 時間減算— すべてのTIMEおよびTIMESTAMPタイプ。

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

  • VARBINAY 連結— 連結のサポートの追加VARBINARY値。

関数の追加入力タイプ

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

  • adproxid ()adproxid ()関数で、次のタイプがサポートされるようになりました。INTEGERSMALLINTTINYINTDECIMALREALDATETIMESTAMPTIMESTAMP WITH TIME ZONETIMETIME WITH TIME ZONEIPADDRESS, およびCHAR

  • avg (), sum ()avg ()およびSUM ()集計関数がINTERVALデータ型。

  • lpad()、rpad()lpadおよびrpad関数が動作するようになりましたVARBINARY入力を作成することができます。

  • 最小 (), 最大 ()min ()およびmax ()集計関数は、クエリ分析時に不明な入力タイプを許可するようになりました。これにより、NULLリテラル。

  • regexp_replace ()— バリアントregexp_replace ()関数が追加され、置換ごとにLambda 関数を実行できます。

  • シーケンス()— 以下を追加。DATEのバリアントシーケンス()暗黙の1日ステップインクリメントを持つバリアントを含む関数です。

  • ST_Area ()ST_Area ()空間関数では、すべてのジオメトリタイプがサポートされるようになりました。

  • substr ()substr関数がVARBINARY入力を作成することができます。

  • zip_with ()— 長さが一致しない配列をzip_with ()。欠落した位置は null で埋められます。以前は、異なる長さの配列が渡されたときにエラーが発生していました。この変更により、配列を同じ長さに埋め込むために追加された値と、もともと null であった値を区別することが困難になる場合があります。

関数の追加

次のリストには、Athena エンジンバージョン 2 の新機能が含まれています。このリストには、空間関数は含まれません。空間関数のリストについては、Athena エンジンバージョン 2 の新しい地理空間関数

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

集計関数

reduce_agg ()

配列関数および演算子

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

ngram ()

バイナリ関数および演算子

from_big_endian_32 ()

from_iee754_32 ()

from_iee754_64 ()

md5 ()

hmac_sha1 ()

sha256 ()

sha512 ()

spooky_hash_v2_32 ()

spooky_hash_v2_64 ()

to_big_endian_32 ()

to_ieee754_32 ()

to_ieee754_64 ()

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

millisegond (

duration ()

to ミリ秒 ()

マップ関数および演算子

multimap_from_entries ()

数学関数および演算子

normal_cdf ()

wilson_interval_lower ()

wilson_interval_upper ()

分位ダイジェスト関数

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

文字列関数および演算子

hamming ()

split_to_multimap ()

パフォーマンスの向上

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

クエリパフォーマンス
  • バケット化されたテーブル— 書き込まれるデータがすでに適切にパーティション化されている場合 (たとえば、出力がバケット化されたジョインからの場合)、バケット化されたテーブルへの書き込みのパフォーマンスが向上しました。

  • DISTINCT— 一部のクエリでパフォーマンスが向上しましたDISTINCT

  • フィルタ操作と投影操作-フィルタ操作と投影操作は、可能であれば常に列で処理されるようになりました。エンジンは自動的に辞書エンコーディングを効果的に利用します。

  • 交流の集まり— 交換の収集によるクエリのパフォーマンスが向上しました。

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

  • グループ化セット、キューブ、ロールアップ— 関連するクエリのパフォーマンスが向上しましたGROUPING SETSCUBEまたはROLLUP

  • 選択性の高いフィルター— 選択性の高いフィルターを使用したクエリのパフォーマンスが向上しました。

  • 結合操作と集約操作— のパフォーマンスJOINおよびAGGREGATEオペレーションが強化されました。

  • のような— クエリパフォーマンスが向上しました。LIKEの列上の述語information_schemaテーブル。

  • ORDER BY と制限— クエリに対する計画、パフォーマンス、メモリ使用量の改善ORDER BYおよびLIMITを使用して不必要なデータ交換を回避できます。

  • ORDER BYオペレーションがデフォルトで配布されるようになり、ORDER BY句を使用します。

  • ROW タイプの変換— 変換時のパフォーマンスの向上ROWタイプ。

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

  • UNION— のパフォーマンスが向上しました。UNIONクエリ。

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

  • 述語評価— プランニングにおける述語プッシュダウン時の述語評価のパフォーマンスが向上しました。

  • キャストのための述語プッシュダウンのサポート— 述語プッシュダウンSupport する <column> IN <values list> 述語では、値リストの値が列の型と一致するようにキャストする必要があります。

  • 述語推論とプッシュダウン— 述語推論とプッシュダウンが拡張された <symbol> IN <subquery> 述語。

Join パフォーマンス
  • マップ列との結合— マップ列を含む結合および集約のパフォーマンスが向上しました。

  • 非等価条件のみを持つ結合— ハッシュ・ジョインではなくネストされたループ・ジョインを使用して、非等価条件のみのジョインのパフォーマンスを改善しました。

  • 外部結合— 外部結合を含むクエリに対して、結合分散タイプが自動的に選択されるようになりました。

  • 関数結合の範囲— 条件が関数上の範囲であるジョインのパフォーマンスが向上しました (たとえば、a JOIN b ON b.x < f(a.x) AND b.x > g(a.x)).

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

  • 等価を持つ相関性のあるサブクエリ— 等価述語を含む相関サブクエリのサポートを改善しました。

  • 不等式を持つ相関性のあるサブクエリ— 不等式を含む相関サブクエリのパフォーマンスが向上しました。

  • サブクエリに対する集計のカウント (*)— のパフォーマンスが改善されました。count(*)既知の一定のカーディナリティを持つサブクエリに対する集約。

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

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

  • element_at ()— のパフォーマンスが改善されました。element_at()は、マップのサイズに比例するのではなく、一定の時間になります。

  • グループ化 ()— 関連するクエリのパフォーマンスが向上しましたgrouping()

  • JSON キャスト— キャストのパフォーマンスが向上しました。JSONARRAYまたはMAPタイプ。

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

  • マップからマップへのキャスト— マップからマップへのキャストのパフォーマンスが向上しました。

  • 最小 () と最大 ()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()function.

  • ST_Intersection ()— 最適化されたST_Intersection()関数を座標軸に揃えた矩形 (たとえば、ST_Envelope()およびbing_tile_polygon()関数)。

マップ関数

  • マップ添字のパフォーマンスが向上しました。O(n)O(1)すべての場合において。以前は、特定の機能とリーダーによって作成されたマップのみがこの改善を利用していました。

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

鋳造

  • にキャストする機能が追加されましたJSON送信元REALTINYINTまたはSMALLINT

  • これで「」キャストできます。JSONROWであっても、JSONにすべてのフィールドが含まれていない場合、ROW

  • のパフォーマンスが向上しました。CAST(json_parse(...) AS ...)

  • キャストのパフォーマンスが向上しました。JSONARRAYまたはMAPタイプ。

新しい JSON 関数

重要な変更

重大な変更には、バグ修正、空間関数の変更、関数の置き換え、制限の導入などがあります。ANSI SQL 準拠の改善により、非標準の動作に依存するクエリが破損する可能性があります。

バグ修正

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

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

  • round () 小数点精度が修正されましたround(x, d)正しく丸めるようになりましたxいつxが DECIMAL であるか、xはスケール0のDECIMALであり、d負の整数です。以前は、これらのケースでは丸めが行われていませんでした。

  • 丸め(x, d)と切り捨て(x, d)— パラメータd関数のシグネチャでround(x, d)およびtruncate(x, d)の型がINTEGER。以前は、d型はBIGINT

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

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

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

  • 統計関数の数値安定性の向上— 統計関数の数値安定性corr()covar_samp()regr_intercept(), およびregr_slope()が改良されました。

  • タイムゾーン情報— タイムゾーン情報はjavaJava 1.8 SDK のパッケージです。

  • インターバル_DAY_TO_SECOND およびインターバル_YEAR_TO_MONTH データ型の合計— 使用できなくなりましたSUM(NULL)を直接実行することができます。使用するためにSUM(NULL)、キャストNULLのようなデータ型にBIGINTDECIMALREALDOUBLEINTERVAL_DAY_TO_SECONDまたはINTERVAL_YEAR_TO_MONTH

空間関数の変更

地理空間関数に加えられた変更点として、次の機能が挙げられます。

  • 関数名の変更— 一部の関数名が変更されました。詳細については、「Athena エンジンバージョン 2 における空間関数名の変更」を参照してください。

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

    • を使用するにはST_area()の面積を計算するVARBINARY入力を既知のバイナリ (WKB) 形式で入力するには、ST_GeomFromBinary()最初に、たとえば、次のようになります。

      ST_area(ST_GeomFromBinary(<wkb_varbinary_value>))
    • を使用するにはST_area()の面積を計算するVARBINARY入力をレガシーバイナリ形式で使用する場合は、同じ入力をST_GeomFromLegacyBinary()関数を最初に呼び出します。たとえば、

      ST_area(ST_GeomFromLegacyBinary(<legacy_varbinary_value>))
  • ST_エクステリオリング () および ST_Polygon ()ST_ExteriorRing()およびST_Polygon()では、ポリゴンだけを入力として受け入れるようになりました。以前は、これらの関数は他のジオメトリを誤って受け入れていました。

  • ST_Distance ()SQL/MM 仕様とすると、ST_Distance()関数は、を返しますNULL入力の 1 つが空のジオメトリである場合。以前は、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()関数が逆になりました。これは、原因log()を使用して、クエリが他の SQL 実装に変換されたときに、誤った結果を返します。と同等です。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'

  • 匿名行フィールドアクセス— 匿名の行フィールドには、構文 [.field0, .field1, ...]。

REplate 関数

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

Limits

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

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

  • グループ化セット— グループ化セット内のスライスの最大数は 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。 この制限は、タイムスタンプを含むシーケンス関数のすべての入力タイプに適用されます。