Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Chiamate AWS Glue APIs in Python
Nota che le risorse Boto 3 non APIs sono ancora disponibili per. AWS Glue Attualmente è APIs possibile utilizzare solo il client Boto 3.
Nomi delle API AWS Glue in Python
AWS I nomi delle API Glue in Java e in altri linguaggi di programmazione sono generalmente CamelCased. Tuttavia, quando vengono chiamati da Python, questi nomi generici vengono modificati in minuscolo, con le parti del nome separate da caratteri di sottolineatura per renderli più adatti a Python. Nella documentazione AWS Glue API di riferimento, questi nomi Python sono elencati tra parentesi dopo i nomi generici. CamelCased
Tuttavia, anche se i nomi delle API AWS Glue vengono trasformati in lettere minuscole, i nomi dei relativi parametri rimangono in maiuscolo. È importante ricordarlo, perché i parametri devono essere passati per nome durante la chiamata AWS Glue APIs, come descritto nella sezione seguente.
Passaggio di parametri Python in AWS Glue e accesso ai parametri
Nelle chiamate Python a AWS Glue APIs, è meglio passare i parametri in modo esplicito per nome. Per esempio:
job = glue.create_job(Name='sample', Role='Glue_DefaultRole', Command={'Name': 'glueetl', 'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'})
È utile capire che Python crea un dizionario delle name/value tuple specificate come argomenti di uno script ETL in un or. Struttura del processo JobRun struttura Boto 3 esegue quindi il passaggio ad AWS Glue in formato JSON mediante una chiamata API REST. Questo significa che non puoi fare affidamento sull'ordine degli argomenti al momento dell'accesso nello script.
Ad esempio, supponiamo che stai avviando un JobRun
in una funzione del gestore Lambda di Python e che desideri specificare più parametri. Il tuo codice potrebbe essere simile a quanto segue:
from datetime import datetime, timedelta client = boto3.client('glue') def lambda_handler(event, context): last_hour_date_time = datetime.now() - timedelta(hours = 1) day_partition_value = last_hour_date_time.strftime("%Y-%m-%d") hour_partition_value = last_hour_date_time.strftime("%-H") response = client.start_job_run( JobName = 'my_test_Job', Arguments = { '--day_partition_key': 'partition_0', '--hour_partition_key': 'partition_1', '--day_partition_value': day_partition_value, '--hour_partition_value': hour_partition_value } )
Per accedere a questi parametri in modo affidabile nello script ETL, specificali per nome usando la funzione AWS Glue di getResolvedOptions
e quindi esegui l'accesso dal dizionario risultante:
import sys from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ['JOB_NAME', 'day_partition_key', 'hour_partition_key', 'day_partition_value', 'hour_partition_value']) print "The day partition key is: ", args['day_partition_key'] print "and the day partition value is: ", args['day_partition_value']
Se desideri passare un argomento che è una stringa JSON annidata, per preservare il valore del parametro man mano che viene passato al processo ETL AWS Glue, devi codificare la stringa del parametro prima di avviare l'esecuzione del processo, quindi decodificare la stringa del parametro prima di riferirla allo script di processo. Ad esempio, considera la seguente stringa di argomento:
glue_client.start_job_run(JobName = "gluejobname", Arguments={ "--my_curly_braces_string": '{"a": {"b": {"c": [{"d": {"e": 42}}]}}}' })
Per passare correttamente questo parametro, devi codificare l'argomento come una stringa codificata Base64.
import base64 ... sample_string='{"a": {"b": {"c": [{"d": {"e": 42}}]}}}' sample_string_bytes = sample_string.encode("ascii") base64_bytes = base64.b64encode(sample_string_bytes) base64_string = base64_bytes.decode("ascii") ... glue_client.start_job_run(JobName = "gluejobname", Arguments={ "--my_curly_braces_string": base64_bytes}) ... sample_string_bytes = base64.b64decode(base64_bytes) sample_string = sample_string_bytes.decode("ascii") print(f"Decoded string: {sample_string}") ...
Esempio: creazione ed esecuzione di un processo
L'esempio seguente mostra come chiamare l'AWS Glue APIsusing Python, per creare ed eseguire un processo ETL.
Per creare ed eseguire un processo
-
Crea un'istanza del client AWS Glue:
import boto3 glue = boto3.client(service_name='glue', region_name='us-east-1', endpoint_url='https://glue.us-east-1.amazonaws.com')
-
Crea un processo. Devi utilizzare
glueetl
come nome per il comando ETL, come mostrato nel codice seguente:myJob = glue.create_job(Name='sample', Role='Glue_DefaultRole', Command={'Name': 'glueetl', 'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'})
-
Avvia una nuova esecuzione del processo creato nella fase precedente:
myNewJobRun = glue.start_job_run(JobName=myJob['Name'])
-
Ottieni lo stato del processo:
status = glue.get_job_run(JobName=myJob['Name'], RunId=myNewJobRun['JobRunId'])
-
Stampa lo stato attuale del processo eseguito:
print(status['JobRun']['JobRunState'])