by shigemk2

当面は技術的なことしか書かない

presto

prestosql 314

とうとうprestodbからはアプデされなくなり始めてる Release 314 · prestosql/presto · GitHub 11.1. Release 0.220 — Presto 0.220 Documentation

PrestoでWITHを複数使う その2

WITH a AS ( SELECT * FROM a ), b AS ( SELECT * FROM b -- ココ。↑のa bがそのまま使える。 ), c AS ( SELECT * FROM a WHERE id IN (SELECT id FROM b) ) SELECT COUNT(1) FROM a INNER JOIN b ON a.id = b.id WITH句の中で、前に定義したWITH句のテーブ…

split_to_map Duplicate keys are not allowed対策

Prestoのsplit_to_mapで同じキーのデータが2回以上続くとDuplicate keys are not allowedになるのを回避するために、どの値にするかを新引数のラムダで制御できる。たぶん次の0.218で出る。 Amazon Athenaには関係ない。

PrestoでWITHを複数使う

PrestoでWITHを複数使う こういう書き方なんだけど WITH a AS ( SELECT * FROM a ), b AS ( SELECT * FROM b ) SELECT COUNT(1) FROM a INNER JOIN b ON a.id = b.id ドキュメントに書いてあるじゃんか。コンマで区切ろう。 WITH t1 AS (SELECT a, MAX(b) AS…

Presto regex_extract

返ってくるのはどちらもvarcharがベースなのでそのあとはこねこねすること。 SELECT regexp_extract_all('[22]33test', '\d+') SELECT regexp_extract('[22]33test', '\d+') 6.10. Regular Expression Functions — Presto 0.215 Documentation

Presto UNION ALL

今更。UNIONはカラムのデータ型を見てUNIONしているので、カラム名は見ていない。 これはうごく。 SELECT 1 AS "aaa", '2' AS "bbb" UNION ALL SELECT 1 AS "aaa", '2' AS "ccc" これはエラーになる。 SELECT 1 AS "aaa", '2' AS "bbb" UNION ALL SELECT 1 A…

Presto substr

substrのstartは1から。0じゃない。0なようにみえるけど。 6.9. String Functions and Operators — Presto 0.215 Documentation

Presto 0.215

はい。 11.1. Release 0.215 — Presto 0.215 Documentation Release 0.215 · prestodb/presto · GitHub

Presto Decimal

Prestoの10進数のやつ。 -- SELECT CAST('0.0' AS Interger); -- これはエラーになる SELECT CAST('0.0' AS Decimal) 6.8. Decimal Functions and Operators — Presto 0.214 Documentation

Presto array系メモ

Presto 0.194 array_sortはあってもarray_uniqはない。仕方ないね。 あと CAST(ARRAY[1,2,3] AS Varchar) もだめ。そういうことをしたいならarray_joinを使うこと。 6.16. Array Functions and Operators — Presto 0.214 Documentation

Presto array_aggのなかでorder by

array_aggのなかでorder byが出来るのは0.190からなので、未だ0.172のままのAthenaではarray_aggのなかでorder_byはつかえない。 6.13. Aggregate Functions — Presto 0.190 Documentation 2018 年 1 月 19 日 - Amazon Athena

Prestoでifでtrueな値をsumしたい

Prestoでifでtrueな値をsumしたい こう。 sum(if(bar, foo)) We also have a count_if() function: count_if(bar) In Presto, we support the popular but non-standard IF construct as a shorthand f... | Hacker News Profile: electrum | Hacker News

presto 0.214

どうしようかな Release 0.214 · prestodb/presto · GitHub

presto date_diff week month

date_diffってweekとかmonth単位でもいけちゃうんだね。 (EMRでPresto 0.187だけど) select date_diff('week', timestamp '2017-01-01 00:00:00', timestamp '2018-10-10 23:59:59') + 1; _col0 ------- 93 (1 row) select date_diff('month', timestamp '20…

memo Presto LEFT OUTER JOIN

LEFT OUTER JOINのON条件で複数マッチしたときは、掛け算になる。下のようなクエリがあったとして、idで外部結合しようとしているけど、idがそれぞれ2つあるので、id=1については 2 * 2 で4つの組み合わせができる。 SELECT * FROM ( SELECT id, name, age F…

Prestoのurl_encode関数の実装

Prestoのurl_encode関数の実装 presto/UrlFunctions.java at master · prestodb/presto · GitHub GuavaのUrlEscapersを利用しており、特殊文字の扱いはURLEncoder.encodeと一緒。つまり、 .-*_ はエンコードされないし、(空白)は+に変換される UrlEscapers (…

Logical Operators

AND OR NOT NOT ORみたいな書き方はできない https://prestodb.io/docs/current/functions/logical.html

ゼロ除算確認

期待通り Error running query: / by zero で死んでくれるクエリ SELECT IF(1 > 0, 3 / 0, 0) < 0.5 死なない SELECT NULL / 0 死なない SELECT COALESCE(NULL, NULL) / 0 死ぬ SELECT COALESCE(NULL, 0) / 0

presto 0.210

このバグの修正とか。 なるほど、Prestoには隠しカラムがあるらしいけど、使いみちがいまいちよくわからない 11.1. Release 0.210 — Presto 0.210 Documentation

Presto DATE_FORMAT

PrestoのDATE_FORMAT関数は、MySQLのそれに依拠している。 MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.7 日付および時間関数 6.13. Date and Time Functions and Operators — Presto 0.210 Documentation だから、指定子の使い方もMySQLと一緒。そん…

Presto format_number

Hiveのformat_number的な関数、Prestoにはないんだな… Hive - 文字列関数 – Arm Treasure Data UDF to shorten and format numbers · Issue #4130 · prestodb/presto · GitHub

presto 0.209

presto 0.209 なぜかまだリリースノート出てない https://prestodb.io/docs/current/release/release-0.209.html

Hive `datediff Presto date_diff

Hive datediff('2009-03-01', '2009-02-27') は2 PrestoだとStringな日付での比較はできないから date_diff('day', CAST('2009-03-01' AS Date), CAST('2009-02-27' AS Date)) っていうふうにTimestampかDateにキャストして、結果は-2 LanguageManual UDF - …

presto values

インクリメンタルなデータのインラインテーブルを作りたいんだけど、できないっぽい ボイラープレートだな SELECT * FROM ( VALUES (DATE_FORMAT(DATE_ADD('day', -7, CAST(NOW() AT TIME ZONE 'Asia/Tokyo' AS DATE)), '%Y-%m-%d'), 1), (DATE_FORMAT(DATE_…

approx_distinct

推定値の算出 数に厳密な正確性を求めないときに有効 第二引数で誤差の許容範囲を設定 なお、誤差を許容するのであってroundするわけじゃない

presto 0.208

特筆すること特にない https://prestodb.io/docs/current/release/release-0.208.html

Presto スキーマとテーブル参照

ドキュメントには書いていないけど、 select table_schema, table_name from information_schema.tables; といったクエリでスキーマとテーブルをすべて参照できる

Presto row_number/rank/dense_rank

prestoにもrank/desne_rank/row_numberがある row_number 機械的にidを割り振る rank 重複値は同順位だが、次の順位は重複ぶんだけ飛ばす dense_rank 重複値は同順位だが、次の順位は+1 クエリ。 WITH dataset AS ( SELECT * FROM ( VALUES 10, 100, 500, 50…

presto 0.200

presto 0.200 だいたい10日くらいのスパンでマイナーバージョンアップするのに、今回は意外と早い。 でもlog()関数削除されたことくらいかな。 https://prestodb.io/docs/current/release/release-0.200.html

presto date_parse

presto date_parse dateな文字列をパースしてtimestampに変換する 使い方は公式のテストコードを読むこと 日付のフォーマットはMySQLのものに準拠 https://prestodb.io/docs/current/functions/string.html