BigQuery の job_id から実行したクエリを調査する
Web UI から実行したクエリは、左側の Query History
メニューから検索できるけれど、API 経由で実行したクエリはこの方法では無理らしい。バッチなどで定期実行するクエリはこのケースに該当する認識。
こういう場合は jobs: get
API で情報を取得する必要がある。(CLI ツールの bq コマンド にこのインタフェースがあるといいんだけど、見当たらなかった)
Jobs: get | BigQuery | Google Cloud Platform
次のように job_id
をパラメータに GET リクエストを投げると、そのジョブの詳細が返ってくる。レスポンスの一部に投げたクエリが入っている。
curl -H 'Content-Type: application/json' -H 'Authorization: Bearer xxx' -v 'https://www.googleapis.com/bigquery/v2/projects/turnkey-conduit-708/jobs/job_xxx' | jq .
Authorization
には認証済みの access token を入れる- path の
job_xxx
の部分を調査したい job_id にする- 過去に実行した job の一覧は list api で取得可能
レスポンスとして かなりいろいろな情報 が返ってくる。クエリは $.configuration.query.query
を見れば良い。
また、tips としては
- サポートの問い合わせには必ず job_id が必要になるので、バッチの実行ログには job_id を出しておいたほうが良い
- access token は perl では次のようにして取得している
use Furl;
use JSON::WebToken;
use JSON::XS qw/decode_json/;
sub _build_access_token {
my $time = time;
my $client_email = 'foobarbaz@developer.gserviceaccount.com';
my $expiration_span = 3600;
my $private_key = '-----BEGIN PRIVATE KEY-----...';
my $ua = Furl->new(
agent => 'MyAPIClient',
timeout => 60 * 5, # 5 min
);
my $jwt = JSON::WebToken->encode({
iss => $client_email,
scope => 'https://www.googleapis.com/auth/bigquery',
aud => 'https://accounts.google.com/o/oauth2/token',
exp => $time + $expiration_span,
iat => $time,
}, $private_key, 'RS256', {typ => 'JWT'});
my $res = $ua->post(
'https://accounts.google.com/o/oauth2/token',
[],
[grant_type => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
assertion => $jwt],
);
Carp::croak sprintf "Auth request failed\tcode:%s\tcontent:%s", $res->code, $res->content unless $res->is_success;
my $data = decode_json $res->content;
return $data->{access_token};
}
クラウド開発徹底攻略 (WEB+DB PRESS plus)
posted with amazlet at 16.10.01
菅原 元気 磯辺 和彦 山口 与力 澤登 亨彦 内田 誠悟 小林 明大 石村 真吾 相澤 歩 柴田 博志 伊藤 直也 登尾 徳誠
技術評論社
売り上げランキング: 132,345
技術評論社
売り上げランキング: 132,345