[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-ingesting-into-data-lake":3,"mdc--h63r32-key":35,"related-org-aws-ingesting-into-data-lake":1328,"related-repo-aws-ingesting-into-data-lake":1501},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"ingesting-into-data-lake","ingest data into AWS data lakes","Import data into the AWS data lake from S3 files, local uploads, JDBC databases (Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora), Amazon Redshift, Snowflake, BigQuery, DynamoDB, or existing Glue catalog tables (migration). Default target is S3 Tables; standard Iceberg on a general purpose bucket is supported where S3 Tables is not adopted. Handles one-time loads, recurring pipelines, migrations. Triggers on: import data, load data, ingest, sync database, migrate table, move data to AWS, set up pipeline, ETL, pull from Snowflake, query BigQuery into S3, export DynamoDB, CTAS, convert to Iceberg. Do NOT use for setting up or troubleshooting Glue connections (use connecting-to-data-source), creating empty tables (use creating-data-lake-table), running queries (use querying-data-lake), finding tables by fuzzy name (use finding-data-lake-assets), catalog audit (use exploring-data-catalog), or SaaS platforms like Salesforce, ServiceNow, SAP, MongoDB, Kafka.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"aws","AWS (Amazon)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Data Engineering","data-engineering","tag",{"name":17,"slug":18,"type":15},"ETL","etl",{"name":20,"slug":21,"type":15},"Data Pipeline","data-pipeline",{"name":23,"slug":8,"type":15},"AWS",1822,"https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws","2026-07-12T08:43:32.674251",null,157,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"Official, AWS-supported MCP servers, skills, and plugins to help AI agents build on AWS","https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws\u002Ftree\u002FHEAD\u002Fskills\u002Fspecialized-skills\u002Fanalytics-skills\u002Fingesting-into-data-lake","---\nname: ingesting-into-data-lake\ndescription: >-\n  Import data into the AWS data lake from S3 files, local uploads, JDBC databases\n  (Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora), Amazon Redshift, Snowflake,\n  BigQuery, DynamoDB, or existing Glue catalog tables (migration). Default target\n  is S3 Tables; standard Iceberg on a general purpose bucket is supported where S3\n  Tables is not adopted. Handles one-time loads, recurring pipelines, migrations.\n  Triggers on: import data, load data, ingest, sync database, migrate table, move\n  data to AWS, set up pipeline, ETL, pull from Snowflake, query BigQuery into S3,\n  export DynamoDB, CTAS, convert to Iceberg. Do NOT use for setting up or troubleshooting\n  Glue connections (use connecting-to-data-source), creating empty tables (use creating-data-lake-table),\n  running queries (use querying-data-lake), finding tables by fuzzy name (use finding-data-lake-assets),\n  catalog audit (use exploring-data-catalog), or SaaS platforms like Salesforce, ServiceNow,\n  SAP, MongoDB, Kafka.\nversion: 1\nargument-hint: '[source-path|connection-name|table-name] [--target s3-tables|iceberg|parquet]'\n---\n\n# Ingest into Data Lake\n\nMove 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`.\n\n## Philosophy\n\n**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.\n\n## Common Tasks\n\nYou 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.\n\n## Workflow\n\n### 1. Verify Dependencies and Context\n\n- You MUST check whether AWS MCP tools or AWS CLI are available and inform the user if missing\n- You MUST confirm target AWS region and verify credentials with `aws sts get-caller-identity`\n- 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`.\n\n### 2. Classify the Source\n\n| User says... | Source type | Reference |\n|---|---|---|\n| \"upload my file\", \"local CSV\", \"move to S3\" | Local file | [local-upload.md](references\u002Flocal-upload.md) |\n| \"load from S3\", \"import CSV\u002FJSON\u002FParquet from s3:\u002F\u002F\" | S3 files | [s3-files.md](references\u002Fs3-files.md) |\n| \"import from Oracle\u002FPostgres\u002FMySQL\u002FSQL Server\u002FRedshift\u002FRDS\u002FAurora\" | JDBC | [jdbc-ingest.md](references\u002Fjdbc-ingest.md) |\n| \"pull from Snowflake\", \"Snowflake table to S3\" | Snowflake | [snowflake-ingest.md](references\u002Fsnowflake-ingest.md) |\n| \"import from BigQuery\", \"GCP analytics to S3\" | BigQuery | [bigquery-ingest.md](references\u002Fbigquery-ingest.md) |\n| \"export DynamoDB\", \"DynamoDB to data lake\" | DynamoDB | [dynamodb-ingest.md](references\u002Fdynamodb-ingest.md) |\n| \"migrate Glue table\", \"convert Hive to Iceberg\" | Catalog migration | [catalog-migration.md](references\u002Fcatalog-migration.md) |\n\nIf the user names Salesforce, ServiceNow, SAP, MongoDB, Kafka, or another SaaS\u002Fstreaming source, decline -- these are not supported in this release.\n\nIf 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.\n\n### 3. Confirm Connection Exists (if applicable)\n\nFor JDBC, Snowflake, and BigQuery sources, a Glue connection is required. Check:\n\n```bash\naws glue get-connection --name \u003CCONNECTION_NAME> --region \u003CREGION>\n```\n\nIf 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.\n\nLocal files, S3 files, DynamoDB, and catalog migration do not need a Glue connection.\n\n### 4. Clarify the Target\n\nYou MUST ask the user (or suggest based on catalog inventory) before creating or writing to any table:\n\n- **Database\u002Fnamespace**: Does a specific target database exist? Or should one be created?\n- **Table**: Existing table (append\u002Fmerge) or new table (delegate to `creating-data-lake-table`)?\n- **Format**: S3 Tables (default), standard Iceberg, or raw Parquet?\n\n**Inventory-aware defaults:**\n\nIf you have already run `exploring-data-catalog` or can quickly check, use what exists:\n\n- Account has an `s3tablescatalog` federated catalog and active table buckets: recommend S3 Tables\n- Account has general-purpose buckets with Iceberg tables and no S3 Tables usage: recommend standard Iceberg on their existing bucket\n- Account uses Parquet\u002FORC on S3 without Iceberg metadata: ask whether to adopt Iceberg now (recommend yes) or continue with raw files\n\nDo not force S3 Tables on customers who haven't adopted it. See [iceberg-catalog-config-and-usage.md](references\u002Ficeberg-catalog-config-and-usage.md).\n\n**Delegations from this step:**\n\n- Target table doesn't exist -> `creating-data-lake-table`\n- Target database named by fuzzy term -> `finding-data-lake-assets`\n- User doesn't know what exists -> `exploring-data-catalog`\n\n### 5. Execute Source Workflow\n\nRead the source-specific reference and follow its phases. Each is self-contained with job templates, gotchas, and troubleshooting:\n\n- Local \u002F S3 \u002F JDBC \u002F Snowflake \u002F BigQuery \u002F DynamoDB \u002F catalog migration -- one reference per source\n\nCommon Glue 5.1 or higher job configuration and PySpark templates are shared in [glue-job-config.md](references\u002Fglue-job-config.md) and [glue-job-scripts.md](references\u002Fglue-job-scripts.md).\n\n### 6. Validate\n\nRun all three, do not skip:\n\n1. Row count matches expected (source vs target)\n2. Null check on critical columns\n3. Spot-check 3-5 sample rows\n\nSee [data-quality-validation.md](references\u002Fdata-quality-validation.md).\n\n### 7. Schedule (if recurring)\n\nFor recurring pipelines, create a Glue Trigger with a cron schedule. See [testing-and-scheduling.md](references\u002Ftesting-and-scheduling.md). Simple single-step pipelines use Glue Triggers; multi-step with branching uses MWAA.\n\n## Argument Routing\n\n- S3 path only: Infer one-time load, start Step 2 with S3 files\n- Connection name: Start Step 3 with the named connection\n- Table name: Start Step 4, ask whether this is source or target\n- `--target` flag: Pre-fill the target format in Step 4\n- No args: Walk through interactively\n\n## Gotchas\n\n- S3 Tables requires Glue 5.1 or higher and `--datalake-formats iceberg` job argument\n- All `spark.sql.catalog.*` config MUST go in `--conf` job arguments, never in `spark.conf.set()`. Glue 5.x throws `AnalysisException: Cannot modify the value of a static config` otherwise. See [iceberg-catalog-config-and-usage.md](references\u002Ficeberg-catalog-config-and-usage.md) for correct catalog configs.\n- The `warehouse` parameter is required in S3 Tables catalog config. Without it Spark fails with \"Cannot derive default warehouse location\".\n- Table and column names in S3 Tables MUST be all lowercase\n- `overwritePartitions()` only replaces partitions present in the DataFrame -- for full refresh with deletes, use `createOrReplace()`\n- Standard Iceberg targets MUST include a LOCATION clause; S3 Tables MUST NOT\n- DynamoDB does not need a Glue connection -- do not attempt to create one\n- Connection failures during ingest delegate back to `connecting-to-data-source`; do not debug network\u002Fcredentials in this skill\n- For target tables in SageMaker Unified Studio projects, ensure the project role has write access to the target namespace before the Glue job runs\n\n## Troubleshooting\n\n| Error | Likely cause | Action |\n|---|---|---|\n| Access Denied on S3 | Missing IAM permissions | Check Glue role has s3:GetObject, s3:PutObject |\n| Access Denied on S3 Tables | Missing s3tables:* permissions | Add S3 Tables inline policy to Glue role |\n| CTAS timeout | Dataset too large for Athena | Switch to Glue ETL or batch with WHERE filters |\n| JDBC connection timeout\u002Fauth failure | Connection-level issue | Delegate to `connecting-to-data-source` |\n| Throughput exceeded (DynamoDB) | Read percent too high | Lower `read.percent` or use native export |\n\nSee [error-handling.md](references\u002Ferror-handling.md) for the full catalog.\n\n## References\n\n### Source-specific\n\n- [local-upload.md](references\u002Flocal-upload.md) -- Local files\n- [s3-files.md](references\u002Fs3-files.md) -- S3 files (CSV, JSON, Parquet, Avro, ORC)\n- [jdbc-ingest.md](references\u002Fjdbc-ingest.md) -- Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora, Redshift\n- [snowflake-ingest.md](references\u002Fsnowflake-ingest.md) -- Snowflake\n- [bigquery-ingest.md](references\u002Fbigquery-ingest.md) -- BigQuery\n- [dynamodb-ingest.md](references\u002Fdynamodb-ingest.md) -- DynamoDB (export and Glue direct read)\n- [catalog-migration.md](references\u002Fcatalog-migration.md) -- Existing Glue catalog tables (Hive, self-managed Iceberg)\n\n### Cross-cutting\n\n- [iceberg-catalog-config-and-usage.md](references\u002Ficeberg-catalog-config-and-usage.md) -- S3 Tables, standard Iceberg, raw files: catalog config, engine access patterns\n- [glue-job-config.md](references\u002Fglue-job-config.md) -- Job sizing, monitoring, retry\n- [glue-job-scripts.md](references\u002Fglue-job-scripts.md) -- PySpark templates (append, upsert, custom SQL, full refresh)\n- [incremental-loading.md](references\u002Fincremental-loading.md) -- Watermark strategies\n- [testing-and-scheduling.md](references\u002Ftesting-and-scheduling.md) -- Glue Triggers, MWAA\n- [data-quality-validation.md](references\u002Fdata-quality-validation.md) -- Row counts, null checks, Glue Data Quality\n- [schema-evolution.md](references\u002Fschema-evolution.md) -- ALTER TABLE ADD COLUMNS, nested JSON\n- [type-transformations.md](references\u002Ftype-transformations.md) -- Type conflict resolution\n- [format-specific-loading.md](references\u002Fformat-specific-loading.md) -- CSV\u002FJSON\u002FParquet\u002FAvro\u002FORC specifics\n- [athena-loading.md](references\u002Fathena-loading.md) -- Athena INSERT INTO as simple-load fallback\n- [error-handling.md](references\u002Ferror-handling.md) -- Ingest errors (connection errors delegate to connecting-to-data-source)\n- [upload-options.md](references\u002Fupload-options.md) -- aws s3 cp vs sync, multipart\n\n### Migration-specific\n\n- [ctas-patterns.md](references\u002Fctas-patterns.md) -- Athena CTAS syntax and partition transforms\n- [glue-etl-migration.md](references\u002Fglue-etl-migration.md) -- Large-table migration via Glue 5.1 or higher PySpark\n- [migration-validation.md](references\u002Fmigration-validation.md) -- Full validation checklist\n- [migration-troubleshooting.md](references\u002Fmigration-troubleshooting.md) -- CTAS failures, visibility, partitions\n\n### JDBC-specific\n\n- [jdbc-schema-discovery.md](references\u002Fjdbc-schema-discovery.md) -- Crawler, direct inspection, custom SQL\n- [jdbc-performance.md](references\u002Fjdbc-performance.md) -- Parallel reads, partitioning\n",{"data":36,"body":39},{"name":4,"description":6,"version":37,"argument-hint":38},1,"[source-path|connection-name|table-name] [--target s3-tables|iceberg|parquet]",{"type":40,"children":41},"root",[42,51,66,73,84,90,95,101,108,141,147,335,340,353,359,364,447,459,464,470,475,516,524,537,563,575,583,616,622,627,635,655,661,666,685,697,703,716,722,756,762,883,889,1019,1031,1037,1043,1109,1115,1238,1244,1291,1297,1322],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"ingest-into-data-lake",[48],{"type":49,"value":50},"text","Ingest into Data Lake",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55,57,64],{"type":49,"value":56},"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 ",{"type":43,"tag":58,"props":59,"children":61},"code",{"className":60},[],[62],{"type":49,"value":63},"connecting-to-data-source",{"type":49,"value":65},".",{"type":43,"tag":67,"props":68,"children":70},"h2",{"id":69},"philosophy",[71],{"type":49,"value":72},"Philosophy",{"type":43,"tag":52,"props":74,"children":75},{},[76,82],{"type":43,"tag":77,"props":78,"children":79},"strong",{},[80],{"type":49,"value":81},"Default to S3 Tables unless the environment says otherwise.",{"type":49,"value":83}," 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.",{"type":43,"tag":67,"props":85,"children":87},{"id":86},"common-tasks",[88],{"type":49,"value":89},"Common Tasks",{"type":43,"tag":52,"props":91,"children":92},{},[93],{"type":49,"value":94},"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.",{"type":43,"tag":67,"props":96,"children":98},{"id":97},"workflow",[99],{"type":49,"value":100},"Workflow",{"type":43,"tag":102,"props":103,"children":105},"h3",{"id":104},"_1-verify-dependencies-and-context",[106],{"type":49,"value":107},"1. Verify Dependencies and Context",{"type":43,"tag":109,"props":110,"children":111},"ul",{},[112,118,129],{"type":43,"tag":113,"props":114,"children":115},"li",{},[116],{"type":49,"value":117},"You MUST check whether AWS MCP tools or AWS CLI are available and inform the user if missing",{"type":43,"tag":113,"props":119,"children":120},{},[121,123],{"type":49,"value":122},"You MUST confirm target AWS region and verify credentials with ",{"type":43,"tag":58,"props":124,"children":126},{"className":125},[],[127],{"type":49,"value":128},"aws sts get-caller-identity",{"type":43,"tag":113,"props":130,"children":131},{},[132,134,140],{"type":49,"value":133},"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 ",{"type":43,"tag":58,"props":135,"children":137},{"className":136},[],[138],{"type":49,"value":139},"querying-data-lake",{"type":49,"value":65},{"type":43,"tag":102,"props":142,"children":144},{"id":143},"_2-classify-the-source",[145],{"type":49,"value":146},"2. Classify the Source",{"type":43,"tag":148,"props":149,"children":150},"table",{},[151,175],{"type":43,"tag":152,"props":153,"children":154},"thead",{},[155],{"type":43,"tag":156,"props":157,"children":158},"tr",{},[159,165,170],{"type":43,"tag":160,"props":161,"children":162},"th",{},[163],{"type":49,"value":164},"User says...",{"type":43,"tag":160,"props":166,"children":167},{},[168],{"type":49,"value":169},"Source type",{"type":43,"tag":160,"props":171,"children":172},{},[173],{"type":49,"value":174},"Reference",{"type":43,"tag":176,"props":177,"children":178},"tbody",{},[179,203,225,247,269,291,313],{"type":43,"tag":156,"props":180,"children":181},{},[182,188,193],{"type":43,"tag":183,"props":184,"children":185},"td",{},[186],{"type":49,"value":187},"\"upload my file\", \"local CSV\", \"move to S3\"",{"type":43,"tag":183,"props":189,"children":190},{},[191],{"type":49,"value":192},"Local file",{"type":43,"tag":183,"props":194,"children":195},{},[196],{"type":43,"tag":197,"props":198,"children":200},"a",{"href":199},"references\u002Flocal-upload.md",[201],{"type":49,"value":202},"local-upload.md",{"type":43,"tag":156,"props":204,"children":205},{},[206,211,216],{"type":43,"tag":183,"props":207,"children":208},{},[209],{"type":49,"value":210},"\"load from S3\", \"import CSV\u002FJSON\u002FParquet from s3:\u002F\u002F\"",{"type":43,"tag":183,"props":212,"children":213},{},[214],{"type":49,"value":215},"S3 files",{"type":43,"tag":183,"props":217,"children":218},{},[219],{"type":43,"tag":197,"props":220,"children":222},{"href":221},"references\u002Fs3-files.md",[223],{"type":49,"value":224},"s3-files.md",{"type":43,"tag":156,"props":226,"children":227},{},[228,233,238],{"type":43,"tag":183,"props":229,"children":230},{},[231],{"type":49,"value":232},"\"import from Oracle\u002FPostgres\u002FMySQL\u002FSQL Server\u002FRedshift\u002FRDS\u002FAurora\"",{"type":43,"tag":183,"props":234,"children":235},{},[236],{"type":49,"value":237},"JDBC",{"type":43,"tag":183,"props":239,"children":240},{},[241],{"type":43,"tag":197,"props":242,"children":244},{"href":243},"references\u002Fjdbc-ingest.md",[245],{"type":49,"value":246},"jdbc-ingest.md",{"type":43,"tag":156,"props":248,"children":249},{},[250,255,260],{"type":43,"tag":183,"props":251,"children":252},{},[253],{"type":49,"value":254},"\"pull from Snowflake\", \"Snowflake table to S3\"",{"type":43,"tag":183,"props":256,"children":257},{},[258],{"type":49,"value":259},"Snowflake",{"type":43,"tag":183,"props":261,"children":262},{},[263],{"type":43,"tag":197,"props":264,"children":266},{"href":265},"references\u002Fsnowflake-ingest.md",[267],{"type":49,"value":268},"snowflake-ingest.md",{"type":43,"tag":156,"props":270,"children":271},{},[272,277,282],{"type":43,"tag":183,"props":273,"children":274},{},[275],{"type":49,"value":276},"\"import from BigQuery\", \"GCP analytics to S3\"",{"type":43,"tag":183,"props":278,"children":279},{},[280],{"type":49,"value":281},"BigQuery",{"type":43,"tag":183,"props":283,"children":284},{},[285],{"type":43,"tag":197,"props":286,"children":288},{"href":287},"references\u002Fbigquery-ingest.md",[289],{"type":49,"value":290},"bigquery-ingest.md",{"type":43,"tag":156,"props":292,"children":293},{},[294,299,304],{"type":43,"tag":183,"props":295,"children":296},{},[297],{"type":49,"value":298},"\"export DynamoDB\", \"DynamoDB to data lake\"",{"type":43,"tag":183,"props":300,"children":301},{},[302],{"type":49,"value":303},"DynamoDB",{"type":43,"tag":183,"props":305,"children":306},{},[307],{"type":43,"tag":197,"props":308,"children":310},{"href":309},"references\u002Fdynamodb-ingest.md",[311],{"type":49,"value":312},"dynamodb-ingest.md",{"type":43,"tag":156,"props":314,"children":315},{},[316,321,326],{"type":43,"tag":183,"props":317,"children":318},{},[319],{"type":49,"value":320},"\"migrate Glue table\", \"convert Hive to Iceberg\"",{"type":43,"tag":183,"props":322,"children":323},{},[324],{"type":49,"value":325},"Catalog migration",{"type":43,"tag":183,"props":327,"children":328},{},[329],{"type":43,"tag":197,"props":330,"children":332},{"href":331},"references\u002Fcatalog-migration.md",[333],{"type":49,"value":334},"catalog-migration.md",{"type":43,"tag":52,"props":336,"children":337},{},[338],{"type":49,"value":339},"If the user names Salesforce, ServiceNow, SAP, MongoDB, Kafka, or another SaaS\u002Fstreaming source, decline -- these are not supported in this release.",{"type":43,"tag":52,"props":341,"children":342},{},[343,345,351],{"type":49,"value":344},"If the source table is referenced by a fuzzy or business name (\"migrate our orders table\", \"pull from the sales warehouse\"), delegate to ",{"type":43,"tag":58,"props":346,"children":348},{"className":347},[],[349],{"type":49,"value":350},"finding-data-lake-assets",{"type":49,"value":352}," to resolve before proceeding.",{"type":43,"tag":102,"props":354,"children":356},{"id":355},"_3-confirm-connection-exists-if-applicable",[357],{"type":49,"value":358},"3. Confirm Connection Exists (if applicable)",{"type":43,"tag":52,"props":360,"children":361},{},[362],{"type":49,"value":363},"For JDBC, Snowflake, and BigQuery sources, a Glue connection is required. Check:",{"type":43,"tag":365,"props":366,"children":371},"pre",{"className":367,"code":368,"language":369,"meta":370,"style":370},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","aws glue get-connection --name \u003CCONNECTION_NAME> --region \u003CREGION>\n","bash","",[372],{"type":43,"tag":58,"props":373,"children":374},{"__ignoreMap":370},[375],{"type":43,"tag":376,"props":377,"children":379},"span",{"class":378,"line":37},"line",[380,385,391,396,401,407,412,418,423,428,432,437,442],{"type":43,"tag":376,"props":381,"children":383},{"style":382},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[384],{"type":49,"value":8},{"type":43,"tag":376,"props":386,"children":388},{"style":387},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[389],{"type":49,"value":390}," glue",{"type":43,"tag":376,"props":392,"children":393},{"style":387},[394],{"type":49,"value":395}," get-connection",{"type":43,"tag":376,"props":397,"children":398},{"style":387},[399],{"type":49,"value":400}," --name",{"type":43,"tag":376,"props":402,"children":404},{"style":403},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[405],{"type":49,"value":406}," \u003C",{"type":43,"tag":376,"props":408,"children":409},{"style":387},[410],{"type":49,"value":411},"CONNECTION_NAM",{"type":43,"tag":376,"props":413,"children":415},{"style":414},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[416],{"type":49,"value":417},"E",{"type":43,"tag":376,"props":419,"children":420},{"style":403},[421],{"type":49,"value":422},">",{"type":43,"tag":376,"props":424,"children":425},{"style":387},[426],{"type":49,"value":427}," --region",{"type":43,"tag":376,"props":429,"children":430},{"style":403},[431],{"type":49,"value":406},{"type":43,"tag":376,"props":433,"children":434},{"style":387},[435],{"type":49,"value":436},"REGIO",{"type":43,"tag":376,"props":438,"children":439},{"style":414},[440],{"type":49,"value":441},"N",{"type":43,"tag":376,"props":443,"children":444},{"style":403},[445],{"type":49,"value":446},">\n",{"type":43,"tag":52,"props":448,"children":449},{},[450,452,457],{"type":49,"value":451},"If the connection does not exist, stop and delegate to ",{"type":43,"tag":58,"props":453,"children":455},{"className":454},[],[456],{"type":49,"value":63},{"type":49,"value":458}," to create and test it. Do not proceed with ingest until the connection is verified.",{"type":43,"tag":52,"props":460,"children":461},{},[462],{"type":49,"value":463},"Local files, S3 files, DynamoDB, and catalog migration do not need a Glue connection.",{"type":43,"tag":102,"props":465,"children":467},{"id":466},"_4-clarify-the-target",[468],{"type":49,"value":469},"4. Clarify the Target",{"type":43,"tag":52,"props":471,"children":472},{},[473],{"type":49,"value":474},"You MUST ask the user (or suggest based on catalog inventory) before creating or writing to any table:",{"type":43,"tag":109,"props":476,"children":477},{},[478,488,506],{"type":43,"tag":113,"props":479,"children":480},{},[481,486],{"type":43,"tag":77,"props":482,"children":483},{},[484],{"type":49,"value":485},"Database\u002Fnamespace",{"type":49,"value":487},": Does a specific target database exist? Or should one be created?",{"type":43,"tag":113,"props":489,"children":490},{},[491,496,498,504],{"type":43,"tag":77,"props":492,"children":493},{},[494],{"type":49,"value":495},"Table",{"type":49,"value":497},": Existing table (append\u002Fmerge) or new table (delegate to ",{"type":43,"tag":58,"props":499,"children":501},{"className":500},[],[502],{"type":49,"value":503},"creating-data-lake-table",{"type":49,"value":505},")?",{"type":43,"tag":113,"props":507,"children":508},{},[509,514],{"type":43,"tag":77,"props":510,"children":511},{},[512],{"type":49,"value":513},"Format",{"type":49,"value":515},": S3 Tables (default), standard Iceberg, or raw Parquet?",{"type":43,"tag":52,"props":517,"children":518},{},[519],{"type":43,"tag":77,"props":520,"children":521},{},[522],{"type":49,"value":523},"Inventory-aware defaults:",{"type":43,"tag":52,"props":525,"children":526},{},[527,529,535],{"type":49,"value":528},"If you have already run ",{"type":43,"tag":58,"props":530,"children":532},{"className":531},[],[533],{"type":49,"value":534},"exploring-data-catalog",{"type":49,"value":536}," or can quickly check, use what exists:",{"type":43,"tag":109,"props":538,"children":539},{},[540,553,558],{"type":43,"tag":113,"props":541,"children":542},{},[543,545,551],{"type":49,"value":544},"Account has an ",{"type":43,"tag":58,"props":546,"children":548},{"className":547},[],[549],{"type":49,"value":550},"s3tablescatalog",{"type":49,"value":552}," federated catalog and active table buckets: recommend S3 Tables",{"type":43,"tag":113,"props":554,"children":555},{},[556],{"type":49,"value":557},"Account has general-purpose buckets with Iceberg tables and no S3 Tables usage: recommend standard Iceberg on their existing bucket",{"type":43,"tag":113,"props":559,"children":560},{},[561],{"type":49,"value":562},"Account uses Parquet\u002FORC on S3 without Iceberg metadata: ask whether to adopt Iceberg now (recommend yes) or continue with raw files",{"type":43,"tag":52,"props":564,"children":565},{},[566,568,574],{"type":49,"value":567},"Do not force S3 Tables on customers who haven't adopted it. See ",{"type":43,"tag":197,"props":569,"children":571},{"href":570},"references\u002Ficeberg-catalog-config-and-usage.md",[572],{"type":49,"value":573},"iceberg-catalog-config-and-usage.md",{"type":49,"value":65},{"type":43,"tag":52,"props":576,"children":577},{},[578],{"type":43,"tag":77,"props":579,"children":580},{},[581],{"type":49,"value":582},"Delegations from this step:",{"type":43,"tag":109,"props":584,"children":585},{},[586,596,606],{"type":43,"tag":113,"props":587,"children":588},{},[589,591],{"type":49,"value":590},"Target table doesn't exist -> ",{"type":43,"tag":58,"props":592,"children":594},{"className":593},[],[595],{"type":49,"value":503},{"type":43,"tag":113,"props":597,"children":598},{},[599,601],{"type":49,"value":600},"Target database named by fuzzy term -> ",{"type":43,"tag":58,"props":602,"children":604},{"className":603},[],[605],{"type":49,"value":350},{"type":43,"tag":113,"props":607,"children":608},{},[609,611],{"type":49,"value":610},"User doesn't know what exists -> ",{"type":43,"tag":58,"props":612,"children":614},{"className":613},[],[615],{"type":49,"value":534},{"type":43,"tag":102,"props":617,"children":619},{"id":618},"_5-execute-source-workflow",[620],{"type":49,"value":621},"5. Execute Source Workflow",{"type":43,"tag":52,"props":623,"children":624},{},[625],{"type":49,"value":626},"Read the source-specific reference and follow its phases. Each is self-contained with job templates, gotchas, and troubleshooting:",{"type":43,"tag":109,"props":628,"children":629},{},[630],{"type":43,"tag":113,"props":631,"children":632},{},[633],{"type":49,"value":634},"Local \u002F S3 \u002F JDBC \u002F Snowflake \u002F BigQuery \u002F DynamoDB \u002F catalog migration -- one reference per source",{"type":43,"tag":52,"props":636,"children":637},{},[638,640,646,648,654],{"type":49,"value":639},"Common Glue 5.1 or higher job configuration and PySpark templates are shared in ",{"type":43,"tag":197,"props":641,"children":643},{"href":642},"references\u002Fglue-job-config.md",[644],{"type":49,"value":645},"glue-job-config.md",{"type":49,"value":647}," and ",{"type":43,"tag":197,"props":649,"children":651},{"href":650},"references\u002Fglue-job-scripts.md",[652],{"type":49,"value":653},"glue-job-scripts.md",{"type":49,"value":65},{"type":43,"tag":102,"props":656,"children":658},{"id":657},"_6-validate",[659],{"type":49,"value":660},"6. Validate",{"type":43,"tag":52,"props":662,"children":663},{},[664],{"type":49,"value":665},"Run all three, do not skip:",{"type":43,"tag":667,"props":668,"children":669},"ol",{},[670,675,680],{"type":43,"tag":113,"props":671,"children":672},{},[673],{"type":49,"value":674},"Row count matches expected (source vs target)",{"type":43,"tag":113,"props":676,"children":677},{},[678],{"type":49,"value":679},"Null check on critical columns",{"type":43,"tag":113,"props":681,"children":682},{},[683],{"type":49,"value":684},"Spot-check 3-5 sample rows",{"type":43,"tag":52,"props":686,"children":687},{},[688,690,696],{"type":49,"value":689},"See ",{"type":43,"tag":197,"props":691,"children":693},{"href":692},"references\u002Fdata-quality-validation.md",[694],{"type":49,"value":695},"data-quality-validation.md",{"type":49,"value":65},{"type":43,"tag":102,"props":698,"children":700},{"id":699},"_7-schedule-if-recurring",[701],{"type":49,"value":702},"7. Schedule (if recurring)",{"type":43,"tag":52,"props":704,"children":705},{},[706,708,714],{"type":49,"value":707},"For recurring pipelines, create a Glue Trigger with a cron schedule. See ",{"type":43,"tag":197,"props":709,"children":711},{"href":710},"references\u002Ftesting-and-scheduling.md",[712],{"type":49,"value":713},"testing-and-scheduling.md",{"type":49,"value":715},". Simple single-step pipelines use Glue Triggers; multi-step with branching uses MWAA.",{"type":43,"tag":67,"props":717,"children":719},{"id":718},"argument-routing",[720],{"type":49,"value":721},"Argument Routing",{"type":43,"tag":109,"props":723,"children":724},{},[725,730,735,740,751],{"type":43,"tag":113,"props":726,"children":727},{},[728],{"type":49,"value":729},"S3 path only: Infer one-time load, start Step 2 with S3 files",{"type":43,"tag":113,"props":731,"children":732},{},[733],{"type":49,"value":734},"Connection name: Start Step 3 with the named connection",{"type":43,"tag":113,"props":736,"children":737},{},[738],{"type":49,"value":739},"Table name: Start Step 4, ask whether this is source or target",{"type":43,"tag":113,"props":741,"children":742},{},[743,749],{"type":43,"tag":58,"props":744,"children":746},{"className":745},[],[747],{"type":49,"value":748},"--target",{"type":49,"value":750}," flag: Pre-fill the target format in Step 4",{"type":43,"tag":113,"props":752,"children":753},{},[754],{"type":49,"value":755},"No args: Walk through interactively",{"type":43,"tag":67,"props":757,"children":759},{"id":758},"gotchas",[760],{"type":49,"value":761},"Gotchas",{"type":43,"tag":109,"props":763,"children":764},{},[765,778,821,834,839,856,861,866,878],{"type":43,"tag":113,"props":766,"children":767},{},[768,770,776],{"type":49,"value":769},"S3 Tables requires Glue 5.1 or higher and ",{"type":43,"tag":58,"props":771,"children":773},{"className":772},[],[774],{"type":49,"value":775},"--datalake-formats iceberg",{"type":49,"value":777}," job argument",{"type":43,"tag":113,"props":779,"children":780},{},[781,783,789,791,797,799,805,807,813,815,819],{"type":49,"value":782},"All ",{"type":43,"tag":58,"props":784,"children":786},{"className":785},[],[787],{"type":49,"value":788},"spark.sql.catalog.*",{"type":49,"value":790}," config MUST go in ",{"type":43,"tag":58,"props":792,"children":794},{"className":793},[],[795],{"type":49,"value":796},"--conf",{"type":49,"value":798}," job arguments, never in ",{"type":43,"tag":58,"props":800,"children":802},{"className":801},[],[803],{"type":49,"value":804},"spark.conf.set()",{"type":49,"value":806},". Glue 5.x throws ",{"type":43,"tag":58,"props":808,"children":810},{"className":809},[],[811],{"type":49,"value":812},"AnalysisException: Cannot modify the value of a static config",{"type":49,"value":814}," otherwise. See ",{"type":43,"tag":197,"props":816,"children":817},{"href":570},[818],{"type":49,"value":573},{"type":49,"value":820}," for correct catalog configs.",{"type":43,"tag":113,"props":822,"children":823},{},[824,826,832],{"type":49,"value":825},"The ",{"type":43,"tag":58,"props":827,"children":829},{"className":828},[],[830],{"type":49,"value":831},"warehouse",{"type":49,"value":833}," parameter is required in S3 Tables catalog config. Without it Spark fails with \"Cannot derive default warehouse location\".",{"type":43,"tag":113,"props":835,"children":836},{},[837],{"type":49,"value":838},"Table and column names in S3 Tables MUST be all lowercase",{"type":43,"tag":113,"props":840,"children":841},{},[842,848,850],{"type":43,"tag":58,"props":843,"children":845},{"className":844},[],[846],{"type":49,"value":847},"overwritePartitions()",{"type":49,"value":849}," only replaces partitions present in the DataFrame -- for full refresh with deletes, use ",{"type":43,"tag":58,"props":851,"children":853},{"className":852},[],[854],{"type":49,"value":855},"createOrReplace()",{"type":43,"tag":113,"props":857,"children":858},{},[859],{"type":49,"value":860},"Standard Iceberg targets MUST include a LOCATION clause; S3 Tables MUST NOT",{"type":43,"tag":113,"props":862,"children":863},{},[864],{"type":49,"value":865},"DynamoDB does not need a Glue connection -- do not attempt to create one",{"type":43,"tag":113,"props":867,"children":868},{},[869,871,876],{"type":49,"value":870},"Connection failures during ingest delegate back to ",{"type":43,"tag":58,"props":872,"children":874},{"className":873},[],[875],{"type":49,"value":63},{"type":49,"value":877},"; do not debug network\u002Fcredentials in this skill",{"type":43,"tag":113,"props":879,"children":880},{},[881],{"type":49,"value":882},"For target tables in SageMaker Unified Studio projects, ensure the project role has write access to the target namespace before the Glue job runs",{"type":43,"tag":67,"props":884,"children":886},{"id":885},"troubleshooting",[887],{"type":49,"value":888},"Troubleshooting",{"type":43,"tag":148,"props":890,"children":891},{},[892,913],{"type":43,"tag":152,"props":893,"children":894},{},[895],{"type":43,"tag":156,"props":896,"children":897},{},[898,903,908],{"type":43,"tag":160,"props":899,"children":900},{},[901],{"type":49,"value":902},"Error",{"type":43,"tag":160,"props":904,"children":905},{},[906],{"type":49,"value":907},"Likely cause",{"type":43,"tag":160,"props":909,"children":910},{},[911],{"type":49,"value":912},"Action",{"type":43,"tag":176,"props":914,"children":915},{},[916,934,952,970,993],{"type":43,"tag":156,"props":917,"children":918},{},[919,924,929],{"type":43,"tag":183,"props":920,"children":921},{},[922],{"type":49,"value":923},"Access Denied on S3",{"type":43,"tag":183,"props":925,"children":926},{},[927],{"type":49,"value":928},"Missing IAM permissions",{"type":43,"tag":183,"props":930,"children":931},{},[932],{"type":49,"value":933},"Check Glue role has s3:GetObject, s3:PutObject",{"type":43,"tag":156,"props":935,"children":936},{},[937,942,947],{"type":43,"tag":183,"props":938,"children":939},{},[940],{"type":49,"value":941},"Access Denied on S3 Tables",{"type":43,"tag":183,"props":943,"children":944},{},[945],{"type":49,"value":946},"Missing s3tables:* permissions",{"type":43,"tag":183,"props":948,"children":949},{},[950],{"type":49,"value":951},"Add S3 Tables inline policy to Glue role",{"type":43,"tag":156,"props":953,"children":954},{},[955,960,965],{"type":43,"tag":183,"props":956,"children":957},{},[958],{"type":49,"value":959},"CTAS timeout",{"type":43,"tag":183,"props":961,"children":962},{},[963],{"type":49,"value":964},"Dataset too large for Athena",{"type":43,"tag":183,"props":966,"children":967},{},[968],{"type":49,"value":969},"Switch to Glue ETL or batch with WHERE filters",{"type":43,"tag":156,"props":971,"children":972},{},[973,978,983],{"type":43,"tag":183,"props":974,"children":975},{},[976],{"type":49,"value":977},"JDBC connection timeout\u002Fauth failure",{"type":43,"tag":183,"props":979,"children":980},{},[981],{"type":49,"value":982},"Connection-level issue",{"type":43,"tag":183,"props":984,"children":985},{},[986,988],{"type":49,"value":987},"Delegate to ",{"type":43,"tag":58,"props":989,"children":991},{"className":990},[],[992],{"type":49,"value":63},{"type":43,"tag":156,"props":994,"children":995},{},[996,1001,1006],{"type":43,"tag":183,"props":997,"children":998},{},[999],{"type":49,"value":1000},"Throughput exceeded (DynamoDB)",{"type":43,"tag":183,"props":1002,"children":1003},{},[1004],{"type":49,"value":1005},"Read percent too high",{"type":43,"tag":183,"props":1007,"children":1008},{},[1009,1011,1017],{"type":49,"value":1010},"Lower ",{"type":43,"tag":58,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":49,"value":1016},"read.percent",{"type":49,"value":1018}," or use native export",{"type":43,"tag":52,"props":1020,"children":1021},{},[1022,1023,1029],{"type":49,"value":689},{"type":43,"tag":197,"props":1024,"children":1026},{"href":1025},"references\u002Ferror-handling.md",[1027],{"type":49,"value":1028},"error-handling.md",{"type":49,"value":1030}," for the full catalog.",{"type":43,"tag":67,"props":1032,"children":1034},{"id":1033},"references",[1035],{"type":49,"value":1036},"References",{"type":43,"tag":102,"props":1038,"children":1040},{"id":1039},"source-specific",[1041],{"type":49,"value":1042},"Source-specific",{"type":43,"tag":109,"props":1044,"children":1045},{},[1046,1055,1064,1073,1082,1091,1100],{"type":43,"tag":113,"props":1047,"children":1048},{},[1049,1053],{"type":43,"tag":197,"props":1050,"children":1051},{"href":199},[1052],{"type":49,"value":202},{"type":49,"value":1054}," -- Local files",{"type":43,"tag":113,"props":1056,"children":1057},{},[1058,1062],{"type":43,"tag":197,"props":1059,"children":1060},{"href":221},[1061],{"type":49,"value":224},{"type":49,"value":1063}," -- S3 files (CSV, JSON, Parquet, Avro, ORC)",{"type":43,"tag":113,"props":1065,"children":1066},{},[1067,1071],{"type":43,"tag":197,"props":1068,"children":1069},{"href":243},[1070],{"type":49,"value":246},{"type":49,"value":1072}," -- Oracle, SQL Server, PostgreSQL, MySQL, RDS, Aurora, Redshift",{"type":43,"tag":113,"props":1074,"children":1075},{},[1076,1080],{"type":43,"tag":197,"props":1077,"children":1078},{"href":265},[1079],{"type":49,"value":268},{"type":49,"value":1081}," -- Snowflake",{"type":43,"tag":113,"props":1083,"children":1084},{},[1085,1089],{"type":43,"tag":197,"props":1086,"children":1087},{"href":287},[1088],{"type":49,"value":290},{"type":49,"value":1090}," -- BigQuery",{"type":43,"tag":113,"props":1092,"children":1093},{},[1094,1098],{"type":43,"tag":197,"props":1095,"children":1096},{"href":309},[1097],{"type":49,"value":312},{"type":49,"value":1099}," -- DynamoDB (export and Glue direct read)",{"type":43,"tag":113,"props":1101,"children":1102},{},[1103,1107],{"type":43,"tag":197,"props":1104,"children":1105},{"href":331},[1106],{"type":49,"value":334},{"type":49,"value":1108}," -- Existing Glue catalog tables (Hive, self-managed Iceberg)",{"type":43,"tag":102,"props":1110,"children":1112},{"id":1111},"cross-cutting",[1113],{"type":49,"value":1114},"Cross-cutting",{"type":43,"tag":109,"props":1116,"children":1117},{},[1118,1127,1136,1145,1156,1165,1174,1185,1196,1207,1218,1227],{"type":43,"tag":113,"props":1119,"children":1120},{},[1121,1125],{"type":43,"tag":197,"props":1122,"children":1123},{"href":570},[1124],{"type":49,"value":573},{"type":49,"value":1126}," -- S3 Tables, standard Iceberg, raw files: catalog config, engine access patterns",{"type":43,"tag":113,"props":1128,"children":1129},{},[1130,1134],{"type":43,"tag":197,"props":1131,"children":1132},{"href":642},[1133],{"type":49,"value":645},{"type":49,"value":1135}," -- Job sizing, monitoring, retry",{"type":43,"tag":113,"props":1137,"children":1138},{},[1139,1143],{"type":43,"tag":197,"props":1140,"children":1141},{"href":650},[1142],{"type":49,"value":653},{"type":49,"value":1144}," -- PySpark templates (append, upsert, custom SQL, full refresh)",{"type":43,"tag":113,"props":1146,"children":1147},{},[1148,1154],{"type":43,"tag":197,"props":1149,"children":1151},{"href":1150},"references\u002Fincremental-loading.md",[1152],{"type":49,"value":1153},"incremental-loading.md",{"type":49,"value":1155}," -- Watermark strategies",{"type":43,"tag":113,"props":1157,"children":1158},{},[1159,1163],{"type":43,"tag":197,"props":1160,"children":1161},{"href":710},[1162],{"type":49,"value":713},{"type":49,"value":1164}," -- Glue Triggers, MWAA",{"type":43,"tag":113,"props":1166,"children":1167},{},[1168,1172],{"type":43,"tag":197,"props":1169,"children":1170},{"href":692},[1171],{"type":49,"value":695},{"type":49,"value":1173}," -- Row counts, null checks, Glue Data Quality",{"type":43,"tag":113,"props":1175,"children":1176},{},[1177,1183],{"type":43,"tag":197,"props":1178,"children":1180},{"href":1179},"references\u002Fschema-evolution.md",[1181],{"type":49,"value":1182},"schema-evolution.md",{"type":49,"value":1184}," -- ALTER TABLE ADD COLUMNS, nested JSON",{"type":43,"tag":113,"props":1186,"children":1187},{},[1188,1194],{"type":43,"tag":197,"props":1189,"children":1191},{"href":1190},"references\u002Ftype-transformations.md",[1192],{"type":49,"value":1193},"type-transformations.md",{"type":49,"value":1195}," -- Type conflict resolution",{"type":43,"tag":113,"props":1197,"children":1198},{},[1199,1205],{"type":43,"tag":197,"props":1200,"children":1202},{"href":1201},"references\u002Fformat-specific-loading.md",[1203],{"type":49,"value":1204},"format-specific-loading.md",{"type":49,"value":1206}," -- CSV\u002FJSON\u002FParquet\u002FAvro\u002FORC specifics",{"type":43,"tag":113,"props":1208,"children":1209},{},[1210,1216],{"type":43,"tag":197,"props":1211,"children":1213},{"href":1212},"references\u002Fathena-loading.md",[1214],{"type":49,"value":1215},"athena-loading.md",{"type":49,"value":1217}," -- Athena INSERT INTO as simple-load fallback",{"type":43,"tag":113,"props":1219,"children":1220},{},[1221,1225],{"type":43,"tag":197,"props":1222,"children":1223},{"href":1025},[1224],{"type":49,"value":1028},{"type":49,"value":1226}," -- Ingest errors (connection errors delegate to connecting-to-data-source)",{"type":43,"tag":113,"props":1228,"children":1229},{},[1230,1236],{"type":43,"tag":197,"props":1231,"children":1233},{"href":1232},"references\u002Fupload-options.md",[1234],{"type":49,"value":1235},"upload-options.md",{"type":49,"value":1237}," -- aws s3 cp vs sync, multipart",{"type":43,"tag":102,"props":1239,"children":1241},{"id":1240},"migration-specific",[1242],{"type":49,"value":1243},"Migration-specific",{"type":43,"tag":109,"props":1245,"children":1246},{},[1247,1258,1269,1280],{"type":43,"tag":113,"props":1248,"children":1249},{},[1250,1256],{"type":43,"tag":197,"props":1251,"children":1253},{"href":1252},"references\u002Fctas-patterns.md",[1254],{"type":49,"value":1255},"ctas-patterns.md",{"type":49,"value":1257}," -- Athena CTAS syntax and partition transforms",{"type":43,"tag":113,"props":1259,"children":1260},{},[1261,1267],{"type":43,"tag":197,"props":1262,"children":1264},{"href":1263},"references\u002Fglue-etl-migration.md",[1265],{"type":49,"value":1266},"glue-etl-migration.md",{"type":49,"value":1268}," -- Large-table migration via Glue 5.1 or higher PySpark",{"type":43,"tag":113,"props":1270,"children":1271},{},[1272,1278],{"type":43,"tag":197,"props":1273,"children":1275},{"href":1274},"references\u002Fmigration-validation.md",[1276],{"type":49,"value":1277},"migration-validation.md",{"type":49,"value":1279}," -- Full validation checklist",{"type":43,"tag":113,"props":1281,"children":1282},{},[1283,1289],{"type":43,"tag":197,"props":1284,"children":1286},{"href":1285},"references\u002Fmigration-troubleshooting.md",[1287],{"type":49,"value":1288},"migration-troubleshooting.md",{"type":49,"value":1290}," -- CTAS failures, visibility, partitions",{"type":43,"tag":102,"props":1292,"children":1294},{"id":1293},"jdbc-specific",[1295],{"type":49,"value":1296},"JDBC-specific",{"type":43,"tag":109,"props":1298,"children":1299},{},[1300,1311],{"type":43,"tag":113,"props":1301,"children":1302},{},[1303,1309],{"type":43,"tag":197,"props":1304,"children":1306},{"href":1305},"references\u002Fjdbc-schema-discovery.md",[1307],{"type":49,"value":1308},"jdbc-schema-discovery.md",{"type":49,"value":1310}," -- Crawler, direct inspection, custom SQL",{"type":43,"tag":113,"props":1312,"children":1313},{},[1314,1320],{"type":43,"tag":197,"props":1315,"children":1317},{"href":1316},"references\u002Fjdbc-performance.md",[1318],{"type":49,"value":1319},"jdbc-performance.md",{"type":49,"value":1321}," -- Parallel reads, partitioning",{"type":43,"tag":1323,"props":1324,"children":1325},"style",{},[1326],{"type":49,"value":1327},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1329,"total":1500},[1330,1347,1362,1377,1392,1402,1417,1433,1450,1463,1475,1490],{"slug":1331,"name":1331,"fn":1332,"description":1333,"org":1334,"tags":1335,"stars":24,"repoUrl":25,"updatedAt":1346},"agents-build","add capabilities to existing agent projects","Use when adding capabilities to an existing agent project — memory, app integration, VPC, multi-agent, migration, model changes, browser, code interpreter, or resource removal. Triggers on: \"add memory\", \"remember across sessions\", \"call agent from app\", \"invoke agent from code\", \"auth to call agent\", \"streaming responses\", \"VPC\", \"VPC connectivity\", \"VPC error\", \"can't reach from VPC\", \"multi-agent\", \"A2A\", \"A2A auth\", \"orchestrator not delegating\", \"specialist not called\", \"migrate Bedrock Agent\", \"after import\", \"migration issue\", \"framework for migration\", \"change model\", \"browser tool\", \"code interpreter\", \"delete agent\", \"tear down\", \"agentcore remove\", \"cross-account memory\", \"resource-based policy on memory\", \"pay for x402 content\", \"402 Payment Required\", \"microtransactions\", \"paid API or tool\". Not for connecting to external APIs via Gateway — use agents-connect. Not for scaffolding a new project — use agents-get-started. Not for CLI\u002Fdev server errors — use agents-debug. Strands vs LangGraph in a migration context routes here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1336,1339,1342,1343],{"name":1337,"slug":1338,"type":15},"Agents","agents",{"name":1340,"slug":1341,"type":15},"Automation","automation",{"name":23,"slug":8,"type":15},{"name":1344,"slug":1345,"type":15},"Engineering","engineering","2026-07-12T08:42:53.812877",{"slug":1348,"name":1348,"fn":1349,"description":1350,"org":1351,"tags":1352,"stars":24,"repoUrl":25,"updatedAt":1361},"agents-connect","connect agents to external services","Use when connecting your agent to external APIs, tools, or services via Gateway, or restricting tool access with Cedar policies. Handles gateway setup, target types, outbound auth (OAuth, API key, IAM), credentials, and Cedar policy authoring. Triggers on: \"connect to API\", \"add gateway\", \"connect to MCP server\", \"Lambda tools\", \"OpenAPI\", \"gateway target\", \"Cedar policy\", \"restrict tools\", \"policy engine\", \"gateway auth error\", \"store API key\", \"outbound credential\", \"env var API key\", \"API key None after deploy\", \"credential not available after deploy\", \"should this be a gateway target\", \"give my agent tools\", \"add tools to agent\". Not for inbound auth (who can call your agent) — use agents-harden. Not for debugging agent behavior — use agents-debug. Not for VPC networking errors (agent can't reach APIs due to VPC) — use agents-build. Not for creating or hosting a new MCP server project — use agents-get-started.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1353,1354,1357,1360],{"name":1337,"slug":1338,"type":15},{"name":1355,"slug":1356,"type":15},"API Development","api-development",{"name":1358,"slug":1359,"type":15},"Authentication","authentication",{"name":23,"slug":8,"type":15},"2026-07-16T06:00:38.866147",{"slug":1363,"name":1363,"fn":1364,"description":1365,"org":1366,"tags":1367,"stars":24,"repoUrl":25,"updatedAt":1376},"agents-debug","debug agent and environment issues","Use when your agent or environment is broken — wrong answers, errors, timeouts, tool failures, or CLI issues. Reads traces and logs to diagnose root causes. Also checks prerequisites when the CLI itself isn't working. Triggers on: \"agent not working\", \"wrong answer\", \"agent error\", \"tool call failing\", \"debug agent\", \"check logs\", \"read traces\", \"broken\", \"500 error\", \"424 error\", \"model access denied\", \"command not found\", \"stuck in DELETING\", \"maxVms exceeded\", \"cold start diagnosis\", \"cold start slow\", \"agentcore create error\", \"create failed\", \"exit code 7\", \"connection refused local dev\". Not for deploy failures — use agents-deploy. Not for performance tuning without errors — use agents-optimize. Not for VPC configuration — use agents-build. Not for observability setup or missing logs — use agents-optimize.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1368,1369,1370,1373],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1371,"slug":1372,"type":15},"Debugging","debugging",{"name":1374,"slug":1375,"type":15},"Observability","observability","2026-07-16T06:00:44.679093",{"slug":1378,"name":1378,"fn":1379,"description":1380,"org":1381,"tags":1382,"stars":24,"repoUrl":25,"updatedAt":1391},"agents-deploy","deploy AI agents to AWS","Use when deploying your agent to AWS, or when a deploy has failed. Handles pre-flight validation, CDK\u002FIAM\u002Fquota error diagnosis, version management, rollback, and canary deployments. Triggers on: \"deploy my agent\", \"agentcore deploy\", \"deploy failed\", \"CDK error\", \"rollback\", \"canary deploy\", \"pin version\", \"redeploy\", \"deploy stuck\". Not for production hardening — use agents-harden. Not for adding capabilities before deploy — use agents-build or agents-connect. Not for VPC configuration errors — use agents-build.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1383,1384,1385,1388],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1386,"slug":1387,"type":15},"CI\u002FCD","ci-cd",{"name":1389,"slug":1390,"type":15},"Deployment","deployment","2026-07-12T08:42:55.059577",{"slug":1393,"name":1393,"fn":1394,"description":1395,"org":1396,"tags":1397,"stars":24,"repoUrl":25,"updatedAt":1401},"agents-get-started","scaffold and deploy new agent projects","Use when a developer wants to create a new agent project or get started with AgentCore. Handles framework selection, project scaffolding, first deploy, and first invocation. Triggers on: \"build an agent\", \"create an agent\", \"get started\", \"new project\", \"agentcore create\", \"which framework\", \"Strands vs LangGraph\", \"hello world agent\", \"first agent\", \"create MCP server\", \"host MCP server\", \"agentcore dev\", \"dev server\", \"what port\", \"local development\". Not for adding capabilities to existing projects — use agents-build or agents-connect. Strands vs LangGraph in a migration context routes to agents-build, not here. Connecting to an existing MCP server routes to agents-connect, not here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1398,1399,1400],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1389,"slug":1390,"type":15},"2026-07-12T08:42:51.963247",{"slug":1403,"name":1403,"fn":1404,"description":1405,"org":1406,"tags":1407,"stars":24,"repoUrl":25,"updatedAt":1416},"agents-harden","harden agents for production","Use when preparing your agent for production — IAM scoping, inbound auth (JWT, SigV4), secrets management, cold start optimization, session lifecycle, rate limiting, input validation, and quota guidance. Triggers on: \"production checklist\", \"harden agent\", \"production ready\", \"secure agent\", \"inbound auth\", \"going live\", \"cold start optimization\", \"session lifecycle\", \"StopRuntimeSession\", \"quota\", \"throttling\", \"maxVms\", \"rate limit\", \"security audit of outbound API calls\", \"gateway target audit for production\", \"restrict who can call\", \"lock down endpoint\", \"only our app can call\". Not for Cedar tool-restriction policies — use agents-connect. Not for quality measurement — use agents-optimize. Not for outbound credential storage or API key wiring — use agents-connect. Not for A2A agent-to-agent auth — use agents-build. Cold start observation and diagnosis (not optimization) routes to agents-debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1408,1409,1410,1413],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1411,"slug":1412,"type":15},"Best Practices","best-practices",{"name":1414,"slug":1415,"type":15},"Security","security","2026-07-16T06:00:42.174705",{"slug":1418,"name":1418,"fn":1419,"description":1420,"org":1421,"tags":1422,"stars":24,"repoUrl":25,"updatedAt":1432},"agents-optimize","optimize agent quality and performance","Use when measuring or improving agent quality and performance — set up evaluators, online monitoring, CI\u002FCD quality gates, observability, or cost optimization. Triggers on: \"evaluate my agent\", \"add evaluator\", \"measure quality\", \"quality gate\", \"run evals\", \"agent too slow\", \"why is it slow\", \"reduce latency\", \"set up observability\", \"CloudWatch dashboard\", \"how much does my agent cost\", \"cost optimization\", \"logs not showing up\", \"logs missing\", \"spans not found\", \"eval failing\", \"eval error\", \"dev traces\", \"local traces\", \"agentcore dev traces\", \"traces to CloudWatch\". Not for debugging errors or crashes — use agents-debug. Slow but correct routes here; broken routes to debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1423,1424,1425,1428,1429],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1426,"slug":1427,"type":15},"Evals","evals",{"name":1374,"slug":1375,"type":15},{"name":1430,"slug":1431,"type":15},"Performance","performance","2026-07-12T08:42:56.488105",{"slug":1434,"name":1434,"fn":1435,"description":1436,"org":1437,"tags":1438,"stars":24,"repoUrl":25,"updatedAt":1449},"amazon-aurora-mysql","manage Amazon Aurora MySQL clusters","Amazon Aurora MySQL — creates, modifies, and advises on Aurora MySQL clusters specifically (MySQL-compatible engine, Aurora serverless, parallel query). Trigger for Aurora MySQL cluster operations, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or MySQL upgrade planning. Aurora MySQL uses full (VPC-based) configuration — express configuration is PostgreSQL-only. For Aurora PostgreSQL, use amazon-aurora-postgresql instead. Contains safety guardrails and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1439,1440,1443,1446],{"name":23,"slug":8,"type":15},{"name":1441,"slug":1442,"type":15},"Database","database",{"name":1444,"slug":1445,"type":15},"MySQL","mysql",{"name":1447,"slug":1448,"type":15},"Serverless","serverless","2026-07-12T08:43:13.27939",{"slug":1451,"name":1451,"fn":1452,"description":1453,"org":1454,"tags":1455,"stars":24,"repoUrl":25,"updatedAt":1462},"amazon-aurora-postgresql","configure Amazon Aurora PostgreSQL clusters","Amazon Aurora PostgreSQL — creates, modifies, and advises on Aurora PostgreSQL clusters specifically (PostgreSQL-compatible engine, Aurora serverless, express configuration, pgvector, Babelfish). Trigger for Aurora PostgreSQL cluster operations, express-configuration quick-start, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or PostgreSQL upgrade planning. For Aurora MySQL, use amazon-aurora-mysql instead. Contains safety guardrails, express-first routing, and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1456,1457,1458,1461],{"name":23,"slug":8,"type":15},{"name":1441,"slug":1442,"type":15},{"name":1459,"slug":1460,"type":15},"PostgreSQL","postgresql",{"name":1447,"slug":1448,"type":15},"2026-07-16T06:00:34.789624",{"slug":1464,"name":1464,"fn":1465,"description":1466,"org":1467,"tags":1468,"stars":24,"repoUrl":25,"updatedAt":1474},"amazon-bedrock","build generative AI apps with Amazon Bedrock","Builds generative AI applications on Amazon Bedrock. Covers model invocation (Converse API, InvokeModel), RAG with Knowledge Bases, Bedrock Agents, Guardrails, and AgentCore. Use when invoking models, setting up Knowledge Bases, creating agents, applying guardrails, deploying to AgentCore, migrating\u002Fporting\u002Fconverting a Bedrock Agent (including inline agents) to an AgentCore Harness, troubleshooting Bedrock errors (ThrottlingException, AccessDeniedException), or choosing models (Claude, Llama, Nova, Titan). ALSO USE for prompt caching setup and debugging, quota health checks and throttling diagnosis, cost attribution and tracking, migrating between Claude model generations (4.5 to 4.6 to 4.7), chunking strategies, API selection (Converse vs InvokeModel), guardrail capabilities, and model selection. Also covers AgentCore Payments setup (x402, microtransactions, Payment Manager, Connector, Instrument, Coinbase CDP, Stripe Privy, 402 Payment Required, pay for content, paid endpoint, agent payments). NOT for custom model training, Rekognition, or Comprehend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1469,1470,1471],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1472,"slug":1473,"type":15},"LLM","llm","2026-07-25T05:30:35.20899",{"slug":1476,"name":1476,"fn":1477,"description":1478,"org":1479,"tags":1480,"stars":24,"repoUrl":25,"updatedAt":1489},"amazon-documentdb","manage Amazon DocumentDB clusters","Manages Amazon DocumentDB end-to-end — serverless-on-8.0 cluster setup, TLS\u002FVPC\u002Fdriver config, flexible-schema and vector-search data modeling, MongoDB compatibility assessment, DMS-based migration, slow-query diagnosis, major version upgrades (4.0→5.0→8.0), Well-Architected reviews (41-check wa_review.py), cost estimation, and security hardening. Retrieve for every DocumentDB question and when the user asks to set up or migrate MongoDB to AWS — DocumentDB is AWS's MongoDB-compatible managed database. Triggers: JSON document store, document database, MongoDB on AWS, Nested fields, Lambda cannot connect, TLS handshake, VPC port 27017, IAM auth, Secrets Manager, encryption at rest, $graphLookup, flexible schema, COLLSCAN, compound index, DMS migration, CDC cutover, $vectorSearch, RAG, Global Clusters, DR replication, cost sizing, audit, health check, production-readiness.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1481,1482,1483,1486],{"name":23,"slug":8,"type":15},{"name":1441,"slug":1442,"type":15},{"name":1484,"slug":1485,"type":15},"MongoDB","mongodb",{"name":1487,"slug":1488,"type":15},"NoSQL","nosql","2026-07-12T08:43:00.455878",{"slug":1491,"name":1491,"fn":1492,"description":1493,"org":1494,"tags":1495,"stars":24,"repoUrl":25,"updatedAt":1499},"amazon-dynamodb","design and debug DynamoDB data layers","Designs, reviews, and debugs DynamoDB data layers from design axioms — enumerates access patterns, chooses partition\u002Fsort keys and GSIs, decides single-table vs. multi-table, configures Streams, Global Tables, TTL, and zero-ETL integrations to OpenSearch\u002FRedshift\u002FSageMaker Lakehouse, and produces a defensible data-layer design with a monthly cost estimate and optional live validation. Applies whenever a user is designing, reviewing, or refactoring anything backed by DynamoDB — schemas, access patterns, GSIs, single- vs. multi-table choices, Streams consumers, transactional outboxes, Global Tables, zero-ETL pipelines — even when they don't say \"axioms\" or \"design review.\" Also applies when debugging hot partitions, throttling, unbounded Scans, LWW conflicts, or surprise bills on DynamoDB workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1496,1497,1498],{"name":23,"slug":8,"type":15},{"name":1441,"slug":1442,"type":15},{"name":1487,"slug":1488,"type":15},"2026-07-16T06:00:37.690386",115,{"items":1502,"total":1552},[1503,1510,1517,1524,1531,1537,1544],{"slug":1331,"name":1331,"fn":1332,"description":1333,"org":1504,"tags":1505,"stars":24,"repoUrl":25,"updatedAt":1346},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1506,1507,1508,1509],{"name":1337,"slug":1338,"type":15},{"name":1340,"slug":1341,"type":15},{"name":23,"slug":8,"type":15},{"name":1344,"slug":1345,"type":15},{"slug":1348,"name":1348,"fn":1349,"description":1350,"org":1511,"tags":1512,"stars":24,"repoUrl":25,"updatedAt":1361},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1513,1514,1515,1516],{"name":1337,"slug":1338,"type":15},{"name":1355,"slug":1356,"type":15},{"name":1358,"slug":1359,"type":15},{"name":23,"slug":8,"type":15},{"slug":1363,"name":1363,"fn":1364,"description":1365,"org":1518,"tags":1519,"stars":24,"repoUrl":25,"updatedAt":1376},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1520,1521,1522,1523],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1371,"slug":1372,"type":15},{"name":1374,"slug":1375,"type":15},{"slug":1378,"name":1378,"fn":1379,"description":1380,"org":1525,"tags":1526,"stars":24,"repoUrl":25,"updatedAt":1391},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1527,1528,1529,1530],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1386,"slug":1387,"type":15},{"name":1389,"slug":1390,"type":15},{"slug":1393,"name":1393,"fn":1394,"description":1395,"org":1532,"tags":1533,"stars":24,"repoUrl":25,"updatedAt":1401},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1534,1535,1536],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1389,"slug":1390,"type":15},{"slug":1403,"name":1403,"fn":1404,"description":1405,"org":1538,"tags":1539,"stars":24,"repoUrl":25,"updatedAt":1416},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1540,1541,1542,1543],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1411,"slug":1412,"type":15},{"name":1414,"slug":1415,"type":15},{"slug":1418,"name":1418,"fn":1419,"description":1420,"org":1545,"tags":1546,"stars":24,"repoUrl":25,"updatedAt":1432},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1547,1548,1549,1550,1551],{"name":1337,"slug":1338,"type":15},{"name":23,"slug":8,"type":15},{"name":1426,"slug":1427,"type":15},{"name":1374,"slug":1375,"type":15},{"name":1430,"slug":1431,"type":15},114]