BigQueryのオブジェクト テーブルで署名付きURLを発行する(プレビュー)

BigQueryのオブジェクト テーブル(Object Tables)を使って、 SQLでGoogle Cloud Storage(GCS)上のファイルの署名付きURL(Signed URLs)を作成する。
2023.01.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部、池田です。
前回、BigQueryの新しい機能のオブジェクト テーブルObject Tables)を使ってみました。

【新機能】BigQueryのオブジェクト テーブルを使ってみる(プレビュー)

今回は、 署名付きURLオブジェクト テーブルからSQLで作成できるそうなので試してみます。

オブジェクト テーブルの署名付きURLでは、 そのURLに接続することで、認証無しで対象のGoogle Cloud Storageファイルをダウンロードすることができます。
この方法で作成したURLの有効期限は6時間とのことです。

※オブジェクト テーブルは執筆時点(2023/01)では申請が必要な プレビュー となります。 (後出のEXTERNAL_OBJECT_TRANSFORM関数についてはステージの記載が見つけられませんでした。)

署名付きURL

公式のガイド を基に試しました。

オブジェクト テーブルの作成

オブジェクト テーブルは 前回のブログ のものを使用します。

クリックでコードを表示する/折りたたむ
# クラウド リソースタイプの接続の作成
bq mk --connection --location=us-east1 \
--connection_type=CLOUD_RESOURCE obj-tbls-conn

-- データセットの作成
CREATE SCHEMA my_obj_tbls
OPTIONS(
    location = 'us-east1'
);

-- オブジェクト テーブルの作成
CREATE EXTERNAL TABLE my_obj_tbls.img_sample
WITH CONNECTION `us-east1.obj-tbls-conn`
OPTIONS(
    object_metadata = 'SIMPLE',
    uris = ['gs://{バケット名}/inputs_img/*']
);

署名付きURLの発行

組み込みテーブル関数 という種類の EXTERNAL_OBJECT_TRANSFORM() 関数を使用して、 ↓こんな感じでSQLから簡単に発行できました。

SELECT
  uri,
  signed_url
FROM
  EXTERNAL_OBJECT_TRANSFORM(
    TABLE my_obj_tbls.img_sample,
    ['SIGNED_URL']
);


定額料金を設定していないとエラーになりました。
また、SQLを実行する度に、異なるURLが出力されました。

ファイルのダウンロード

ブラウザに署名付きURLをそのまま張り付けても、認証無しでファイルをダウンロード(今回は画像だったので表示)できました。
curlだとこんな感じでダウンロードできました。

curl -o sample1.png '<作成した署名付きURL>'

おわりに

本来は リモート関数と組み合わせて分析 などをするのかと思いますが、 SQLで署名付きURLを発行できるのは便利そうなので、他の活用方法もありそうだと思っています。

関連情報/参考にさせていただいたページ