ingesting-into-data-lake

ingesting-into-data-lake

热门

将数据从S3文件、本地上传、JDBC数据库(Oracle、SQL Server、PostgreSQL、MySQL、RDS、Aurora)、Amazon Redshift、Snowflake、BigQuery、DynamoDB或现有Glue目录表(迁移)导入到AWS数据湖。默认目标为S3 Tables;在未采用S3 Tables的环境下,支持在通用桶上使用标准Iceberg。处理一次性加载、周期性管道、迁移。触发词:导入数据、加载数据、摄取、同步数据库、迁移表、将数据移至AWS、设置管道、ETL、从Snowflake拉取、将BigQuery查询结果存入S3、导出DynamoDB、CTAS、转换为Iceberg。请勿用于设置或排查Glue连接(请使用connecting-to-data-source)、创建空表(请使用creating-data-lake-table)、运行查询(请使用querying-data-lake)、通过模糊名称查找表(请使用finding-data-lake-assets)、目录审计(请使用exploring-data-catalog)或SaaS平台(如Salesforce、ServiceNow、SAP、MongoDB、Kafka)。

2147Star
202Fork
更新于 2026/7/27
SKILL.md
只读
名称
ingesting-into-data-lake
描述

将数据从S3文件、本地上传、JDBC数据库(Oracle、SQL Server、PostgreSQL、MySQL、RDS、Aurora)、Amazon Redshift、Snowflake、BigQuery、DynamoDB或现有Glue目录表(迁移)导入到AWS数据湖。默认目标为S3 Tables;在未采用S3 Tables的环境下,支持在通用桶上使用标准Iceberg。处理一次性加载、周期性管道、迁移。触发词:导入数据、加载数据、摄取、同步数据库、迁移表、将数据移至AWS、设置管道、ETL、从Snowflake拉取、将BigQuery查询结果存入S3、导出DynamoDB、CTAS、转换为Iceberg。请勿用于设置或排查Glue连接(请使用connecting-to-data-source)、创建空表(请使用creating-data-lake-table)、运行查询(请使用querying-data-lake)、通过模糊名称查找表(请使用finding-data-lake-assets)、目录审计(请使用exploring-data-catalog)或SaaS平台(如Salesforce、ServiceNow、SAP、MongoDB、Kafka)。

版本
1

摄取到数据湖

将数据从源移动到数据湖中的可查询表。此技能假定源连接(如果需要)已存在。如需设置或排查Glue连接,请委托给connecting-to-data-source

理念

除非环境另有说明,否则默认使用S3 Tables。 S3 Tables是新的数据湖工作的推荐目标。如果用户的目录清单显示他们尚未采用S3 Tables,则建议在其现有通用桶上使用标准Iceberg,而不是强制他们改变策略。

常见任务

当连接到AWS MCP服务器工具时,您必须使用它们执行命令——它们提供验证、沙盒执行和审计日志记录。仅在MCP不可用时回退到AWS CLI。您必须在执行前解释每个步骤。

工作流程

1. 验证依赖项和上下文

  • 您必须检查AWS MCP工具或AWS CLI是否可用,如果缺失则告知用户
  • 您必须确认目标AWS区域,并使用aws sts get-caller-identity验证凭证
  • 对于SageMaker Unified Studio项目角色,请注意目标表和连接可能限定在项目范围内。请参阅querying-data-lake中的调用者ARN检测模式。

2. 分类源

用户说... 源类型 参考
"上传我的文件", "本地CSV", "移动到S3" 本地文件 local-upload.md
"从S3加载", "从s3://导入CSV/JSON/Parquet" S3文件 s3-files.md
"从Oracle/Postgres/MySQL/SQL Server/Redshift/RDS/Aurora导入" JDBC jdbc-ingest.md
"从Snowflake拉取", "Snowflake表到S3" Snowflake snowflake-ingest.md
"从BigQuery导入", "GCP分析到S3" BigQuery bigquery-ingest.md
"导出DynamoDB", "DynamoDB到数据湖" DynamoDB dynamodb-ingest.md
"迁移Glue表", "将Hive转换为Iceberg" 目录迁移 catalog-migration.md

如果用户提到Salesforce、ServiceNow、SAP、MongoDB、Kafka或其他SaaS/流式源,请拒绝——这些在此版本中不受支持。

如果源表通过模糊名称或业务名称引用("迁移我们的订单表", "从销售仓库拉取"),请先委托给finding-data-lake-assets进行解析,然后再继续。

