

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à.

# OData Servizi (fonti non ODP)
<a name="sap-odata-non-odp-services"></a>

## Caricamento completo
<a name="sap-odata-non-odp-full-load"></a>

Per i sistemi non ODP (Operational Data Provisioning), un **Carico completo** prevede l'estrazione dell'intero set di dati dal sistema di origine e il suo caricamento nel sistema di destinazione. Poiché i sistemi non ODP non supportano intrinsecamente meccanismi avanzati di estrazione dei dati come i delta, il processo è semplice ma può richiedere molte risorse a seconda delle dimensioni dei dati.

## Carico incrementale
<a name="sap-odata-non-odp-incremental-load"></a>

Per i sistemi o le entità che non supportano **ODP (Operational Data Provisioning)**, il trasferimento incrementale dei dati può essere gestito manualmente implementando un meccanismo basato su marcature temporali per tracciare ed estrarre le modifiche.

**Trasferimenti incrementali basati su marcature temporali**

Per le entità non abilitate per ODP (o per le entità abilitate per ODP che non utilizzano il flag ENABLE\_CDC), possiamo usare un'opzione `filteringExpression` nel connettore per indicare l'intervallo `datetime` per il quale vogliamo recuperare i dati. Questo metodo si basa su un campo timestamp nei dati che indica quando ogni record è stato creato/modificato per l'ultima volta.

**Esempio**

Recuperare i record modificati dopo 2024-01-01T00:00:00.000

```
sapodata_df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "filteringExpression": "LastChangeDateTime >= 2024-01-01T00:00:00.000"
    }, transformation_ctx=key)
```

Nota: in questo esempio, `LastChangeDateTime` è il campo che rappresenta l'ultima modifica di ogni record. Il nome effettivo del campo può variare a seconda dell'entità OData SAP specifica.

Per ottenere un nuovo sottoinsieme di dati nelle esecuzioni successive, è necessario aggiornare `filteringExpression` con una nuova marcatura temporale. In genere, questo sarebbe il valore massimo della marcatura temporale dei dati recuperati in precedenza.

**Esempio**

```
max_timestamp = get_max_timestamp(sapodata_df)  # Function to get the max timestamp from the previous run
next_filtering_expression = f"LastChangeDateTime > {max_timestamp}"

# Use this next_filtering_expression in your next run
```

Nella prossima sezione, forniremo un approccio automatizzato per gestire questi trasferimenti incrementali basati sulla marcatura temporale, eliminando la necessità di aggiornare manualmente l'espressione di filtraggio tra le esecuzioni.