creating-data-lake-table
Amazon S3 Tables(s3tables APIネームスペース)を使用して、自動コンパクションとスナップショット管理を備えたマネージドIcebergテーブルを作成します。テーブルバケット・ネームスペース・テーブル・スキーマ・Glueカタログ登録・パーティショニング・IAMアクセス制御をセットアップします。ファイルのインポート・ベクターストレージ・既存テーブルへのクエリ・既存テーブルの検索には、それぞれ別のスキルを使用してください。
description の原文を見る
>- Create managed Iceberg tables using Amazon S3 Tables (s3tables API namespace) with automatic compaction and snapshot management. Sets up table bucket, namespace, table, schema, Glue catalog registration, partitioning, IAM access control. Triggers on: create table, data lake table, analytics table, structured data storage, S3 Tables, Iceberg, Athena table, partitioning strategy, access permissions. Do NOT use for: importing files (use ingesting-into-data-lake), vector storage (use storing-and-querying-vectors), querying existing tables (use querying-data-lake), or locating existing table (use finding-data-lake-assets).
SKILL.md 本文
Amazon S3 Tables でデータレイク テーブルを作成
概要
Amazon S3 Tables は、自動圧縮とスナップショット管理を備えたマネージド Iceberg テーブルを提供します。Athena および Iceberg 互換エンジンから クエリ可能です。
一般的なタスク
MCP サーバーに接続されている場合、AWS MCP サーバーツールを使用する MUST があります。これらは コマンド検証、サンドボックス実行、および監査ログを提供します。MCP が利用できない場合は AWS CLI にフォールバックしてください。
判断ガイド
作成する前に、既存のものを確認する MUST があります:
ユーザーがデータベースに言及した場合、aws glue get-tables --database-name <NAME> を実行する MUST があります。
| 検出内容 | アクション |
|---|---|
| あいまいなデータベース名(「our analytics db」など) | 停止 MUST があります。finding-data-lake-assets に解決を委譲してください。 |
| 一致する名前の S3 Tables 以外のテーブル | 停止 MUST があります。finding-data-lake-assets に委譲してください。ユーザーが確認するまで作成しないでください MUST があります。 |
| 一致する名前の既存 S3 Tables テーブル | スキーマ一致を確認する MUST があります。互換性がある場合は再利用、ユーザーが確認した場合のみ再作成してください。 |
| 一致するテーブルがない | 作成を進める(ステップ 1~8)。 |
| ユーザーが明示的に新しい S3 Tables テーブルをリクエスト | チェックをスキップして作成を進める。 |
作成パス:
- S3 に既存データがある: 空のテーブルを作成(ステップ 1~8)してから、
ingesting-into-data-lakeスキルを使用してください。 - Glue ETL パイプライン: まず
references/table-creation-glue-etf.mdを読み、その後ステップ 1~6 を実行してください。 - Lake Formation アクセス制御: AWS ドキュメントで
"S3 Tables integration with Lake Formation"を検索してください。
1. 依存関係を確認
制約:
- AWS MCP サーバーツールまたは AWS CLI が利用可能かどうかを確認し、欠落している場合はユーザーに通知する MUST があります
- 対象の AWS リージョンを確認し、
aws sts get-caller-identityで認証情報を検証する MUST があります
2. スキーマを理解
- 明示的なスキーマ: Iceberg 型を検証してください。
- ゆるい説明: 列、型、粒度を尋ねてください。提案して確認してください。
- 既存の S3 データ: ファイル ヘッダーからのみスキーマを推論してください。まず空のテーブルを作成し、その後
ingesting-into-data-lakeスキルを使用してください。
制約:
- Iceberg 型マッピング、パーティション、命名については
references/best-practices.mdを読む MUST があります。 - すべての必須パラメータを事前に確認する MUST があります: テーブル名、列、型、パーティション戦略。スキーマ進化については、
references/athena-ddl-path.mdを参照してください。 - すべて小文字の名前を使用する MUST があります。Glue は
GENERIC_INTERNAL_ERRORで混合ケースを拒否します。Namespace とテーブル名にはハイフンを含めてはいけません MUST があります。 - アクセスパターンに基づいてパーティション列を提案する SHOULD があります。
3. テーブル バケットを作成
名前: 3~63 文字、小文字、数字、ハイフン。
aws s3tables create-table-bucket --name <BUCKET_NAME> --region <REGION>
table-bucket-arn をキャプチャしてください。暗号化(SSE-S3 デフォルト、SSE-KMS)とストレージクラス(STANDARD、INTELLIGENT_TIERING)は作成時に設定されます。references/best-practices.md を参照してください。
制約:
aws s3tables list-table-bucketsで既存バケットを確認し、ユーザーに既存を選択または新規作成を要求する MUST があります。- SSE-KMS を使用する場合、KMS キーポリシーは S3 Tables メンテナンス サービス プリンシパルがデータを読み取ることを許可する MUST があります。AWS ドキュメントで
"S3 Tables KMS key policy"を検索して、必須ポリシーを確認してください。 - バケット作成が失敗した場合、
references/best-practices.mdで一般的なエラーを確認してください。
4. Namespace を作成
aws s3tables create-namespace --table-bucket-arn <ARN> --namespace <NAMESPACE>
制約:
- 既存の Namespace をリストして、関連する場合の再利用を提案する MUST があります
- ハイフンなしの小文字の名前を使用する MUST があります
5. Glue データ カタログ統合を作成
s3tablescatalog が存在するかどうかを確認してください(リージョンおよびアカウントごとに1回作成):
aws glue get-catalog --catalog-id s3tablescatalog
見つからない場合は作成してください(glue:CreateCatalog、glue:passConnection が必要):
aws glue create-catalog --name "s3tablescatalog" --catalog-input '{
"FederatedCatalog": {
"Identifier": "arn:aws:s3tables:<REGION>:<ACCOUNT_ID>:bucket/*",
"ConnectionName": "aws:s3tables"
},
"CreateDatabaseDefaultPermissions": [{"Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"}, "Permissions": ["ALL"]}],
"CreateTableDefaultPermissions": [{"Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"}, "Permissions": ["ALL"]}],
"AllowFullTableExternalDataAccess": "True"
}'
aws glue get-catalogs --parent-catalog-id s3tablescatalog で検証してください。
6. アクセス制御を構成
S3 Tables は s3tables:* IAM Namespace を使用します(s3:* ではなく)。
クエリ プリンシパル権限(バケット ポリシー):
s3tables:GetTableBucket、s3tables:GetNamespace、s3tables:GetTable、s3tables:GetTableMetadataLocation、s3tables:GetTableData
クエリ プリンシパル権限(IAM ポリシー):
glue:GetCatalog、glue:GetDatabase、glue:GetTable
正しい ARN パターンに範囲を絞る MUST があります。正確なリソース ARN については、references/access-control.md を読む MUST があります。
制約:
- ユーザーからクエリ プリンシパル ARN を要求する MUST があります
- 必要以上に広い権限を付与しないでください MUST があります
- IAM ロールを自動作成しないでください MUST があります。既存を確認してユーザーをガイドしてください
7. テーブルを作成
| コンテキスト | パス |
|---|---|
| デフォルト(任意のユーザー) | S3 Tables API(以下) |
| ユーザーが明示的に SQL DDL を希望 | Athena DDL(references/athena-ddl-path.md を参照) |
| Glue ETL パイプライン | Spark DDL via --conf ジョブ引数(spark.conf.set() ではなく)。references/table-creation-glue-etl.md で --conf 文字列を読む MUST があります。 |
デフォルト: S3 Tables API:
aws s3tables create-table \
--table-bucket-arn <ARN> \
--namespace <NAMESPACE> \
--name <TABLE_NAME> \
--format ICEBERG \
--metadata '<METADATA_JSON>'
Metadata JSON は "iceberg" キーの下にネストする MUST があります:
{"iceberg":{"schema":{"fields":[
{"name":"order_date","type":"date","required":true},
{"name":"customer_id","type":"string","required":true},
{"name":"amount","type":"double","required":false}
]},
"partitionSpec":{"fields":[
{"sourceId":1,"fieldId":1000,"transform":"month","name":"order_date_month"}
]}}}
制約:
partitionSpec.sourceIdは有効なスキーマ フィールド ID を参照する MUST があります- 作成後のスキーマ進化については、Athena DDL を使用してください。
references/athena-ddl-path.mdを参照してください - 複雑な型(list、map、struct)に対しては
schemaV2を明示的なフィールド ID で使用する MUST があります。references/best-practices.mdを参照してください。 - サポートされているパーティション変換については AWS ドキュメントで
"IcebergPartitionField S3 Tables"を検索する SHOULD があります
8. 確認と検証
aws s3tables get-table で検証し、--query-execution-context '{"Catalog":"s3tablescatalog/<BUCKET_NAME>","Database":"<NAMESPACE>"}' を使用して Athena で DESCRIBE <table_name> でクエリ可能性を確認する MUST があります。SQL に catalog を入れないでください。概要を提示してください: バケット ARN、Namespace、テーブル、スキーマ、パーティション。
トラブルシューティング
| エラー | 原因 | 修正 |
|---|---|---|
| "Table location can not be specified" | CREATE TABLE の LOCATION | LOCATION 句を削除してください。S3 Tables はストレージを自動管理します。 |
s3:* ポリシーを使用した AccessDeniedException | s3:* ではなく s3tables:* を使用 | S3 Tables は s3tables:* Namespace を使用します。IAM ポリシーを更新してください。 |
追加リソース
access-control.md-- IAM 権限、ARN パターン、権限エラーbest-practices.md-- Iceberg 型、パーティション、命名、一般的なエラーathena-ddl-path.md-- Athena DDL、スキーマ進化table-creation-glue-etl.md-- Glue ETL 経由の Spark DDL- データ読み込み:
ingesting-into-data-lakeスキル
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- aws
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/aws/agent-toolkit-for-aws / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。