Skip to main content

Posts

Kanazawa 2018

Went to Kanazawa at Oct 27 and 28. I would recommend to eat 'Fu' in addition to the seafoods. It was really delicious. Day 1st  金沢駅→ひがし茶屋街→香林坊→兼六園→近江町市場→銭湯→ホテル Day 2nd 近江町市場→金沢21世紀博物館→鈴木大拙館→金沢駅 I wanted to go Kanazawa Umimirai Library, but it was closed. I should have investigated it before booking the hotel. Kanazawa st. Misodare Dengaku Fu Noren Kenrokuen GNOME Sento Omicho-Ichiba 21st Century Museum of Contemporary Art, Kanazawa D.T. Suzuki Museum

Bulk Insert to Teradata using Python ​

This snippet is bulk-loading csv to Teradata via Python. Recently teradatasql  was released, but this code uses  PyTd . If you haven't setup PyTd, please install the library by `pip install teradata`. import teradata import csv udaExec = teradata.UdaExec() session = udaExec.connect("tdpid") data = list(csv.reader(open("testExecuteManyBach.csv"))) batchsize = 10000 for num in range(0, len(data), batchsize):     session.executemany("insert into testExecuteManyBatch values (?, ?, ?, ?)"),     data[num:num+batchsize], batch= True ) The points are batch=True and specifying batchsize. If you don't set the batchsize or the size is too large, it will be failed (forgot the actual message though). The performance in my environment (1 node) was 10,000 rows/sec. The table has 4 columns. I assume tens of thousands looks fine, but more rows should be imported with FastLoad or MLOAD.

Teradata XMLAGG

SQLServerやPostgreSQLにあるstring_aggやMySQLのgroup_concatですが残念なことにTeradataでは存在しません。代わりにという訳ではないですが、 xmlagg という集約関数があり、これを使うと同じようなことが実現できます。 まずはデータを準備します。 drop table test_xml_agg ; create table test_xml_agg (  c1 int ,c2 int ,c3 varchar(10) ) ; insert into test_xml_agg values (1,1,'hello'); insert into test_xml_agg values (1,2,'world'); insert into test_xml_agg values (2,1,'this'); insert into test_xml_agg values (2,2,'is'); insert into test_xml_agg values (2,3,'xmlagg'); 上記のデータを1列目で集約し、2列目の順番で一度3列目を横に展開しカンマで結合するというクエリを書いてみます。 select  c1    ,trim(trailing ',' from xmlagg (c3 || ',' order by c2) (varchar(100))) as string_agg from test_xml_agg group by 1 ; Result Set c1 string_agg 1  hello, world 2  this, is, xmlagg string_aggに比べるとごちゃちゃしていますが、まず xmlagg(c3 || ',' order by c2) で2列目の昇順で3列目を結合していくことを表しています。続いて (varchar(100)) で型をsysudtlib.xmlからvarcharにキャストし、最後に末尾のカンマを除いています。 2018/10/19追記 tdstats.udfco...

Short circuit on Teradata

My colleague found that some queries on Teradata are improved by  Short-circuit evaluation . This is common knowledge among software engineers, but DBA may not know it. I knew it short circuit, but I didn't know it is effective to sql. For example, following query seems not bad and you may think everything is ok. (Please forget 'like any' since it is rewritten internally) SELECT  * FROM t1 WHERE  c1 LIKE '%a0001%' OR  c1  LIKE  '%a0002%' OR  c1  LIKE  %a0003%' ... OR c1  LIKE  '%a9999%' ; By using short circuit, this query can be rewritten like this.  SELECT  * FROM t1 WHERE  c1  LIKE  '%a%' and  (  c1  LIKE  '%a0001%'  OR c1  LIKE  '%a0002%'   OR  c1  LIKE  '%a0003%'  ...   OR  c1  LIKE  '%a9999%' ) ; Of course, this rewrite isn't effective for all situations. It depends on the data character...

Facility Dog Bailey

去年の年末に会社で開催された シャイン・オン!キッズ の ビーズ・オブ・カレッジ というプログラムに参加してきました。詳しくはリンク先に書いてありますが、会社のプログラムでは参加者が腕にまく組紐ブレスレットにビーズを通したものと手書きのクリスマスカードを送りました。写真がなくて伝わらないですが、ブレスレットもビーズも手作りと聞いて驚きました。どちらもカラフルな綺麗な色でむしろ自分も欲しいぐらいでした。 さらに、「 ベイリーとさっちゃん 」という絵本も買って読んでみました。絵本なので子ども向けではありますが、ファシリティドッグについて知らない人は大人でもまだまだ多いと思うので、少しでも読んでくれる人がいるといいなぁと思っています。 こういった活動を年に1度しかやらないのはもったいないということで、毎月の募金にも少額ではありますが登録してみました。興味のある方はぜひに🐶 シャイン・オン!キッズへ寄付していただく方法 また、今度の2/14(水)〜2/18(日)に ファシリティドッグ写真展2018 というイベントが東京国際フォーラムで開催されるようです。僕は日曜日に参加する予定です!

Trino parser introduction

Trinoのパーサー部分では ANTLR が使われています。 ファイルは以下のパスにあります。パーサー系で追加したり修正する場合はまず SqlBase.g4 を参照することになるかと思います。 以下はCTAS文の抜粋です。例えば、SELECT文でカッコをつけても正常にパースしたい構文を追加する例をまずはあげてみます。  CREATE TABLE (IF NOT EXISTS)? qualifiedName    (COMMENT string)?    (WITH tableProperties)? AS query    (WITH (NO)? DATA)?                                             #createTableAsSelect 修正例はこんな感じになります。右側のカッコはエスケープするためにクォートで囲んでいます。 なんとなくイメージがつくと思いますが、|はORの役割を果たしているのでqueryもしくは(query)をこれは表しています。  CREATE TABLE (IF NOT EXISTS)? qualifiedName    (COMMENT string)?    (WITH tableProperties)? AS (query | '('query')')    (WITH (NO)? DATA)?                                             #createTableAsSelect SqlBase.g4を修正したtrino-par...

Presto meetup #3

6/15に行われたPresto Meetup 第3回に参加してきました。実際に運用されている方々の話はやっぱり勉強になりますね。 Presto Update by @Lewuathe 0.152から0.178へのアップグレード時の変更点などの説明。 EXPLAIN (type VALIDATE)は他のDWH製品から移行を検討する時に使えそう。Lambda式は使い所があまり分かっていなかったけれど、複数カラムに対しては便利ということに納得しました。 Presto at Treasure Data by @taroleo 単に時間がかかるクエリが問題なのではなく、普段より遅いクエリが問題という問題設定方法がおぉーと思いました。PrestoのログをPrestoで分析してるのは再帰的な感じがして面白いですね。 Prestoベースのマネージドクエリサービス Amazon Athena by 志村 誠さん AWSユーザーが多かったのか、質問タイムが大盛況。Athenaについてはあまり調べてなかったのですが、これを機に今後はちょくちょくチェックしていきたいと思います。 Presto - 僕とヤフーと時々Teradata(仮) by @uokada 既存のシステムをPrestoに置き換えて97%高速化したお話。この夏、EmbulkのORCアウトプットが作成されるということで楽しみにしています。 DMMでのprestoおよび周辺エコシステムの運用事例 by @r_megane 主に日中に使われるアドホック用と夜間に使われるバッチ用にクラスタを分けていて、夜間帯はアドホック用のWorkerをバッチ用クラスタに追加するという使い方。ここらへん、わざわざクラスタを分けずに、ユーザーの設定や他DWHのスロットルみたいな感じでできたら便利そうな気がしますね。