bashの処理で、ある特定の文字列が含まれる行をまるっと削除したい時ってありますよね?よね? sedコマンドでこんなに簡単にできます。
続きを読む
特に連番がないテーブルに意図的に連番を振りたいってこと、日々の運用で結構あったりませんか?以外と簡単にSQLでそれを実現できます!!!
例えば以下のようなテーブルがあり、これを題材にやってみたいと思います
mysql> DESC login ; +---------+------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+------------+------+-----+-------------------+-------+ | userId | bigint(20) | NO | PRI | NULL | | | loginAt | datetime | NO | PRI | CURRENT_TIMESTAMP | | +---------+------------+------+-----+-------------------+-------+続きを読む
やってみたら、かなり私には、高度すぎて死にかけました。
やりたいことは、
MySQLで同列の異なる行と行の引き算をSQLで書くとこうなるってことです。
やってみたいことを文書で表すと、ユーザーのログインは前回のアクセスからどれくらいの感覚でログインしているのかを算出する場合、SQLでそれをどのように表現するかって感じになるのかなというのを試して見ました
例えば以下のようなテーブルがあり、これを題材にやってみたいと思います
mysql> desc login ; +---------+------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+------------+------+-----+-------------------+-------+ | userId | bigint(20) | NO | PRI | NULL | | | loginAt | datetime | NO | PRI | CURRENT_TIMESTAMP | | +---------+------------+------+-----+-------------------+-------+
で、以下のようなデータが入っているものとします。ユーザーIDは、1,2,3とあり、それぞれログインの間隔が異なるものとします。 loginAtはログインした日付がはいっており、useridと、loginAtのセットで、primaryキーだとします。 つまり、同じユーザーidで複数、ログイン日付が入っていると想像してください
続きを読むかなり無理やりだけど、集計の結果を横倒しで表示するサンプルSQLです。 かなり、無理やりですが笑
+------------+------+ | wdate | cnt | +------------+------+ | 2014-01-21 | 1 | | 2014-01-22 | 20 | | 2014-01-23 | 10 | | 2014-01-24 | 4 | | 2014-01-25 | 15 | | 2014-01-26 | 18 | | 2014-01-27 | 5 | | 2014-01-28 | 2 |
+------+------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ | YYYY | MM | day1 | day2 | day3 | day4 | day5 | day6 | day7 | day8 | day9 | day10 | day11 | day12 | day13 | day14 | day15 | day16 | day17 | day18 | day19 | day20 | day21 | day22 | day23 | day24 | day25 | day26 | day27 | day28 | day29 | day30 | day31 | +------+------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ | 2014 | 2 | 1715 | 2540 | 2710 | 1577 | 1461 | 912 | 680 | 1033 | 631 | 629 | 552 | 364 | 309 | 1309 | 2509 | 1567 | 880 | 622 | 576 | 51 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +------+------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
そんなSQLを書いております
続きを読むここで書いていることって、現役エンジニアの人にしてみればちゃんちゃらおかしい話なんだろうな、なんてことをいつも思いつつも、今日もメモします。
python3でのgetでこんなエラーが出てしまいハマりました。
word = request.args.get('word')
とにかく、日本語が通らないのでなんだこりゃって感じで苦戦すること2時間。。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-13: ordinal not in range(128)
とか
AttributeError: 'str' object has no attribute 'decode'
とかです。日本語がなんかダメなんですよね。。。というところまではわかったのですが、これの対策の苦戦した話のメモになります
続きを読む
python3でのヒアドキュメントで、一部変数が入っていた場合の置き換え方法をメモ あ、ヒアドキュメントを利用して、かつ、変数展開をするっていう、題名通りのメモです汗
ソースはこんな感じになりました。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- def main(): _text = ''' text1 : {_text1} text2 : {_text2} '''.format(_text1 = 'テキスト1',_text2 = 'テキスト2').strip() print(_text) if __name__ == '__main__': main()
続きを読む
最近MariaDBばかりやっていて、MySQLの存在を忘れていたのですが、今まで英語しか利用できなかったのに、いつの間にか標準で日本語全文検索ができるようになっていたので、久しぶりに触って見ようと思います。これがまた、意外に簡単!だったので、その設定/実装方法をできるだけ簡単に紹介したいと思います
あれですね。通常テーブルに設定するカラムの索引ではなく、行全体に対して、インデクシングをする設定といえばいいのかしら
IROTEC(アイロテック) ラバー ダンベル 40KGセット (片手20kg×2個) 筋トレ ダイエット ダイエット器具 トレーニング ベンチプレス 筋肉
ウィキペディアで見るとこんな感じで書かれております
複数の文書(ファイル)から特定の文字列を検索すること。「ファイル名検索」や「単一ファイル内の文字列検索」と異なり、「複数文書にまたがって、文書に含まれる全文を対象とした検索」という意味
データベースでいうところの、複数カラムにまたがったカラムの中の全文を対象にした検索って言い方になると思います。僕的には、「索引を設定できない大きなサイズのカラムも全文検索索引でさくさく検索できる」と言った意味合いで利用しております。(ざっくりすぎですみません・・)
過去のMySQL、いや、Mariaもそうなのですが、昔から全文検索自体の機能はついていたのですが、こと日本語の全文検索になると。Mroonga等、サードパーティーのエンジンを入れる必要がありました。入れるまでは良いのですが、その後の運用保守が結構めんどくさい ・・いや、、Mroongaが使いづらいという話ではなくて、私自身が、複雑な構成をとっていたため、RDBMS本体のバージョンアップ等が大きな壁になっていたんですね。
今回は、日本語全文検索が標準で実装される!!これは大きいと思います。
MySQLの抽出のデフォルトは、N-Gramになります、N-Gramは、検索対象を単語単位ではなく文字単位で分解し、後続の N-1 文字を含めた状態で出現頻度を求める方法です。インデクシングの速度は速いですが、サイズがでかくなることと検索のノイズ、そして検索速度が遅いというデメリットがあります。しかしながら、単語辞書が必要ないという利点があり、比較的導入しやすいと思います。
前置きはさておき、実装を検討してみます。
続きを読む利用していない、S3のデータ、そのまま保存しておいても課金されているのはご存知だと思います。もちろん、まったく使わないのであれば、削除しても構わないのですが、もしかしたら、いつか使うかも?とかいうケースって結構ありますよね?
ちなみに、S3に入っているデータを、とりあえず、別の環境にバックアップしておこう!なんて考えたりもすると思うのですが、ちょっとまってください。データ転送料というトラップがありますので、そう簡単にはいきません。
じゃあ、現在の設定は維持しつつ、ストレージの管理コストを下げましょうよってことで今回、s3 ストレージクラス変更の変更をしてみたいと思います。
続きを読む
もともとの、VPCのNATインスタンスとして利用しておりましたが、いつの間には、m5インスタンスなるものが出ているじゃないっすか?汗 しかも、安い!!
m4.Xlarge :
月コスト:
$146.40 最大帯域: 791 Mbits/sec
m5.large
月コスト: $70.28 最大 10 Gbps
コストパフォーマンスの観点から、ことネットワークの帯域が大きく、かつ、コストが下がるってことを理由に、m4.Xlarge から m5.Largeにインスタンスタイプを切り替えてみようともくろみ、さて起動しようとしたら、なんかエラーで出て起動でないって、、あわわ。。
Enhanced networking with the Elastic Network Adapter (ENA) is required for the 'm5.large' instance type. Ensure that your instance 'i-xdsdsxddddd' is enabled for ENA.
インスタンス切り替えるのはいいけど、ENA有効になっている?って怒られて起動しなくてビビりました。そもそも、ENAって何?笑
次世代ネットワークドライバってやつらしい。
EC2 インスタンス向けの次世代ネットワークインターフェイス、Elastic Network Adapter (ENA) を導入
まあ、全然読んでないのですが、ネットワークの帯域太くできるよって意味だと思うので、現行のm4.Largeはそれが対応していないってことなのかな? ってなわけで、これをENA対応する設定を試してみたいと思います
続きを読む