データアナリティクス事業本部、池田です。
前回、BigQueryの新しい機能のオブジェクト テーブル(Object Tables)を使ってみました。
今回は、 署名付き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を発行できるのは便利そうなので、他の活用方法もありそうだと思っています。