docker image のファイルへの書き出し、ファイルからの読み込み。

色んなとこでも書かれてるが

save した tarball を import してもメタデータは復元されないので注意。

BigQuery の unnest の使い方メモ

Array型のカラムを含むテーブルに対するクエリ。

inner join

  • query
WITH sample AS (
  select '1' as col1, ['a', 'b'] as col2
  UNION ALL
  select '2' as col1, [] as col2
)

select
  *
from sample,
UNNEST (col2) as col2_unnest
  • result
Row col1 col2 col2_unnest
1 1 a a
b
2 1 a b
b

配列カラムが NULL or empty の行は無視される。

left join

  • query
WITH sample AS (
  select '1' as col1, ['a', 'b'] as col2
  UNION ALL
  select '2' as col1, [] as col2
)

select
  *
from sample
LEFT JOIN UNNEST (col2) as col2_unnest
  • result
Row col1 col2 col2_unnest
1 1 a a
b
2 1 a b
b
3 2 null

配列カラムが NULL or empty の行も出力される。UNNEST したカラムはNULL。

READLINE_LINE 変数ではまる

keyamb.hatenablog.com

ココらへんを参考に、peceでhistoryをいい感じにしてみた。 しかし、 READLINE_LINE を読めるものの、上書きできずハマっていた。 どうも、sdkmanが悪さしているようだった。 .bashrc の最後で sdkman-init.sh を実行していたのだが、この後に READLINE_LINE を使うコードを書くと何故かうまくいった。

それから、READLINE_LINEは、それを使用する関数をbindしないと使えないっぽい。 上記参照元を例に取ると、

bind -x '"\C-r": peco-select-history'

と書かないと駄目。 peco-select-history 関数を直接呼び出しても動かない…

Cloud Shell 使えるのか…?

Cloud Shell で datalab create し、deleteした。
後でもう一度 datalab create すると、
Permission denied (publickey).
と出て何度もリトライを続けてる。

sshの公開鍵認証が通ってないっぽい…
cloud shell は1時間 inactive になるとインスタンスが作り直されるらしい ので、ホスト名が変わってしまったのが原因か…? てことは、毎回、鍵作り直さなきゃなの…?

まだまだbash初心者だった…

macでechoの出力に色付けたいのに付かない!
coreutils入れたのに!
と悩んでたら、なんと、echo は bash builtin にもあり、フルパス指定するかaliasしないとbuiltinが使われるということを今更知った…

コマンドを探す優先順位はこちら。
“応用力”をつけるためのLinux再入門(8):PATHを理解して、コマンドの在りかを探してみよう (2/3) - @IT

linuxに入ってたbash4のechoでは色つけることができたが、macのデフォのbashのechoではダメだった。
aliasしても子プロセスはデフォルトでは無視してしまう。

てか、macにbash4入れてた。
shebang#!/bin/env bash に変えたらlinuxみたくechoで色付いた…
(てか、macにbash4入れたのにiterm2の設定でログイン・シェル変えて無かったことにも気づく…)
なお、/bin/env は mac にはデフォでは無いのだが、シンボリックリンク貼っといた。

ちなみに、shoptというコマンドを今更知った…
shoptコマンドで設定できるbashの便利設定まとめ | 俺的備忘録 〜なんかいろいろ〜

aliasしても子プロセスでは無視されてるっぽかったが、expand_aliasesが対話シェルだとon、そうでなければoffであるためのようだ。

そして type コマンド。そりゃ、そういうコマンドもあるよねえ…

また sublime linter で rubocop が動かなくなった!

と思ったら、rbenvで切り替えたversionにrubocop入れてないだけだった…

hiveのloadコマンドに謎の制約

LOAD DATA LOCAL INPATH '/dir/_hoge' ...
みたく、ファイル名が “_” 始まりのファイルをLOADしようとしたら、何故か「そんなファイルはねえ!」と怒られエラーになった。

回避策としては、頭にワイルドカード入れる。以下なら正常終了。
LOAD DATA LOCAL INPATH '/dir/*hoge' ...

Hive 1.2.1000.2.5.0.0-1245 (HDP 2.5.0.0-1245) にて確認。