Utilizzare CreateJob con un SDK AWS o una CLI - Esempi di codice per SDK AWS

Sono disponibili altri esempi per SDK AWS nel repository GitHub della documentazione degli esempi per SDK AWS.

Utilizzare CreateJob con un SDK AWS o una CLI

Gli esempi di codice seguenti mostrano come utilizzare CreateJob.

Gli esempi di operazioni sono estratti di codice da programmi più grandi e devono essere eseguiti nel contesto. Puoi vedere questa azione nel contesto nel seguente esempio di codice:

.NET
SDK per .NET
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

/// <summary> /// Create an AWS Glue job. /// </summary> /// <param name="jobName">The name of the job.</param> /// <param name="roleName">The name of the IAM role to be assumed by /// the job.</param> /// <param name="description">A description of the job.</param> /// <param name="scriptUrl">The URL to the script.</param> /// <returns>A Boolean value indicating the success of the action.</returns> public async Task<bool> CreateJobAsync(string dbName, string tableName, string bucketUrl, string jobName, string roleName, string description, string scriptUrl) { var command = new JobCommand { PythonVersion = "3", Name = "glueetl", ScriptLocation = scriptUrl, }; var arguments = new Dictionary<string, string> { { "--input_database", dbName }, { "--input_table", tableName }, { "--output_bucket_url", bucketUrl } }; var request = new CreateJobRequest { Command = command, DefaultArguments = arguments, Description = description, GlueVersion = "3.0", Name = jobName, NumberOfWorkers = 10, Role = roleName, WorkerType = "G.1X" }; var response = await _amazonGlue.CreateJobAsync(request); return response.HttpStatusCode == HttpStatusCode.OK; }
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK per .NET.

C++
SDK per C++
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

Aws::Client::ClientConfiguration clientConfig; // Optional: Set to the AWS Region in which the bucket was created (overrides config file). // clientConfig.region = "us-east-1"; Aws::Glue::GlueClient client(clientConfig); Aws::Glue::Model::CreateJobRequest request; request.SetName(JOB_NAME); request.SetRole(roleArn); request.SetGlueVersion(GLUE_VERSION); Aws::Glue::Model::JobCommand command; command.SetName(JOB_COMMAND_NAME); command.SetPythonVersion(JOB_PYTHON_VERSION); command.SetScriptLocation( Aws::String("s3://") + bucketName + "/" + PYTHON_SCRIPT); request.SetCommand(command); Aws::Glue::Model::CreateJobOutcome outcome = client.CreateJob(request); if (outcome.IsSuccess()) { std::cout << "Successfully created the job." << std::endl; } else { std::cerr << "Error creating the job. " << outcome.GetError().GetMessage() << std::endl; deleteAssets(CRAWLER_NAME, CRAWLER_DATABASE_NAME, "", bucketName, clientConfig); return false; }
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK per C++.

CLI
AWS CLI

Come creare un processo di trasformazione dei dati

L’esempio create-job seguente crea un processo di streaming che esegue uno script archiviato in S3.

aws glue create-job \ --name my-testing-job \ --role AWSGlueServiceRoleDefault \ --command '{ \ "Name": "gluestreaming", \ "ScriptLocation": "s3://amzn-s3-demo-bucket/folder/" \ }' \ --region us-east-1 \ --output json \ --default-arguments '{ \ "--job-language":"scala", \ "--class":"GlueApp" \ }' \ --profile my-profile \ --endpoint https://glue.us-east-1.amazonaws.com

Contenuto di test_script.scala.

