s3-explore について
s3-exploreは、DuckDBでリモートオブジェクトストレージのデータを調べるスキルです。クラウド上のファイル確認やデータセットのプレビュー、クエリを行うユーザー向けに、URLに応じた認証設定と対象別の調査手順を提供します。
主な機能
- 01S3、R2、GCS、カスタムストレージの判別
- 02オブジェクトのサイズと更新日時の一覧表示
- 03ファイルのスキーマとサンプル行のプレビュー
- 04Parquetメタデータから行数とサイズを取得
- 05SQLによるデータ分析
活用シーン
- 01リモートバケット内のファイル確認
- 02リモートデータセットの構造とサンプルの確認
- 03Parquetファイルの行数集計
- 04クラウドデータを絞り込んで分析の質問に回答
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ duckdb/ duckdb-skills --skill s3-exploreインストール後、Claude Code で/s3-exploreを入力して読み込まれたか確認します。
詳細
DuckDB を使用して、ユーザーがリモートオブジェクトストレージ上のデータを調べるのを支援します。
URL:$0
質問:${1:-list and describe what's there}
ステップ 1 — プロバイダーを特定して認証情報を設定する
URL またはユーザーのコンテキストに基づいて、適切なシークレット設定を先頭に追加します。
| プロバイダー | URL パターン | シークレットの設定 |
|---|---|---|
| AWS S3 | s3:// | CREATE SECRET (TYPE S3, PROVIDER credential_chain); |
| Cloudflare R2 | r2://、R2 エンドポイントを使用する s3:// | CREATE SECRET (TYPE R2, PROVIDER credential_chain); |
| GCS | gs://、gcs:// | CREATE SECRET (TYPE GCS, PROVIDER credential_chain); |
| MinIO / カスタム | カスタムエンドポイントを使用する s3:// | CREATE SECRET (TYPE S3, KEY_ID '...', SECRET '...', ENDPOINT '...', USE_SSL true); |
R2 の場合、ユーザーからアカウント ID が提供されたら、エンドポイントは <account_id>.r2.cloudflarestorage.com です。r2://bucket/path のような R2 URL は、R2 のシークレットを使用して s3://bucket/path に書き換えます。
パブリックバケット(例:Overture Maps、AWS のオープンデータ)にはシークレットは不要です。このステップを省略してください。
必ず先頭に追加します。
LOAD httpfs;
ステップ 2 — URL の参照先を特定する
URL がディレクトリまたはバケット(ファイル拡張子がない、または / で終わる)のようであれば、サイズとともに内容を一覧表示します。
duckdb -c "
LOAD httpfs;
<SECRET_SETUP>
SELECT filename, (size / 1024 / 1024)::DECIMAL(10,1) AS size_mb, last_modified
FROM read_blob('<URL>/*')
ORDER BY filename
LIMIT 50;
"
注:filename、size、last_modified のみを選択してください。実際のファイルがダウンロードされるため、content は選択しないでください。
URL が特定のファイルまたは glob パターン(ファイル拡張子がある、または * を含む)を指している場合は、プレビューします。
duckdb -c "
LOAD httpfs;
<SECRET_SETUP>
DESCRIBE FROM '<URL>';
SELECT count(*) AS row_count FROM '<URL>';
FROM '<URL>' LIMIT 20;
"
Parquet ファイルの場合は、データをダウンロードせずにメタデータから行数とサイズを取得します。
duckdb -c "
LOAD httpfs;
<SECRET_SETUP>
SELECT file_name,
sum(row_group_num_rows) AS total_rows,
(sum(row_group_compressed_bytes) / 1024 / 1024)::DECIMAL(10,1) AS compressed_mb
FROM parquet_metadata('<URL>')
GROUP BY file_name;
"
ステップ 3 — 質問に回答する
一覧、スキーマ、またはサンプルデータを使って、次の質問に回答します。
${1:-list and describe what's there}
ユーザーが分析に関する質問(例:「X に一致する行はいくつありますか」)をした場合は、適切な SQL クエリを作成して実行します。DuckDB は S3 上の Parquet に述語をプッシュダウンするため、大規模なリモートデータセットでも効率的にフィルタリングできます。
エラー処理
duckdb: command not found→/duckdb-skills:install-duckdbに委任します- アクセス拒否 / 403 → 認証情報を確認するようユーザーに提案します。
aws configure、環境変数を使用するか、キーとシークレットを明示的に指定します - バケットが見つからない / 404 → URL とリージョンを確認します
- 大規模な一覧表示でタイムアウトする → glob パターンを絞り込むか、プレフィックスを追加するよう提案します