

# Uso del script de administración de estado de SAP OData
<a name="sap-odata-state-management-script"></a>

Para utilizar el script de administración de estado de SAP OData en el trabajo de AWS Glue, haga lo siguiente:
+ Descargue el script de gestión de estado: `s3://aws-blogs-artifacts-public/artifacts/BDB-4789/sap_odata_state_management.zip ` desde el bucket público de Amazon S3.
+ Cargue el script en un bucket de Amazon S3 al que el trabajo de AWS Glue tenga permiso de acceso.
+ Referencia al script de su trabajo de AWS Glue: al crear o actualizar su trabajo de AWS Glue, pase la opción `'--extra-py-files'` para hacer referencia a la ruta del script en el bucket de Amazon S3. Por ejemplo: `--extra-py-files s3://your-bucket/path/to/sap_odata_state_management.py`
+ Importe y use la biblioteca de administración de estados en los scripts del trabajo de AWS Glue.

## Ejemplo de transferencias incrementales basadas en tokens Delta
<a name="sap-odata-delta-token-incremental-transfer"></a>

A continuación, se muestra un ejemplo de cómo usar el script de administración de estados para transferencias incrementales basadas en token delta:

```
from sap_odata_state_management import StateManagerFactory, StateManagerType, StateType

# Initialize the state manager
state_manager = StateManagerFactory.create_manager(
    manager_type=StateManagerType.JOB_TAG,
    state_type=StateType.DELTA_TOKEN,
    options={
        "job_name": args['JOB_NAME'],
        "logger": logger
    }
)

# Get connector options (including delta token if available)
key = "SAPODataNode"
connector_options = state_manager.get_connector_options(key)

# Use the connector options in your Glue job
df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "ENABLE_CDC": "true",
        **connector_options
    }
)

# Process your data here...

# Update the state after processing
state_manager.update_state(key, sapodata_df.toDF())
```

## Ejemplo de transferencias incrementales basadas en marca temporal
<a name="sap-odata-timestamp-incremental-transfer"></a>

A continuación, se muestra un ejemplo de cómo usar el script de administración de estados para transferencias incrementales basadas en token delta:

```
from sap_odata_state_management import StateManagerFactory, StateManagerType, StateType

# Initialize the state manager
state_manager = StateManagerFactory.create_manager(
    manager_type=StateManagerType.JOB_TAG,
    state_type=StateType.DELTA_TOKEN,
    options={
        "job_name": args['JOB_NAME'],
        "logger": logger
    }
)

# Get connector options (including delta token if available)
key = "SAPODataNode"
connector_options = state_manager.get_connector_options(key)

# Use the connector options in your Glue job
df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "ENABLE_CDC": "true",
        **connector_options
    }
)

# Process your data here...

# Update the state after processing
state_manager.update_state(key, sapodata_df.toDF())
```

En ambos ejemplos, el script de administración del estado administra las complejidades del almacenamiento del estado (ya sea un token delta o una marca de tiempo) entre las ejecuciones de los trabajos. Recupera automáticamente el último estado conocido al obtener las opciones del conector y actualiza el estado después del procesamiento, lo que garantiza que cada trabajo que se ejecute solo procese datos nuevos o modificados.