ingesting-into-data-lake
aws/agent-toolkit-for-aws
S3 파일, 로컬 업로드, JDBC 데이터베이스(Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora), Amazon Redshift, Snowflake, BigQuery, DynamoDB 또는 기존 Glue 카탈로그 테이블(마이그레이션)에서 AWS 데이터 레이크로 데이터를 가져옵니다. 기본 대상은 S3 Tables이며, S3 Tables를 사용할 수 없는 경우 일반 용도의 버킷에 저장된 표준 Iceberg 형식도 지원됩니다. 단회성 데이터 로드, 반복적인 파이프라인, 마이그레이션 작업을 처리할 수 있습니다. 다음과 같은 상황에서 트리거됩니다: 데이터 가져오기, 데이터 로드, 데이터 수집, 데이터베이스 동기화, 테이블 마이그레이션, 데이터를 AWS로 이동, 설정
...모든 것을 확장하십시오데이터 레이크로의 데이터 수집에 대하여
다양한 출처에서 데이터를 AWS 데이터 레이크 내의 쿼리 가능한 테이블로 전송하는 데 사용되는 워크플로우 기능입니다. 지원되는 출처에는 로컬 파일 업로드, S3 파일, JDBC 데이터베이스(Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora), Amazon Redshift, Snowflake, BigQuery, DynamoDB는 물론 마이그레이션을 위한 기존 Glue 카탈로그 테이블도 포함됩니다. 이 기능은 단일 로드 작업뿐만 아니라 반복적인 파이프라인 및 마이그레이션 작업도 처리할 수 있으며, 기본적으로는 S3 Tables를 대상으로 하지만 S3 Tables가 적용되지 않은 일반 버킷의 경우 표준 Iceberg 형식도 지원합니다. 단, S3 Tables를 아직 도입하지 않은 고객에게는 강제로 형식을 변경하도록 요구하지 않습니다. 명령어는 연결 시 AWS MCP 서버 도구를 통해 실행되며(검증, 샌드박스 실행, 감사 로그 기록용), 그렇지 않은 경우 AWS CLI를 사용합니다. 각 단계는 실행 전에 미리 설명이 제공됩니다. 이 워크플로우는 aws sts get-caller-identity를 통해 종속성과 자격 증명을 확인하고, 출처 유형을 분류하며, JDBC, Snowflake, BigQuery 출처의 경우 Glue 연결이 존재하는지 확인합니다(연결 설정 및 문제 해결은 별도의 데이터 소스 연결 기능이 담당함). 또한 대상 데이터베이스, 테이블, 형식을 명확히 하고 출처에 맞는 참조 절차를 실행한 후, 출처와 대상 간의 행 수 일치 여부, 핵심 컬럼의 null 값 확인, 그리고 샘플 행 3~5개에 대한 추가 검사 등 세 가지 필수 확인 과정을 거쳐 유효성을 검사합니다. 반복적인 파이프라인은 Glue Triggers를 활용한 크론 스케줄링을 통해 실행되며, 다단계 분기 처리에는 MWAA가 사용됩니다. 이 기능은 여러 주의 사항도 문서화하고 있는데, S3 Tables를 사용하려면 Glue 5.1 이상 버전과 Iceberg 데이터 레이크 형식이 필요하며, 카탈로그 설정은 --conf job 인수를 통해 지정해야 합니다. 또한 웨어하우스 파라미터는 반드시 필요하고, 테이블 및 컬럼 이름은 소문자로 작성해야 합니다. 표준 Iceberg 대상의 경우 LOCATION 절이 필요하지만 S3 Tables는 그렇지 않으며, DynamoDB의 경우 Glue 연결이 필요하지 않습니다. Salesforce, ServiceNow, SAP, MongoDB, Kafka와 같은 SaaS 및 스트리밍 소스는 지원 범위에 포함되지 않으며, 쿼리 실행 및 카탈로그 감사 역시 다른 기능을 통해 처리됩니다.
자주 묻는 질문
기본 대상 형식은 무엇인가요?
기본이자 권장되는 대상 형식은 S3 Tables입니다. 계정에서 S3 Tables를 도입하지 않은 경우, 이 기능은 기존의 일반 버킷에 표준 Iceberg 형식을 사용할 것을 권장합니다.
어떤 출처의 데이터를 수집할 수 있나요?
로컬 파일, S3 파일, JDBC 데이터베이스(Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora), Redshift, Snowflake, BigQuery, DynamoDB는 물론 마이그레이션을 위한 기존 Glue 카탈로그 테이블의 데이터도 수집할 수 있습니다.
어떤 출처의 경우 Glue 연결이 필요한가요?
JDBC, Snowflake, BigQuery의 경우 Glue 연결이 필요하며, 이는 aws glue get-connection을 통해 확인됩니다. 로컬 파일, S3 파일, DynamoDB, 카탈로그 마이그레이션의 경우에는 Glue 연결이 필요하지 않습니다.
데이터 수집의 유효성은 어떻게 검증되나요?
세 가지 확인 과정을 모두 실행해야 하며 어느 하나도 건너뛸 수 없습니다. 첫째, 출처와 대상 간의 행 수가 일치하는지 확인하고, 둘째 핵심 컬럼의 null 값이 없는지 확인하며, 셋째 샘플 행 3~5개를 추가로 검사합니다.
어떤 출처가 지원 범위에 포함되지 않나요?
Salesforce, ServiceNow, SAP, MongoDB, Kafka와 같은 SaaS 및 스트리밍 플랫폼은 물론, Glue 연결 설정, 빈 테이블 생성, 쿼리 실행, 카탈로그 감사 역시 지원 범위에 포함되지 않으며 이들은 다른 기능을 통해 처리됩니다.
Move data from a source into a queryable table in the data lake. This skill assumes the source connection (if one is needed) already exists. For Glue connection setup or troubleshooting, delegate to connecting-to-data-source.
Philosophy
Default to S3 Tables unless the environment says otherwise. S3 Tables is the recommended target for new data lake work. If the user's catalog inventory shows they haven't adopted S3 Tables, recommend standard Iceberg on their existing general-purpose bucket instead of forcing them to change posture.
Common Tasks
You MUST execute commands using AWS MCP server tools when connected -- they provide validation, sandboxed execution, and audit logging. Fall back to AWS CLI only if MCP is unavailable. You MUST explain each step before executing.
Workflow
1. Verify Dependencies and Context
- You MUST check whether AWS MCP tools or AWS CLI are available and inform the user if missing
- You MUST confirm target AWS region and verify credentials with
aws sts get-caller-identity - For SageMaker Unified Studio project roles, note that target tables and connections may be scoped to the project. See the caller ARN detection pattern in
querying-data-lake.
2. Classify the Source
| User says... | Source type | Reference |
|---|---|---|
| "upload my file", "local CSV", "move to S3" | Local file | local-upload.md |
| "load from S3", "import CSV/JSON/Parquet from s3://" | S3 files | s3-files.md |
| "import from Oracle/Postgres/MySQL/SQL Server/Redshift/RDS/Aurora" | JDBC | jdbc-ingest.md |
| "pull from Snowflake", "Snowflake table to S3" | Snowflake | snowflake-ingest.md |
| "import from BigQuery", "GCP analytics to S3" | BigQuery | bigquery-ingest.md |
| "export DynamoDB", "DynamoDB to data lake" | DynamoDB | dynamodb-ingest.md |
| "migrate Glue table", "convert Hive to Iceberg" | Catalog migration | catalog-migration.md |
If the user names Salesforce, ServiceNow, SAP, MongoDB, Kafka, or another SaaS/streaming source, decline -- these are not supported in this release.
If the source table is referenced by a fuzzy or business name ("migrate our orders table", "pull from the sales warehouse"), delegate to finding-data-lake-assets to resolve before proceeding.
3. Confirm Connection Exists (if applicable)
For JDBC, Snowflake, and BigQuery sources, a Glue connection is required. Check:
aws glue get-connection --name <CONNECTION_NAME> --region <REGION>
If the connection does not exist, stop and delegate to connecting-to-data-source to create and test it. Do not proceed with ingest until the connection is verified.
Local files, S3 files, DynamoDB, and catalog migration do not need a Glue connection.
4. Clarify the Target
You MUST ask the user (or suggest based on catalog inventory) before creating or writing to any table:
- Database/namespace: Does a specific target database exist? Or should one be created?
- Table: Existing table (append/merge) or new table (delegate to
creating-data-lake-table)? - Format: S3 Tables (default), standard Iceberg, or raw Parquet?
Inventory-aware defaults:
If you have already run exploring-data-catalog or can quickly check, use what exists:
- Account has an
s3tablescatalogfederated catalog and active table buckets: recommend S3 Tables - Account has general-purpose buckets with Iceberg tables and no S3 Tables usage: recommend standard Iceberg on their existing bucket
- Account uses Parquet/ORC on S3 without Iceberg metadata: ask whether to adopt Iceberg now (recommend yes) or continue with raw files
Do not force S3 Tables on customers who haven't adopted it. See iceberg-catalog-config-and-usage.md.
Delegations from this step:
- Target table doesn't exist ->
creating-data-lake-table - Target database named by fuzzy term ->
finding-data-lake-assets - User doesn't know what exists ->
exploring-data-catalog
5. Execute Source Workflow
Read the source-specific reference and follow its phases. Each is self-contained with job templates, gotchas, and troubleshooting:
- Local / S3 / JDBC / Snowflake / BigQuery / DynamoDB / catalog migration -- one reference per source
Common Glue 5.1 or higher job configuration and PySpark templates are shared in glue-job-config.md and glue-job-scripts.md.
6. Validate
Run all three, do not skip:
- Row count matches expected (source vs target)
- Null check on critical columns
- Spot-check 3-5 sample rows
See data-quality-validation.md.
7. Schedule (if recurring)
For recurring pipelines, create a Glue Trigger with a cron schedule. See testing-and-scheduling.md. Simple single-step pipelines use Glue Triggers; multi-step with branching uses MWAA.
Argument Routing
- S3 path only: Infer one-time load, start Step 2 with S3 files
- Connection name: Start Step 3 with the named connection
- Table name: Start Step 4, ask whether this is source or target
--targetflag: Pre-fill the target format in Step 4- No args: Walk through interactively
Gotchas
- S3 Tables requires Glue 5.1 or higher and
--datalake-formats icebergjob argument - All
spark.sql.catalog.*config MUST go in--confjob arguments, never inspark.conf.set(). Glue 5.x throwsAnalysisException: Cannot modify the value of a static configotherwise. See iceberg-catalog-config-and-usage.md for correct catalog configs. - The
warehouseparameter is required in S3 Tables catalog config. Without it Spark fails with "Cannot derive default warehouse location". - Table and column names in S3 Tables MUST be all lowercase
overwritePartitions()only replaces partitions present in the DataFrame -- for full refresh with deletes, usecreateOrReplace()- Standard Iceberg targets MUST include a LOCATION clause; S3 Tables MUST NOT
- DynamoDB does not need a Glue connection -- do not attempt to create one
- Connection failures during ingest delegate back to
connecting-to-data-source; do not debug network/credentials in this skill - For target tables in SageMaker Unified Studio projects, ensure the project role has write access to the target namespace before the Glue job runs
Troubleshooting
| Error | Likely cause | Action |
|---|---|---|
| Access Denied on S3 | Missing IAM permissions | Check Glue role has s3:GetObject, s3:PutObject |
| Access Denied on S3 Tables | Missing s3tables:* permissions | Add S3 Tables inline policy to Glue role |
| CTAS timeout | Dataset too large for Athena | Switch to Glue ETL or batch with WHERE filters |
| JDBC connection timeout/auth failure | Connection-level issue | Delegate to connecting-to-data-source |
| Throughput exceeded (DynamoDB) | Read percent too high | Lower read.percent or use native export |
See error-handling.md for the full catalog.
References
Source-specific
- local-upload.md -- Local files
- s3-files.md -- S3 files (CSV, JSON, Parquet, Avro, ORC)
- jdbc-ingest.md -- Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora, Redshift
- snowflake-ingest.md -- Snowflake
- bigquery-ingest.md -- BigQuery
- dynamodb-ingest.md -- DynamoDB (export and Glue direct read)
- catalog-migration.md -- Existing Glue catalog tables (Hive, self-managed Iceberg)
Cross-cutting
- iceberg-catalog-config-and-usage.md -- S3 Tables, standard Iceberg, raw files: catalog config, engine access patterns
- glue-job-config.md -- Job sizing, monitoring, retry
- glue-job-scripts.md -- PySpark templates (append, upsert, custom SQL, full refresh)
- incremental-loading.md -- Watermark strategies
- testing-and-scheduling.md -- Glue Triggers, MWAA
- data-quality-validation.md -- Row counts, null checks, Glue Data Quality
- schema-evolution.md -- ALTER TABLE ADD COLUMNS, nested JSON
- type-transformations.md -- Type conflict resolution
- format-specific-loading.md -- CSV/JSON/Parquet/Avro/ORC specifics
- athena-loading.md -- Athena INSERT INTO as simple-load fallback
- error-handling.md -- Ingest errors (connection errors delegate to connecting-to-data-source)
- upload-options.md -- aws s3 cp vs sync, multipart
Migration-specific
- ctas-patterns.md -- Athena CTAS syntax and partition transforms
- glue-etl-migration.md -- Large-table migration via Glue 5.1 or higher PySpark
- migration-validation.md -- Full validation checklist
- migration-troubleshooting.md -- CTAS failures, visibility, partitions
JDBC-specific
- jdbc-schema-discovery.md -- Crawler, direct inspection, custom SQL
- jdbc-performance.md -- Parallel reads, partitioning
모든 파일
26개 파일ingesting-into-data-lake 설치
해당 스킬 파일들을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어 저장해 주세요.
ZIP 다운로드저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.
git clone https://github.com/aws/agent-toolkit-for-aws/blob/main/skills/specialized-skills/analytics-skills/ingesting-into-data-lake/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
복사





집
