

# Uso do script de gerenciamento de estado do SAP OData
<a name="sap-odata-state-management-script"></a>

Para usar o script de gerenciamento de estado OData do SAP no trabalho do AWS Glue, siga estas etapas:
+ Faça o download do script de gerenciamento de estado `s3://aws-blogs-artifacts-public/artifacts/BDB-4789/sap_odata_state_management.zip ` no bucket público do Amazon S3.
+ Carregue o script em um bucket do Amazon S3 que seu trabalho do AWS Glue tenha permissões para acessar.
+ Referencie o script no ttrabalho do AWS Glue: quando criar ou atualizar o trabalho do AWS Glue, passe a opção `'--extra-py-files'` referenciando o caminho do script no bucket do Amazon S3. Por exemplo: `--extra-py-files s3://your-bucket/path/to/sap_odata_state_management.py`
+ Importe e use a biblioteca de gerenciamento de estado nos scripts do trabalho do AWS Glue.

## Exemplo de transferência incremental baseada no token delta
<a name="sap-odata-delta-token-incremental-transfer"></a>

Veja um exemplo de como usar o script de gerenciamento de estado para transferências incrementais com base em tokens 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())
```

## Exemplo de transferência incremental baseada no timestamp
<a name="sap-odata-timestamp-incremental-transfer"></a>

Veja um exemplo de como usar o script de gerenciamento de estado para transferências incrementais com base em tokens 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())
```

Nos dois exemplos, o script de gerenciamento de estado lida com as complexidades de armazenar o estado (token delta ou carimbo de data e hora) entre as execuções do trabalho. Ele recupera automaticamente o último estado conhecido ao obter as opções do conector e atualiza o estado após o processamento, garantindo que cada execução de trabalho só processe dados novos ou alterados.