# 0.189から0.205の間に追加されたPrestoの関数と機能(2018年) * [v0.189](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1_1013277974) * [v0.190](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1__196575608) * [v0.193](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1_206708919) * [v0.196](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1_966223806) * [v0.197とv0.198](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1__981318810) * [v0.197](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1__1762659549) * [v0.199](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1_1013277973) * [v0.200](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1__1218212512) * [v0.202](/ja/products/customer-data-platform/data-workbench/queries/presto-functions-and-features-added-between-0-189-and-0-205-2018#h1__55413098) # v0.189 ## ラムダ式における行フィールドの参照解決のサポートを追加 テーブルエイリアスを使用する以下のラムダ関数がサポートされます。 ```sql select transform(array[1], x -> x + t.a) from (values 1, 2, 3) t(a); => ["2"] ["3"] ["4"] ``` # v0.190 ## 集約関数におけるORDER BYのサポートを追加 `array_agg()`などの一部の集約関数は、入力値の順序に応じて異なる結果を生成します。この順序は、集約関数内に[ORDER BY句](https://prestodb.io/docs/current/sql/select.md#order-by-clause)を記述することで指定できます: ```sql array_agg(x ORDER BY y DESC) array_agg(x ORDER BY x, y, z) ``` ## INTERVAL型へのキャストのサポートを追加 INTERVAL型に対する集約の最適化 ```sql SELECT CAST(INTERVAL '18000' SECOND AS VARCHAR); =>0 05:00:00.000 ``` ## ST_Buffer()地理空間関数を追加 指定されたジオメトリからの距離が指定された距離以下であるすべての点を表すジオメトリを返します。 ```sql SELECT ST_BUFFER(ST_Point(1, 2), 2.0) => POLYGON ((3 2, 2.9957178464772056 2.130806258460286, 2.982889722747619 2.2610523844401027, 2.9615705608064595 2.390180644032256, 2.9318516525781355 2.517638090205041, 2.8938602589902103 2.6428789306063227, 2.8477590650225726 2.765366864730179, 2.7937454830653756 2.8845773804380017, 2.7320508075688767 2.999999999999999, 2.66293922460509 3.1111404660392035, 2.58670668058247 3.217522858017441, 2.5036796149579543 3.318691630200137, 2.414213562373095 3.4142135623730945, 2.3186916302001377 3.5036796149579543, 2.217522858017441 3.58670668058247, 2.1111404660392044 3.66293922460509, 2 3.7320508075688767, 1.8845773804380026 3.7937454830653765, 1.7653668647301795 3.847759065022573, 1.6428789306063232 3.893860258990211, 1.5176380902050415 3.9318516525781364, 1.3901806440322564 3.961570560806461, 1.2610523844401031 3.982889722747621, 1.130806258460286 3.995717846477207, 1 4, 0.8691937415397142 3.9957178464772056, 0.7389476155598972 3.982889722747619, 0.6098193559677438 3.9615705608064595, 0.48236190979495897 3.9318516525781355, 0.3571210693936774 3.8938602589902103, 0.2346331352698211 3.8477590650225726, 0.11542261956199817 3.7937454830653756, 7.7715611723760960e-16 3.7320508075688767, -0.11114046603920369 3.66293922460509, -0.21752285801744065 3.58670668058247, -0.318691630200137 3.5036796149579543, -0.4142135623730945 3.414213562373095, -0.5036796149579543 3.3186916302001377, -0.5867066805824699 3.217522858017441, -0.66293922460509 3.1111404660392044, -0.732050807568877 3, -0.7937454830653763 2.8845773804380026, -0.8477590650225733 2.7653668647301792, -0.8938602589902112 2.642878930606323, -0.9318516525781366 2.5176380902050415, -0.9615705608064609 2.3901806440322564, -0.9828897227476208 2.261052384440103, -0.995717846477207 2.1308062584602863, -1 2, -0.9957178464772056 1.8691937415397142, -0.9828897227476194 1.7389476155598973, -0.9615705608064595 1.6098193559677438, -0.9318516525781353 1.482361909794959, -0.8938602589902103 1.3571210693936773, -0.8477590650225726 1.2346331352698212, -0.7937454830653756 1.1154226195619983, -0.7320508075688765 1.0000000000000009, -0.6629392246050898 0.8888595339607963, -0.5867066805824699 0.7824771419825594, -0.5036796149579543 0.681308369799863, -0.4142135623730947 0.5857864376269055, -0.31869163020013747 0.4963203850420457, -0.2175228580174411 0.4132933194175301, -0.11114046603920436 0.33706077539491, 1.1102230246251565e-16 0.26794919243112303, 0.11542261956199751 0.2062545169346237, 0.23463313526982055 0.15224093497742675, 0.35712106939367694 0.10613974100978885, 0.4823619097949585 0.06814834742186338, 0.6098193559677435 0.03842943919353914, 0.7389476155598969 0.017110277252379236, 0.8691937415397138 0.004282153522793042, 1 0, 1.1308062584602858 0.004282153522794374, 1.2610523844401027 0.017110277252380568, 1.3901806440322562 0.03842943919354047, 1.517638090205041 0.06814834742186471, 1.6428789306063227 0.10613974100978973, 1.7653668647301788 0.1522409349774274, 1.8845773804380017 0.20625451693462438, 1.9999999999999991 0.2679491924311235, 2.1111404660392035 0.3370607753949102, 2.217522858017441 0.4132933194175301, 2.318691630200137 0.4963203850420457, 2.4142135623730945 0.5857864376269053, 2.5036796149579543 0.6813083697998625, 2.58670668058247 0.7824771419825589, 2.66293922460509 0.8888595339607956, 2.7320508075688767 1, 2.7937454830653765 1.1154226195619974, 2.847759065022573 1.2346331352698205, 2.893860258990211 1.3571210693936768, 2.9318516525781364 1.4823619097949585, 2.961570560806461 1.6098193559677436, 2.982889722747621 1.7389476155598969, 2.995717846477207 1.869193741539714, 3 2)) ``` ## approx_distinct()関数が[0.0040625, 0.26000]の範囲の標準誤差をサポート 個別の入力値の概算数を返します。この関数は`count(DISTINCT x)`の近似値を提供します。すべての入力値がnullの場合、ゼロが返されます。 この関数は`e`以下の標準誤差を生成する必要があります。`e`は、すべての可能なセットに対する(ほぼ正規の)誤差分布の標準偏差です。特定の入力セットに対する誤差の上限を保証するものではありません。この関数の現在の実装では、`e`が`[0.0040625, 0.26000]`の範囲内である必要があります。 ```sql SELECT APPROX_DISTINCT(x, value) from tbl; ``` # v0.193 ## map_zip_with()ラムダ関数を追加 `function`を同じキーを持つ値のペアに適用することで、2つの指定されたマップを単一のマップにマージします。1つのマップにのみ存在するキーの場合、欠落しているキーの値としてNULLが渡されます。 ```sql map_zip_with(map, map, function) → map ``` ```sql SELECT map_zip_with(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), -- {1 -> ad, 2 -> be, 3 -> cf} MAP(ARRAY[1, 2, 3], ARRAY['d', 'e', 'f']), (k, v1, v2) -> concat(v1, v2)); SELECT map_zip_with(MAP(ARRAY['k1', 'k2'], ARRAY[1, 2]), -- {k1 -> ROW(1, null), k2 -> ROW(2, 4), k3 -> ROW(null, 9)} MAP(ARRAY['k2', 'k3'], ARRAY[4, 9]), (k, v1, v2) -> (v1, v2)); SELECT map_zip_with(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 8, 27]), -- {a -> a1, b -> b4, c -> c9} MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]), (k, v1, v2) -> k || CAST(v1/v2 AS VARCHAR)); ``` ## normal_cdf()関数を追加 正規分布の累積分布関数の値を返します。 ```sql Normal_cdf(mean, standard deviation, value) → double ``` # v0.196 ## is_json_scalar() 関数の追加 `json` がスカラー(つまり、JSON数値、JSON文字列、`true`、`false`、または `null`)であるかどうかを判定します: ```sql SELECT is_json_scalar('1'); => true SELECT is_json_scalar('[1, 2, 3]'); => false ``` ## 各��換にラムダを実行する regexp_replace() 関数のバリアントを追加 `string` 内の正規表現 `pattern` にマッチする部分文字列のすべてのインスタンスを `replacement` に置き換えます。[キャプチャグループ](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.md#cg)は、番号付きグループの場合は `$g`、名前付きグループの場合は `${name}` を使用して `replacement` で参照できます。ドル記号(`$`)は、バックスラッシュ(`\$`)でエスケープすることで置換に含めることができます: ```sql SELECT regexp_replace('1a 2b 14m', '(\d+)([ab]) ', '3c$2 '); => '3ca 3cb 14m' ``` # v0.197 および v0.198 ## 暗黙的な1日刻みのステップインクリメントを持つ sequence() 関数の DATE バリアントを追加 `start` から `stop` までの整数のシーケンスを生成します。`start` が `stop` 以下の場合は `1` ずつインクリメントし、それ以外の場合は `-1` ずつインクリメントします。 # v0.197 ## ST_IsSimple() 地理空間関数の追加 ```sql SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')); st_issimple ------------- t (1 row) SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)')); st_issimple ------------- f (1 row) ``` # v0.199 ## hmac_md5()、hmac_sha1()、hmac_sha256()、および hmac_sha512() 関数の追加 指定された `key` を使用して、`binary` の md5、sha1、sha256、または sha512 で HMAC を計算します ```sql hmac_md5(binary, key) → varbinaryComputes hmac_sha1(binary, key) → varbinaryComputes hmac_sha256(binary, key) → varbinaryComputes hmac_sha512(binary, key) → varbinaryComputes ``` ## コンパレータとしてラムダを受け取る array_sort() 関数の追加 指定されたコンパレータ `function` に基づいて `array` をソートして返します。コンパレータは、`array` の2つのnull許容要素を表す2つのnull許容引数を受け取ります。最初のnull許容要素が2番目のnull許容要素より小さい場合は-1、等しい場合は0、大きい場合は1を返します。コンパレータ関数が他の値(`NULL` を含む)を返す場合、クエリは失敗してエラーが発生します ```sql SELECT array_sort(ARRAY [3, 2, 5, 1, 2], (x, y) -> IF(x < y, 1, IF(x = y, 0, -1))); -- [5, 3, 2, 2, 1] SELECT array_sort(ARRAY ['bc', 'ab', 'dc'], (x, y) -> IF(x < y, 1, IF(x = y, 0, -1))); -- ['dc', 'bc', 'ab'] SELECT array_sort(ARRAY [3, 2, null, 5, null, 1, 2], -- null を最初にして降順でソート (x, y) -> CASE WHEN x IS NULL THEN -1 WHEN y IS NULL THEN 1 WHEN x < y THEN 1 WHEN x = y THEN 0 ELSE -1 END); -- [null, null, 5, 3, 2, 2, 1] SELECT array_sort(ARRAY [3, 2, null, 5, null, 1, 2], -- null を最後にして降順でソート (x, y) -> CASE WHEN x IS NULL THEN 1 WHEN y IS NULL THEN -1 WHEN x < y THEN 1 WHEN x = y THEN 0 ELSE -1 END); -- [5, 3, 2, 2, 1, null, null] SELECT array_sort(ARRAY ['a', 'abcd', 'abc'], -- 文字列の長さでソート (x, y) -> IF(length(x) < length(y), -1, IF(length(x) = length(y), 0, 1))); -- ['a', 'abc', 'abcd'] SELECT array_sort(ARRAY [ARRAY[2, 3, 1], ARRAY[4, 2, 1, 4], ARRAY[1, 2]], -- 配列の長さでソート (x, y) -> IF(cardinality(x) < cardinality(y), -1, IF(cardinality(x) = cardinality(y), 0, 1))); -- [[1, 2], [2, 3, 1], [4, 2, 1, 4]] ``` ## line_locate_point() 地理空間関数の追加 指定された Point に最も近い LineString 上の点の位置を、2次元ラインの総長に対する割合として、0から1の間のfloatで返します。 LineString または Point が空または `null` の場合は `null` を返します。 ```sql SELECT LINE_LOCATE_POINT(GEOMFROMTEXT('LINESTRING(0 0, 5 5, 10 10)'), GEOMFROMTEXT('POINT(5 5)')); ------------- col1 ------------- 0.500 ------------- ``` # v0.200 ## ST_GeometryType() 地理空間関数の追加 ジオメトリのタイプを返します。 ```sql SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')); => ST_LineString ``` # v0.202 ## multimap_from_entries() 関数の追加 指定されたエントリの配列から作成されたマップを返します。 ```sql SELECT multimap_from_entries(ARRAY[(1, 'x'), (2, 'y'), (1, 'z')]); -- {1 -> ['x', 'z'], 2 -> ['y']} ``` ## bing_tiles_around() 地理空間関数の追加 指定されたズームレベルで、緯度と経度の引数で指定されたポイントを囲むBingタイルのコレクションを返します。 ```sql bing_tiles_around(latitude, longitude, zoom_level) → array ``` ## ST_NumGeometries() 地理空間関数の追加 コレクション内のジオメトリの数を返します。ジオメトリがジオメトリのコレクション(例: GEOMETRYCOLLECTION または MULTI*)の場合はジオメトリの数を返し、単一のジオメトリの場合は1を返し、空のジオメトリの場合は0を返します。 ```sql ST_NumGeometries(Geometry) → bigint ``` ```sql SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2), LINESTRING(5 5 ,10 10), POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))')); ``` ## ST_GeometryN() 地理空間関数の追加 指定されたインデックス(インデックスは1から始まります)のジオメトリ要素を返します。ジオメトリがジオメトリのコレクション(例: GEOMETRYCOLLECTION または MULTI*)の場合は、指定されたインデックスのジオメトリを返します。指定されたインデックスが1未満またはコレクション内の要素の合計数より大きい場合は、`NULL`を返します。要素の合計数を確認するには :func:`ST_NumGeometries` を使用してください。単一のジオメトリ(例: POINT, LINESTRING, POLYGON)は、1つの要素のコレクションとして扱われます。空のジオメトリは空のコレクションとして扱われます。 ```sql SELECT gid, n, ST_GeometryN(the_geom, n) FROM tbl CROSS JOIN generate_series(1,100) n WHERE n <= ST_NumGeometries(the_geom); ``` ## ST_ConvexHull() 地理空間関数の追加 すべての入力ジオメトリを囲む最小の凸ジオメトリを返します。この関数はジオメトリコレクションをサポートしていません。 ```sql SELECT t.tbl_type, ST_ConvexHull(ST_Collect(t.the_geom)) As the_geom FROM tbl As t GROUP BY t.tbl_type; ``` ## wilson_interval_lower() および wilson_interval_upper() 関数の追加 z スコア Z で指定された信頼度でのベルヌーイ試行プロセスのウィルソン スコア区間の下限を返します。 ```sql assertFunction("ST_AsText(ST_EnvelopeAsPts(ST_GeometryFromText('MULTIPOINT (1 2, 2 4, 3 6, 4 8)')))", VARCHAR, "MULTIPOINT ((1 2), (4 8))"); ```