View a markdown version of this page

AWS Glue 使用 Rust 开发工具包的示例 - AWS SDK 代码示例

D AWS oc AWS SDK 示例 GitHub 存储库中有更多 SDK 示例。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS Glue 使用 Rust 开发工具包的示例

以下代码示例向您展示了如何使用 AWS 适用于 Rust 的软件开发工具包来执行操作和实现常见场景 AWS Glue。

基本功能是向您展示如何在服务中执行基本操作的代码示例。

操作是大型程序的代码摘录,必须在上下文中运行。您可以通过操作了解如何调用单个服务函数,还可以通过函数相关场景的上下文查看操作。

每个示例都包含一个指向完整源代码的链接,您可以从中找到有关如何在上下文中设置和运行代码的说明。

开始使用

以下代码示例展示了如何开始使用 AWS Glue。

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let mut list_jobs = glue.list_jobs().into_paginator().send(); while let Some(list_jobs_output) = list_jobs.next().await { match list_jobs_output { Ok(list_jobs) => { let names = list_jobs.job_names(); info!(?names, "Found these jobs") } Err(err) => return Err(GlueMvpError::from_glue_sdk(err)), } }
  • 有关 API 的详细信息,请参阅AWS 适用ListJobs于 Rust 的 SDK API 参考文档

基本功能

以下代码示例展示了如何:

  • 创建一个爬虫来抓取公共 Amazon S3 存储桶并生成元数据数据库。 CSV-formatted

  • 在您的中列出有关数据库和表的信息 AWS Glue Data Catalog。

  • 创建任务以从 S3 存储桶提取 CSV 数据,转换数据,并将 JSON-formatted 输出加载到另一个 S3 存储桶中。

  • 列出有关作业运行的信息,查看转换后的数据,并清除资源。

有关更多信息,请参阅教程: AWS Glue Studio 入门

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

创建并运行一个搜寻器,它可以抓取公共 Amazon 简单存储服务 (Amazon S3) 存储桶并生成描述其找到 CSV-formatted 的数据的元数据数据库。

let create_crawler = glue .create_crawler() .name(self.crawler()) .database_name(self.database()) .role(self.iam_role.expose_secret()) .targets( CrawlerTargets::builder() .s3_targets(S3Target::builder().path(CRAWLER_TARGET).build()) .build(), ) .send() .await; match create_crawler { Err(err) => { let glue_err: aws_sdk_glue::Error = err.into(); match glue_err { aws_sdk_glue::Error::AlreadyExistsException(_) => { info!("Using existing crawler"); Ok(()) } _ => Err(GlueMvpError::GlueSdk(glue_err)), } } Ok(_) => Ok(()), }?; let start_crawler = glue.start_crawler().name(self.crawler()).send().await; match start_crawler { Ok(_) => Ok(()), Err(err) => { let glue_err: aws_sdk_glue::Error = err.into(); match glue_err { aws_sdk_glue::Error::CrawlerRunningException(_) => Ok(()), _ => Err(GlueMvpError::GlueSdk(glue_err)), } } }?;

在您的中列出有关数据库和表的信息 AWS Glue Data Catalog。

let database = glue .get_database() .name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)? .to_owned(); let database = database .database() .ok_or_else(|| GlueMvpError::Unknown("Could not find database".into()))?; let tables = glue .get_tables() .database_name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; let tables = tables.table_list();

创建并运行一项任务,该任务从源 Amazon S3 存储桶提取 CSV 数据,通过删除和重命名字段对其进行转换,并将 JSON-formatted 输出加载到另一个 Amazon S3 存储桶中。

