欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > AWS Glue用Python Shell从Workday系统将人力资源原始数据以Parquet格式存入S3

AWS Glue用Python Shell从Workday系统将人力资源原始数据以Parquet格式存入S3

2025/5/21 23:39:18 来源:https://blog.csdn.net/weixin_30777913/article/details/145948108  浏览:    关键词:AWS Glue用Python Shell从Workday系统将人力资源原始数据以Parquet格式存入S3

使用AWS Glue Python Shell从Workday获取人力资源数据并存储到S3的详细方案:

通过以下步骤,即可实现从Workday到S3的自动化数据管道。实际部署时需根据Workday API的具体响应结构调整数据处理逻辑。

架构流程

Workday API -> AWS Glue Python Shell -> (Parquet) -> Amazon S3

详细步骤

一、前期准备
  1. 获取Workday API访问权限

    • 确认Workday REST/SOAP API端点
    • 获取API认证凭证(OAuth2令牌/Basic Auth/证书)
    • 确认所需人力资源数据的具体API路径(如/human_resources/employees
  2. 创建S3存储桶

    • 创建目标桶(如s3://my-hr-data-bucket/raw/
  3. 创建IAM角色

    • 创建Glue服务角色(如GlueHRDataRole
    • 附加策略:
      {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["s3:PutObject","s3:GetObject"],"Resource": "arn:aws:s3:::my-hr-data-bucket/*"},{"Effect": "Allow","Action": ["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],"Resource": "*"}]
      }
      

二、Python脚本开发
# glue_workday_to_s3.py
import requests
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
import os
from datetime import datetime
import logging# 初始化日志
logger = logging.getLogger()
logger.setLevel(logging.INFO)# Workday配置
WORKDAY_API_URL = "https://api.workday.com/v1/human_resources"
API_KEY = "your_workday_api_key"
HEADERS = {"Authorization": f"Bearer {API_KEY}","Accept": "application/json"
}# S3配置
S3_BUCKET = "my-hr-data-bucket"
S3_PREFIX = "raw/hr_data/"
FILE_NAME = f"hr_data_{datetime.today().strftime('%Y%m%d')}.parquet"def fetch_paginated_data(url):"""处理API分页"""all_data = []page = 1while True:response = requests.get(f"{url}?page={page}",headers=HEADERS)if response.status_code != 200:logger.error(f"API请求失败: {response.text}")breakdata = response.json()all_data.extend(data['items'])if data['has_more']:page +=1else:breakreturn all_datadef main():try:# 获取数据hr_data = fetch_paginated_data(f"{WORKDAY_API_URL}/employees")logger.info(f"获取到 {len(hr_data)} 条记录")# 转换为DataFramedf = pd.DataFrame(hr_data)# 转换为Parquettable = pa.Table.from_pandas(df)output_path = f"/tmp/{FILE_NAME}"pq.write_table(table, output_path)# 上传到S3s3_client = boto3.client('s3')s3_client.upload_file(output_path,S3_BUCKET,f"{S3_PREFIX}{FILE_NAME}")logger.info("数据成功写入S3")except Exception as e:logger.error(f"处理失败: {str(e)}")raiseif __name__ == "__main__":main()

三、Glue作业配置
  1. 创建Python Shell作业

    • 作业名称:workday-hr-data-ingestion
    • IAM角色:选择GlueHRDataRole
    • 类型:Python Shell
    • Python版本:Python 3.9
    • 数据处理单元:1/16 DPU
  2. 作业参数

    • 脚本路径:上传glue_workday_to_s3.py到S3并指定路径
    • 添加Python库依赖:
      --additional-python-modules pandas==1.5.3,pyarrow==12.0.1,requests==2.28.2
      
    • 环境变量(可选):
      --WORKDAY_API_KEY=your_actual_key
      
  3. 设置触发器

    • 按需运行 或 使用EventBridge定时触发(如每天凌晨1点)

四、验证数据
  1. 在S3目标路径检查Parquet文件:
    aws s3 ls s3://my-hr-data-bucket/raw/hr_data/
    
  2. 使用Athena验证数据:
    CREATE EXTERNAL TABLE hr_data (employee_id string,name string,department string,...
    )
    STORED AS PARQUET
    LOCATION 's3://my-hr-data-bucket/raw/hr_data/';
    

注意事项

  1. 敏感信息管理
    • 建议将API密钥存储在AWS Secrets Manager,通过boto3动态获取
  2. 错误处理
    • 添加重试逻辑应对API限流
    • 使用Glue Job Bookmarks跟踪处理进度(可选)
  3. 性能优化
    • 若数据量极大(>1GB),建议改用Glue Spark作业
  4. 成本控制
    • Python Shell作业成本低于Spark作业,适合中等数据量

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词