import com.amazonaws.services.glue.ChoiceOption import com.amazonaws.services.glue.GlueContext import com.amazonaws.services.glue.MappingSpec import com.amazonaws.services.glue.ResolveSpec import com.amazonaws.services.glue.errors.CallSite import com.amazonaws.services.glue.util.GlueArgParser import com.amazonaws.services.glue.util.Job import com.amazonaws.services.glue.util.JsonOptions import org.apache.spark.SparkContext import scala.collection.JavaConverters._ object GlueApp { def main(sysArgs: Array[String]) { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) // @params: [JOB_NAME] val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) Job.init(args("JOB_NAME"), glueContext, args.asJava) // @type: DataSource // @args: [database = "tempdb", table_name = "s3-source", transformation_ctx = "datasource0"] // @return: datasource0 // @inputs: [] val datasource0 = glueContext.getCatalogSource(database = "tempdb", tableName = "s3-source", redshiftTmpDir = "", transformationContext = "datasource0").getDynamicFrame() // @type: ApplyMapping // @args: [mapping = [("sensorid", "int", "sensorid", "int"), ("currenttemperature", "int", "currenttemperature", "int"), ("status", "string", "status", "string")], transformation_ctx = "applymapping1"] // @return: applymapping1 // @inputs: [frame = datasource0] val applymapping1 = datasource0.applyMapping(mappings = Seq(("sensorid", "int", "sensorid", "int"), ("currenttemperature", "int", "currenttemperature", "int"), ("status", "string", "status", "string")), caseSensitive = false, transformationContext = "applymapping1") // @type: SelectFields // @args: [paths = ["sensorid", "currenttemperature", "status"], transformation_ctx = "selectfields2"] // @return: selectfields2 // @inputs: [frame = applymapping1] val selectfields2 = applymapping1.selectFields(paths = Seq("sensorid", "currenttemperature", "status"), transformationContext = "selectfields2") // @type: ResolveChoice // @args: [choice = "MATCH_CATALOG", database = "tempdb", table_name = "my-s3-sink", transformation_ctx = "resolvechoice3"] // @return: resolvechoice3 // @inputs: [frame = selectfields2] val resolvechoice3 = selectfields2.resolveChoice(choiceOption = Some(ChoiceOption("MATCH_CATALOG")), database = Some("tempdb"), tableName = Some("my-s3-sink"), transformationContext = "resolvechoice3") // @type: DataSink // @args: [database = "tempdb", table_name = "my-s3-sink", transformation_ctx = "datasink4"] // @return: datasink4 // @inputs: [frame = resolvechoice3] val datasink4 = glueContext.getCatalogSink(database = "tempdb", tableName = "my-s3-sink", redshiftTmpDir = "", transformationContext = "datasink4").writeDynamicFrame(resolvechoice3) Job.commit() } }

Output:

{ "Name": "my-testing-job" }

Per ulteriori informazioni, consulta Creazione di processi in AWS Glue nella Guida per gli sviluppatori di AWS Glue.

  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dei comandi della AWS CLI.

Java
SDK per Java 2.x
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

/** * Creates a new AWS Glue job. * * @param glueClient the AWS Glue client to use for the operation * @param jobName the name of the job to create * @param iam the IAM role to associate with the job * @param scriptLocation the location of the script to be used by the job * @throws GlueException if there is an error creating the job */ public static void createJob(GlueClient glueClient, String jobName, String iam, String scriptLocation) { try { JobCommand command = JobCommand.builder() .pythonVersion("3") .name("glueetl") .scriptLocation(scriptLocation) .build(); CreateJobRequest jobRequest = CreateJobRequest.builder() .description("A Job created by using the AWS SDK for Java V2") .glueVersion("2.0") .workerType(WorkerType.G_1_X) .numberOfWorkers(10) .name(jobName) .role(iam) .command(command) .build(); glueClient.createJob(jobRequest); System.out.println(jobName + " was successfully created."); } catch (GlueException e) { throw e; } }
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK for Java 2.x.

JavaScript
SDK per JavaScript (v3)
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

const createJob = (name, role, scriptBucketName, scriptKey) => { const client = new GlueClient({}); const command = new CreateJobCommand({ Name: name, Role: role, Command: { Name: "glueetl", PythonVersion: "3", ScriptLocation: `s3://${scriptBucketName}/${scriptKey}`, }, GlueVersion: "3.0", }); return client.send(command); };
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK per JavaScript.

PHP
SDK per PHP
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

$role = $iamService->getRole("AWSGlueServiceRole-DocExample"); $jobName = 'test-job-' . $uniqid; $scriptLocation = "s3://$bucketName/run_job.py"; $job = $glueService->createJob($jobName, $role['Role']['Arn'], $scriptLocation); public function createJob($jobName, $role, $scriptLocation, $pythonVersion = '3', $glueVersion = '3.0'): Result { return $this->glueClient->createJob([ 'Name' => $jobName, 'Role' => $role, 'Command' => [ 'Name' => 'glueetl', 'ScriptLocation' => $scriptLocation, 'PythonVersion' => $pythonVersion, ], 'GlueVersion' => $glueVersion, ]); }
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK per PHP.

PowerShell
Strumenti per PowerShell V4

Esempio 1: questo esempio crea un nuovo processo in AWS Glue. Il valore del nome del comando è sempre glueetl. AWS Glue supporta l’esecuzione di script di processo scritti in Python o Scala. In questo esempio, lo script di processo (MyTestGlueJob.py) è scritto in Python. I parametri Python vengono specificati nella variabile $DefArgs e quindi passati al comando PowerShell nel parametro DefaultArguments, che accetta una tabella hash. I parametri della variabile $JobParams provengono dall’API CreateJob, documentata nell’argomento relativo all’API Jobs (https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html) nella documentazione di riferimento dell’API AWS Glue.

$Command = New-Object Amazon.Glue.Model.JobCommand $Command.Name = 'glueetl' $Command.ScriptLocation = 's3://amzn-s3-demo-source-bucket/admin/MyTestGlueJob.py' $Command $Source = "source_test_table" $Target = "target_test_table" $Connections = $Source, $Target $DefArgs = @{ '--TempDir' = 's3://amzn-s3-demo-bucket/admin' '--job-bookmark-option' = 'job-bookmark-disable' '--job-language' = 'python' } $DefArgs $ExecutionProp = New-Object Amazon.Glue.Model.ExecutionProperty $ExecutionProp.MaxConcurrentRuns = 1 $ExecutionProp $JobParams = @{ "AllocatedCapacity" = "5" "Command" = $Command "Connections_Connection" = $Connections "DefaultArguments" = $DefArgs "Description" = "This is a test" "ExecutionProperty" = $ExecutionProp "MaxRetries" = "1" "Name" = "MyOregonTestGlueJob" "Role" = "Amazon-GlueServiceRoleForSSM" "Timeout" = "20" } New-GlueJob @JobParams
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dei cmdlet di AWS Strumenti per PowerShell (V4).

Strumenti per PowerShell V5

Esempio 1: questo esempio crea un nuovo processo in AWS Glue. Il valore del nome del comando è sempre glueetl. AWS Glue supporta l’esecuzione di script di processo scritti in Python o Scala. In questo esempio, lo script di processo (MyTestGlueJob.py) è scritto in Python. I parametri Python vengono specificati nella variabile $DefArgs e quindi passati al comando PowerShell nel parametro DefaultArguments, che accetta una tabella hash. I parametri della variabile $JobParams provengono dall’API CreateJob, documentata nell’argomento relativo all’API Jobs (https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html) nella documentazione di riferimento dell’API AWS Glue.

$Command = New-Object Amazon.Glue.Model.JobCommand $Command.Name = 'glueetl' $Command.ScriptLocation = 's3://amzn-s3-demo-source-bucket/admin/MyTestGlueJob.py' $Command $Source = "source_test_table" $Target = "target_test_table" $Connections = $Source, $Target $DefArgs = @{ '--TempDir' = 's3://amzn-s3-demo-bucket/admin' '--job-bookmark-option' = 'job-bookmark-disable' '--job-language' = 'python' } $DefArgs $ExecutionProp = New-Object Amazon.Glue.Model.ExecutionProperty $ExecutionProp.MaxConcurrentRuns = 1 $ExecutionProp $JobParams = @{ "AllocatedCapacity" = "5" "Command" = $Command "Connections_Connection" = $Connections "DefaultArguments" = $DefArgs "Description" = "This is a test" "ExecutionProperty" = $ExecutionProp "MaxRetries" = "1" "Name" = "MyOregonTestGlueJob" "Role" = "Amazon-GlueServiceRoleForSSM" "Timeout" = "20" } New-GlueJob @JobParams
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dei cmdlet di AWS Strumenti per PowerShell (V5).

Python
SDK per Python (Boto3)
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

class GlueWrapper: """Encapsulates AWS Glue actions.""" def __init__(self, glue_client): """ :param glue_client: A Boto3 Glue client. """ self.glue_client = glue_client def create_job(self, name, description, role_arn, script_location): """ Creates a job definition for an extract, transform, and load (ETL) job that can be run by AWS Glue. :param name: The name of the job definition. :param description: The description of the job definition. :param role_arn: The ARN of an IAM role that grants AWS Glue the permissions it requires to run the job. :param script_location: The Amazon S3 URL of a Python ETL script that is run as part of the job. The script defines how the data is transformed. """ try: self.glue_client.create_job( Name=name, Description=description, Role=role_arn, Command={ "Name": "glueetl", "ScriptLocation": script_location, "PythonVersion": "3", }, GlueVersion="3.0", ) except ClientError as err: logger.error( "Couldn't create job %s. Here's why: %s: %s", name, err.response["Error"]["Code"], err.response["Error"]["Message"], ) raise
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API SDK AWS per Python (Boto3).

Ruby
SDK per Ruby
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

# The `GlueWrapper` class serves as a wrapper around the AWS Glue API, providing a simplified interface for common operations. # It encapsulates the functionality of the AWS SDK for Glue and provides methods for interacting with Glue crawlers, databases, tables, jobs, and S3 resources. # The class initializes with a Glue client and a logger, allowing it to make API calls and log any errors or informational messages. class GlueWrapper def initialize(glue_client, logger) @glue_client = glue_client @logger = logger end # Creates a new job with the specified configuration. # # @param name [String] The name of the job. # @param description [String] The description of the job. # @param role_arn [String] The ARN of the IAM role to be used by the job. # @param script_location [String] The location of the ETL script for the job. # @return [void] def create_job(name, description, role_arn, script_location) @glue_client.create_job( name: name, description: description, role: role_arn, command: { name: 'glueetl', script_location: script_location, python_version: '3' }, glue_version: '3.0' ) rescue Aws::Glue::Errors::GlueException => e @logger.error("Glue could not create job #{name}: \n#{e.message}") raise end
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK per Ruby.

Rust
SDK per Rust
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice 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()) })?;
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API SDK AWS per Rust.

Swift
SDK per Swift
Nota

Ulteriori informazioni su GitHub. Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel Repository di esempi di codice AWS.

import AWSClientRuntime import AWSGlue /// Create a new AWS Glue job. /// /// - Parameters: /// - glueClient: The AWS Glue client to use. /// - jobName: The name to give the new job. /// - role: The IAM role for the job to use when accessing AWS services. /// - scriptLocation: The AWS S3 URI of the script to be run by the job. /// /// - Returns: `true` if the job is created successfully, otherwise `false`. func createJob(glueClient: GlueClient, name jobName: String, role: String, scriptLocation: String) async -> Bool { let command = GlueClientTypes.JobCommand( name: "glueetl", pythonVersion: "3", scriptLocation: scriptLocation ) do { _ = try await glueClient.createJob( input: CreateJobInput( command: command, description: "Created by the AWS SDK for Swift Glue basic scenario example.", glueVersion: "3.0", name: jobName, numberOfWorkers: 10, role: role, workerType: .g1x ) ) } catch { return false } return true }
  • Per informazioni dettagliate sull’API, consulta CreateJob nella documentazione di riferimento dell’API AWS SDK per Swift.