「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
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 のドキュメントに対応するリンクを参照してください。
-
approxy_distinct() –approx_distinct() 関数は、
、 INTEGER
、SMALLINT
、TINYINT
、DECIMAL
、REAL
、DATE
、TIMESTAMP
、TIMESTAMP WITH TIME ZONE
、TIME
、TIME WITH TIME ZONE
、IPADDRESS
、およびCHAR
の各タイプをサポートするようになりました。 -
avg()、sum() –avg() および
sum() 集計関数が データ型をサポートするようになりました。 INTERVAL
-
min()、max() –min() および
max() 集計関数で、クエリ分析時に不明な入力タイプが許可されるようになり、 リテラルで関数を使用できるようになりました。 NULL
-
regexp_replace() –置き換えごとに 関数を実行できる
regexp_replace()Lambda 関数のバリアントが追加されました。 -
sequence() 暗黙的な 1 日のステップ増分を持つバリアントを含む、–sequence()
DATE
関数の バリアントが追加されました。 -
ST_Area() –ST_Area() 地理空間関数がすべてのジオメトリタイプをサポートするようになりました。
-
substr() –substr 関数が
入力で動作するようになりました。 VARBINARY
-
zip_with() 不一致の長さの配列を zip_with()– で使用できるようになりました。https://prestodb.io/docs/0.217/functions/array.html#zip_with
欠落した位置は null で埋められます。以前は、長さが異なる配列が渡されたときにエラーが発生していました。この変更により、配列を同じ長さに埋め込むために追加した値と、元々 null だった値を区別することが困難になる可能性があります。
追加された 関数
以下のリストには、Athena エンジンバージョン 2 で新しく更新された関数が含まれています。この一覧には地理空間関数は含まれていません。地理空間関数のリストについては、「の新しい地理空間関数」を参照してください。
各関数の詳細については、Presto のドキュメントに対応するリンクを参照してください。
集計関数
配列関数および演算子
array_sort()
バイナリ関数と演算子
日付/時刻関数および演算子
マップ関数および演算子
数学関数および演算子
分位ダイジェスト関数
分位ダイジェスト関数qdigest
分位ダイジェストタイプが追加されました。
文字列関数および演算子
パフォーマンスの改善
エンジンバージョン 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 BY –
ORDER 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()
JSON 関連の改善
マップ関数
-
マップサブスクリプトのパフォーマンスが
O(n)
からO(1)
に向上しました。以前は、特定の関数によって生成されたマップのみが、この改善を活用していました。 -
関数と
map_from_entries()
関数を追加しました。map_entries()
キャスト
-
、
JSON
、またはREAL
からTINYINT
にキャストする機能が追加されました。SMALLINT
-
に
JSON
のすべてのフィールドが含まれていなくても、ROW
をJSON
にキャストできるようになりました。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) – 関数
d
とround(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)
、NULL
、BIGINT
、DECIMAL
、REAL
、DOUBLE
、INTERVAL_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
。 この制限は、タイムスタンプを含むシーケンス関数のすべての入力タイプに適用されます。