count(distinct (case when … then … end))

SQLにおいて表題の件。自身はAthenaでとても重宝した。条件に合致した中での一意な数を取得したい。

■ 環境

  • Amazon Athena

■ count(distinct)

Athenaを利用しているので、読み込むデータ量も減らしたいしクエリを実行する対象は減らしたい。なので1回のクエリ実行で必要な情報を得たい。複数の条件で`count()`を取得したいが、これは以前のエントリで述べた通り。今回はさらに条件を絞った状態で`distinct`の値を取得したかった。

SELECT
  regist_date,
  count(1) as total,
  count(column1 < 10 or null) as count1, count(column1 >= 10 or null) as count2,
  count(distinct groupid) as group_count1,
  count(distinct (case when column1 < 10 then groupid end)) as group_count2, count(distinct (case when column1 >= 10 then groupid end)) as group_count3,
FROM testtable
GROUP BY regist_date

上記のようなSQLにすることで1度のクエリ実行で自身が得たいデータは全て取得できるようになった。

group_count1“は全体における”groupid“の`distinct`の値。一意な`groupid`の数を取得できる。

group_count2“は、`column1 < 10`の条件に合致した中での一意な`groupid`の数を取得できる。

group_count3“は…以下略。

以上。

■ 関連

複数条件のcount()

cronで実行されるスクリプトのPATH

表題の通り。たまに忘れて実行エラーになるのでメモ。

■ 環境

  • Amazon Linux

■ PATH

`PATH`が通っていないので、`cron`から実行されるとコマンドが見つからない系のエラーで失敗してしまうことがある。

$ sudo su -
# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
#

`cron`で実行されるときは下記しか`PATH`が通っていなかった。

/usr/bin:/bin

sbin“系のコマンドを使いたい時にいつもハマってしまう…。スクリプト内のコマンドは絶対PATHで書くものだと若い頃に師匠に教わったのをたまに忘れてる。

以上。

Googleプレゼンテーションのユーザ辞書

表題の件について、知らなかったのでメモ。

■ 環境

  • Google プレゼンテーション

■ ユーザ辞書

Googleプレゼンテーションを利用している。その中で個別用語を使用するとスペルチェックに引っかかるのか赤い下線が引かれ「もしかして」が表示される。プロジェクト内における個別の用語であったり、そもそものプロジェクト名であったりするので全てに赤い下線が引かれると煩わしく感じていた。

赤い下線が引かれた単語上で右クリックをすると、「もしかして」以外にも「ユーザ辞書に追加」というメニューがあることに気がついた。これをクリックすると赤い下線は消え、以降同じ用語を使用しても赤い下線が表示されることはなくなった。

ちなみに登録した用語はどこかに一覧としてあると思われるのだが、メニューから辿る方法を見つけられなかった。

ヘルプ > メニューを検索

上記で”辞書“と検索したら”単語リスト“が出てきたので、ここで確認ができるようだ。登録時と参照時に言葉が変わっていてわかりづらい…。

以上。

S3ライフサイクル

表題の件でゴミを削除することにした。

■ 環境

  • AWS S3

■ ライフサイクル

ライフサイクルでは、一定期間経過後、オブジェクトをGlacierに移動させたりすることができる。今回は該当バケット内に作成された全てのオブジェクトを対象に、作成されて1週間以上経過後のオブジェクトを破棄するようにした。Management Consoleから設定を行ってみる。

該当のバケットを表示後、上部の”管理“より”ライフサイクルルールの追加“を実施する。

ルール名は自身が判別つくわかりやすいもので構わない。フィルターは今回は使用していないが、該当のprefix配下のオブジェクトのみが対象である場合にはここで指定する。

今回はGlacierへの移行ではないのでここはスキップする。

現行バージョン“のみチェックしている。これは該当のバケットではバージョン設定を使用していないからである。”オブジェクトの現行バージョンを失効する“にチェックを入れ、日数は”7“としている。”不完全なマルチパートアップロードをクリーンアップする“も一応チェックを入れておいた。日数はデフォルトままの”7“である。

最後は内容を確認し保存して完了である。

実行されるタイミングはよくわからないが、新たなオブジェクトを追加したタイミングとかであろうか。まぁ自身にとっては不要なファイルを削除してほしいだけなので実行されるタイミングはなんであろうと問題ない。

以上。

brew doctor

何の気なしに表題を実施した。

■ 環境

  • Homebrew
  • macOS High Sierra

■ brew doctor

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  google-cloud-sdk

Warning: Homebrew's sbin was not found in your PATH but you have installed
formulae that put executables in /usr/local/sbin.
Consider setting the PATH for example like so
  echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile

Warning: Broken symlinks were found. Remove them with `brew prune`:
  /usr/local/bin/chef-zero
  /usr/local/bin/docker-credential-osxkeychain.backup
  /usr/local/bin/fauxhai
  /usr/local/bin/hyperkit.backup
  /usr/local/bin/notary.backup
  /usr/local/bin/vpnkit.backup
$

3点ほど問題があるらしい。

■ Warning: You have unlinked kegs in your Cellar

google-cloud-sdk“に対しての問題のようだ。`brew link`を実施してみるもエラーとなる。

$ brew link google-cloud-sdk
Error: Multiple kegs installed to /usr/local/Cellar/google-cloud-sdk
However we don't know which one you refer to.
Please delete (with rm -rf!) all but one and then try again.
$

使用していないし削除しようかと思い下記を実施。

$ brew uninstall google-cloud-sdk
Error: Multiple kegs installed to /usr/local/Cellar/google-cloud-sdk
However we don't know which one you refer to.
Please delete (with rm -rf!) all but one and then try again.
$

特に変化なし。削除してしまう。

$ rm -rf /usr/local/Cellar/google-cloud-sdk

■ Warning: Homebrew’s sbin was not found in your PATH but you have installed

/usr/local/sbin“に対するPATHが足りないようである。自身の環境では”.bashrc“にいろいろ記載しているのでこちらに追記するようにした。

$ echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bashrc

実際にはコマンドで追記ではなく直接編集した。

■ Warning: Broken symlinks were found. Remove them with `brew prune`:

不要なシンボリックリンクが残ってしまっているようだ。記載された通りに実施。

$ brew prune
Pruned 6 symbolic links and 8 directories from /usr/local
$

これらの対応で問題が無くなったようである。

$ brew doctor
Your system is ready to brew.
$

以上。

Posted in: Mac | Tagged: