by shigemk2

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

presto

Presto sequence

Pythonのrangeみたいな書き方 6.16. Array Functions and Operators — Presto 0.230 Documentation

Prestoのto_unixtimeの戻り値の型

Prestoのto_unixtimeと同等の関数はunix_timestampだけど、戻り値の型はHiveのほうはbigintだけどPrestoのほうはdoubleなんだ。 でもunix timestampデータとして扱うときはたいていINTだからキャストしないといけないんだ。 https://cwiki.apache.org/conflu…

Prestoのdate_diffでunitをmonthにしたときの挙動

Prestoのdate_diffでunitをmonthにしたときの挙動がいまいちよく分からなかったので確認することにした バージョンはPresto 0.223を利用している。 Prestoのdate_diffでunitをmonthにしたとき、date_diffの値はどのような計算になるのだろうか。 30日区切り…

Presto-Performance-Tuning ROW_NUMBER 2019

ROW_NUMBERはパフォーマンスが悪いしメモリも多く使うから遅いのでRANKかDENSE_RANKを使えってことだけど0.201からROW_NUMBERのパフォーマンスかなり改善されてるっぽい。 ちょっと読み切れないとこあるけどSqlTopNRowNumberBenchmarkの結果を見てもRANKとRO…

Presto date_formatでGENERIC_INTERNAL_ERROR: String index out of range 続き

Presto date_formatでGENERIC_INTERNAL_ERROR: String index out of range この話の続き。jodaは使われているには使われているけどフォーマットを生成するのにループで取り回してる。でもバイト数でループするもんだから、'%Y年%m月%d日' みたいな書き方をす…

Presto date_formatでGENERIC_INTERNAL_ERROR: String index out of range

SELECT DATE_FORMAT(now() AT TIME ZONE 'Asia/Tokyo', '%Y年%m月%d日') こんなクエリを投げると、GENERIC_INTERNAL_ERROR: String index out of range: 9 って返ってくる。詳細なエラーはない。本当にこれだけ。まあdate_format関数のフォーマット書式に日…

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_…