vscode-ruby-lsp 動かずハマった

「rubocop がない」って怒られて動かず。 どうやら、vscode のワークスペースに Gemfile 置いて、rubocop を記載して bundle install しないとダメらしい。 諸事情あり、Gemfile 置いてなかったのだった。 (Dockerfile のほうで gem 入れてて、コードはコン…

BQ に JSON 配列入れれない件

[{"num":1,"text":"hoge"},{"num":2,"text":"fuga"}] みたいなファイルは bq load でエラーになる。 トップレベルがオブジェクトでなければダメなようだ。 やり方は2つあって、 {"row":...} みたいにラップしてオブジェクト化する方法 {"row":[{"num":1,"tex…

BQ の日付パーティションを月単位でフィルタしたい時

ts_column という TIMESTAMP 型のカラムでパーティショニングされたテーブルがあるとして、 WHERE FORMAT_TIMESTAMP('%Y-%m', ts_column, 'Asia/Tokyo') = '2023-05' これだと全件読みに行っちゃうようだが、 WHERE TIMESTAMP_TRUNC(ts_column, MONTH,'Asia/…

digdag: schedule を設定していない workflow の last_session_time は未定義

schedule: を定義してない workflow を RUN ボタンクリックで実行した場合、session_time はボタンをクリックした日時で、last_session_time は未定義となる。 あと、schedule を定義してないと backfill はできない。どういうサイクル(日毎なのか時間毎な…

Google::Cloud::Storage::File#exists? はファイルが存在しない場合にエラーログを出力する

bucket = Google::Cloud::Storage.new(project_id: gcp_project).bucket(gcs_bucket) file = bucket.file(file_path, skip_lookup: true) do_something if file.exists? みたいなコード書いた場合、ファイルが存在しない場合は file.exists? がちゃんと fals…

google spread sheet の範囲指定の方法

google spread sheet で A$2:B みたいな範囲指定ができる。 「2行目以降の A:B 列」という意味になる。

LBやDNSの用語整理

よく分かってないので整理。 ロードバランサのフロントエンド/バックエンド 用語 意味 フロントエンド LBがどのGIP、ポートで受けるのか、とか、SSL/TSL証明書の設定とか バックエンド LBからどのサーバに流すのか Cloud Front -> ELB 間の通信をSSL化する場…

JDK のディストリビューションがまたいろいろ変わってた

久々に sdk ls java したら、いつも使ってる adopt が無くなってて、見慣れないやつらが増えてた。 adopt は eclipse 財団傘下になって adoptium に名前が変わったらしい。ディストリビューションの名前は temurin になったらしい。 adoptopenjdk.net temrin…

今日のBQ謎仕様 : require_partition_filter = true なテーブル同士をJOINしつつフルスキャンしたい時

パーティショニングしていて、require_partition_filter = true のテーブル同士をJOINする場合を考える。 そのようなテーブルをフルスキャンする場合、 WHERE partitioning_field IS NOT NULL ってやるが、これは JOIN するテーブルが一つまでだと動くが、2…

GCP の環境変数

GCP

GCP のデフォルト・プロジェクトを設定する方法に、環境変数を設定する方法があるが、同じような役割っぽい環境変数がいくつかある。 GOOGLE_CLOUD_PROJECT CLOUDSDK_CORE_PROJECT GCP_PROJECT GCLOUD_PROJECT GCLOUD_PROJECT は deprecated のようだ。 GCLO…

kindle paper white に pdf を送る方法

こちらに良いまとめが。 mag.app-liv.jp 「スマホやタブレットのアプリから転送」がちょっと分かりづらい。 「safari で pdf を開いて共有ボタンで kindle」ではダメ。それだと共有を実行した端末にしか PDF が保存されない... box アプリや google drive ア…

ruby の google-cloud-bigquery は ALTER TABLE SET OPTIONS に対応してない?

Google::Cloud::Bigquery.new.query( <<~QUERY ALTER TABLE dataset.table SET OPTIONS (expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)) QUERY ) このコード、動かないっぽい... Library/Ruby/Gems/2.6.0/gems/google-cloud-big…

digdag の -X オプション

jcommander の dynamic option というやつらしい。 https://github.com/treasure-data/digdag/blob/v0.10.0/digdag-cli/src/main/java/io/digdag/cli/Command.java#L54 しかし、どこで参照しているのか分からなかった...

digdag 手動実行時の session time、last_session_time

workflow 画面の 「RUN」をクリックした場合の挙動 2021-01-10 に実行したとする。 cron を使った場合 schedule: cron>: 10 1 * * * 1時10分より前に実行した場合 session_time = クリックした日時 last_session_time= 2021-01-09 01:10:00 1時10分より後に…

digdag schedule 実行時の session time、last_session_time

cron でスケジュールすると session_time = cron の時刻 daily でスケジュールすると session_time = 実行日の0時0分 hourly の場合も同様。 例えば、 2021-01-10 のバッチを考える。 cron を使った場合 schedule: cron>: 10 1 * * * ↓ session_time = 2021-…

ruby スクリプトから BigQuery の external table (google sheet) を SELECT できなくてハマった

Mac で自分の個人アカウントを使って ruby スクリプトの動作確認をしようとしたのだが、BigQuery の external table (google sheet) を SELECT するところで PERMISSION_DENIED が出て一晩ハマった。 「個人アカウントを使って」というのは gcloud auth appl…

BQ で最新日付のパーティションを select したい

データベースのスナップショットを日次バッチでBQに load している。 x日の朝に、その時点のスナップショットをx-1日のパーティションに入れている。 というケースで、その時点でBQに入っている最新のスナップショットを select したい。 そして、最新のスナ…

BQ: scripting を使ったクエリは view にできなかった...

「日付がもっとも新しいパーティションに対してクエリをかけたい」というケースがあった。 DECLARE pdate DATE; SET pdate = ( SELECT MAX(_PARTITIONDATE) FROM `some_dataset.partitioned_table` ); SELECT * FROM `some_dataset.partitioned_table` WHERE…

BQで重複排除したviewを作る

ログをBQに突っ込むんだけど、レコードが重複して出力されてる可能性がある。 但し、レコード毎にユニークキーなキーが付与されてる。 という場合、以下のようなviewを作れば重複排除できる。 CREATE OR REPLACE VIEW `dataset.view_name` AS WITH src AS ( …

pythonの環境管理メンドイ...

しばらく触らないといろいろ忘れるし、ツールが乱立してて混乱しがち。 pyenv で3系をインストールしようとしたらpyexpat でエラー この記事で紹介して下さってる方法で Command Line Tools for Xcodeのバージョンを上げ、 qiita.com コマンドラインを開き直…

Google の client library

GCP

以下の2系統があるっぽい。 いずれもソースコードは github の googleapis という org 下で管理されている。 Google APIs · GitHub library document coverage github repository naming rule java package Google API Client Libraries https://developers.…

テキストファイルの文字コード確認 on mac

文字化け等で何の文字コードが入っているのか確認した場合などに使う。 xxd コマンドでascii と 16進数コードを見比べつつ、以下のようなコード変換ツールで個別の文字コードを確認する。 16進数を文字列に自動変換&その逆をするツール xxd コマンドでUTF8…

terraform で Google App Engine のアプリをimportする方法

default サービスの場合はこれ。 terraform import google_app_engine_application.digdag [gcp project id] default 以外のサービスは試してないが、たぶんこれか? terraform import google_app_engine_application.digdag [service name].[gcp project id]

グラフの近似曲線の係数を下位の桁まで知る方法

単に数式を表示しただけだと、係数が指数表示されたりして数桁しか表示されず、それで計算してもすごく外れることがある。 数式をクリックして書式設定すると、より下位の桁まで出せる。

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

色んなとこでも書かれてるが export / import ファイルシステムの中身だけ書き出し、読み込み。 ENTRYPOINT 等のメタデータは失われる。 save / load メタデータも一緒に保存・取り込み。 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_…

READLINE_LINE 変数ではまる

keyamb.hatenablog.com ココらへんを参考に、peceでhistoryをいい感じにしてみた。 しかし、 READLINE_LINE を読めるものの、上書きできずハマっていた。 どうも、sdkmanが悪さしているようだった。 .bashrc の最後で sdkman-init.sh を実行していたのだが、…

Cloud Shell 使えるのか…?

GCP

Cloud Shell で datalab create し、deleteした。 後でもう一度 datalab create すると、 Permission denied (publickey). と出て何度もリトライを続けてる。 sshの公開鍵認証が通ってないっぽい… cloud shell は1時間 inactive になるとインスタンスが作り…

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

macでechoの出力に色付けたいのに付かない! coreutils入れたのに! と悩んでたら、なんと、echo は bash builtin にもあり、フルパス指定するかaliasしないとbuiltinが使われるということを今更知った… コマンドを探す優先順位はこちら。 “応用力”をつける…

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

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