3. 确认连接存在(如适用)

对于JDBC、Snowflake和BigQuery源,需要Glue连接。检查:

aws glue get-connection --name <CONNECTION_NAME> --region <REGION>

如果连接不存在,请停止并委托给connecting-to-data-source创建和测试。在连接验证通过之前,不要继续摄取。

本地文件、S3文件、DynamoDB和目录迁移不需要Glue连接。

4. 明确目标

在创建或写入任何表之前,您必须询问用户(或根据目录清单建议):

  • 数据库/命名空间:是否存在特定的目标数据库?还是应该创建一个?
  • :现有表(追加/合并)还是新表(委托给creating-data-lake-table)?
  • 格式:S3 Tables(默认)、标准Iceberg还是原始Parquet?

清单感知的默认值:

如果您已经运行过exploring-data-catalog或可以快速检查,请使用已有的:

  • 账户有s3tablescatalog联合目录和活跃的表桶:推荐S3 Tables
  • 账户有通用桶且包含Iceberg表,但未使用S3 Tables:推荐在其现有桶上使用标准Iceberg
  • 账户在S3上使用Parquet/ORC且没有Iceberg元数据:询问是否现在采用Iceberg(推荐是)或继续使用原始文件

不要强制未采用S3 Tables的客户使用S3 Tables。请参阅iceberg-catalog-config-and-usage.md

此步骤的委托:

  • 目标表不存在 -> creating-data-lake-table
  • 目标数据库通过模糊术语命名 -> finding-data-lake-assets
  • 用户不知道存在什么 -> exploring-data-catalog

5. 执行源工作流

阅读源特定的参考并遵循其阶段。每个参考都包含作业模板、注意事项和故障排除:

  • 本地 / S3 / JDBC / Snowflake / BigQuery / DynamoDB / 目录迁移——每个源一个参考

常见的Glue 5.1或更高版本作业配置和PySpark模板共享在glue-job-config.mdglue-job-scripts.md中。

6. 验证

运行以下所有三项,不要跳过:

  1. 行数与预期匹配(源 vs 目标)
  2. 关键列的空值检查
  3. 抽查3-5行样本数据

请参阅data-quality-validation.md

7. 调度(如果周期性)

对于周期性管道,使用cron调度创建Glue触发器。请参阅testing-and-scheduling.md。简单的单步管道使用Glue触发器;多步带分支的管道使用MWAA。

参数路由

  • 仅S3路径:推断为一次性加载,从步骤2开始处理S3文件
  • 连接名称:从步骤3开始,使用指定的连接
  • 表名称:从步骤4开始,询问这是源还是目标
  • --target标志:在步骤4中预填目标格式
  • 无参数:交互式引导

注意事项

  • S3 Tables需要Glue 5.1或更高版本以及--datalake-formats iceberg作业参数
  • 所有spark.sql.catalog.*配置必须放在--conf作业参数中,绝不能放在spark.conf.set()中。否则Glue 5.x会抛出AnalysisException: Cannot modify the value of a static config。请参阅iceberg-catalog-config-and-usage.md了解正确的目录配置。
  • S3 Tables目录配置中需要warehouse参数。没有它,Spark会失败并显示"Cannot derive default warehouse location"。
  • S3 Tables中的表和列名称必须全部小写
  • overwritePartitions()仅替换DataFrame中存在的分区——对于需要删除的完全刷新,请使用createOrReplace()
  • 标准Iceberg目标必须包含LOCATION子句;S3 Tables则不能包含
  • DynamoDB不需要Glue连接——不要尝试创建
  • 摄取期间的连接失败委托给connecting-to-data-source;不要在此技能中调试网络/凭证
  • 对于SageMaker Unified Studio项目中的目标表,确保在Glue作业运行之前项目角色对目标命名空间具有写权限

故障排除

错误 可能原因 操作
S3访问被拒绝 缺少IAM权限 检查Glue角色是否具有s3:GetObject、s3:PutObject
S3 Tables访问被拒绝 缺少s3tables:*权限 向Glue角色添加S3 Tables内联策略
CTAS超时 数据集对于Athena过大 切换到Glue ETL或使用WHERE过滤器分批处理
JDBC连接超时/认证失败 连接级别问题 委托给connecting-to-data-source
DynamoDB吞吐量超出 读取百分比过高 降低read.percent或使用原生导出

请参阅error-handling.md获取完整目录。

参考

源特定

交叉领域

迁移特定

JDBC特定