let create_job = glue .create_job() .name(self.job()) .role(self.iam_role.expose_secret()) .command( JobCommand::builder() .name("glueetl") .python_version("3") .script_location(format!("s3://{}/job.py", self.bucket())) .build(), ) .glue_version("3.0") .send() .await .map_err(GlueMvpError::from_glue_sdk)?; let job_name = create_job.name().ok_or_else(|| { GlueMvpError::Unknown("Did not get job name after creating job".into()) })?; let job_run_output = glue .start_job_run() .job_name(self.job()) .arguments("--input_database", self.database()) .arguments( "--input_table", self.tables .first() .ok_or_else(|| GlueMvpError::Unknown("Missing crawler table".into()))? .name(), ) .arguments("--output_bucket_url", self.bucket()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; let job = job_run_output .job_run_id() .ok_or_else(|| GlueMvpError::Unknown("Missing run id from just started job".into()))? .to_string();

删除演示创建的所有资源。

glue.delete_job() .job_name(self.job()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; for t in &self.tables { glue.delete_table() .name(t.name()) .database_name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; } glue.delete_database() .name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; glue.delete_crawler() .name(self.crawler()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?;

操作

以下代码示例演示了如何使用 CreateCrawler

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let create_crawler = glue .create_crawler() .name(self.crawler()) .database_name(self.database()) .role(self.iam_role.expose_secret()) .targets( CrawlerTargets::builder() .s3_targets(S3Target::builder().path(CRAWLER_TARGET).build()) .build(), ) .send() .await; match create_crawler { Err(err) => { let glue_err: aws_sdk_glue::Error = err.into(); match glue_err { aws_sdk_glue::Error::AlreadyExistsException(_) => { info!("Using existing crawler"); Ok(()) } _ => Err(GlueMvpError::GlueSdk(glue_err)), } } Ok(_) => Ok(()), }?;
  • 有关 API 的详细信息,请参阅AWS 适用CreateCrawler于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 CreateJob

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let create_job = glue .create_job() .name(self.job()) .role(self.iam_role.expose_secret()) .command( JobCommand::builder() .name("glueetl") .python_version("3") .script_location(format!("s3://{}/job.py", self.bucket())) .build(), ) .glue_version("3.0") .send() .await .map_err(GlueMvpError::from_glue_sdk)?; let job_name = create_job.name().ok_or_else(|| { GlueMvpError::Unknown("Did not get job name after creating job".into()) })?;
  • 有关 API 的详细信息,请参阅AWS 适用CreateJob于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 DeleteCrawler

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

glue.delete_crawler() .name(self.crawler()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?;
  • 有关 API 的详细信息,请参阅AWS 适用DeleteCrawler于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 DeleteDatabase

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

glue.delete_database() .name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?;
  • 有关 API 的详细信息,请参阅AWS 适用DeleteDatabase于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 DeleteJob

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

glue.delete_job() .job_name(self.job()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?;
  • 有关 API 的详细信息,请参阅AWS 适用DeleteJob于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 DeleteTable

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

for t in &self.tables { glue.delete_table() .name(t.name()) .database_name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; }
  • 有关 API 的详细信息,请参阅AWS 适用DeleteTable于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 GetCrawler

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let tmp_crawler = glue .get_crawler() .name(self.crawler()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?;
  • 有关 API 的详细信息,请参阅AWS 适用GetCrawler于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 GetDatabase

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let database = glue .get_database() .name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)? .to_owned(); let database = database .database() .ok_or_else(|| GlueMvpError::Unknown("Could not find database".into()))?;
  • 有关 API 的详细信息,请参阅AWS 适用GetDatabase于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 GetJobRun

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let get_job_run = || async { Ok::<JobRun, GlueMvpError>( glue.get_job_run() .job_name(self.job()) .run_id(job_run_id.to_string()) .send() .await .map_err(GlueMvpError::from_glue_sdk)? .job_run() .ok_or_else(|| GlueMvpError::Unknown("Failed to get job_run".into()))? .to_owned(), ) }; let mut job_run = get_job_run().await?; let mut state = job_run.job_run_state().unwrap_or(&unknown_state).to_owned(); while matches!( state, JobRunState::Starting | JobRunState::Stopping | JobRunState::Running ) { info!(?state, "Waiting for job to finish"); tokio::time::sleep(self.wait_delay).await; job_run = get_job_run().await?; state = job_run.job_run_state().unwrap_or(&unknown_state).to_owned(); }
  • 有关 API 的详细信息,请参阅AWS 适用GetJobRun于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 GetTables

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let tables = glue .get_tables() .database_name(self.database()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; let tables = tables.table_list();
  • 有关 API 的详细信息,请参阅AWS 适用GetTables于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 ListJobs

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let mut list_jobs = glue.list_jobs().into_paginator().send(); while let Some(list_jobs_output) = list_jobs.next().await { match list_jobs_output { Ok(list_jobs) => { let names = list_jobs.job_names(); info!(?names, "Found these jobs") } Err(err) => return Err(GlueMvpError::from_glue_sdk(err)), } }
  • 有关 API 的详细信息,请参阅AWS 适用ListJobs于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 StartCrawler

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let start_crawler = glue.start_crawler().name(self.crawler()).send().await; match start_crawler { Ok(_) => Ok(()), Err(err) => { let glue_err: aws_sdk_glue::Error = err.into(); match glue_err { aws_sdk_glue::Error::CrawlerRunningException(_) => Ok(()), _ => Err(GlueMvpError::GlueSdk(glue_err)), } } }?;
  • 有关 API 的详细信息,请参阅AWS 适用StartCrawler于 Rust 的 SDK API 参考文档

以下代码示例演示了如何使用 StartJobRun

适用于 Rust 的 SDK
注意

还有更多 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

let job_run_output = glue .start_job_run() .job_name(self.job()) .arguments("--input_database", self.database()) .arguments( "--input_table", self.tables .first() .ok_or_else(|| GlueMvpError::Unknown("Missing crawler table".into()))? .name(), ) .arguments("--output_bucket_url", self.bucket()) .send() .await .map_err(GlueMvpError::from_glue_sdk)?; let job = job_run_output .job_run_id() .ok_or_else(|| GlueMvpError::Unknown("Missing run id from just started job".into()))? .to_string();
  • 有关 API 的详细信息,请参阅AWS 适用StartJobRun于 Rust 的 SDK API 参考文档