

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat pekerjaan SAP OData
<a name="sap-odata-creating-job"></a>

Lihat [Membangun pekerjaan ETL visual dengan Studio AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)

# Sumber Penyediaan Data Operasional (ODP)
<a name="sap-odata-operational-data-provisioning-sources"></a>

Operational Data Provisioning (ODP) menyediakan infrastruktur teknis yang dapat Anda gunakan untuk mendukung ekstraksi dan replikasi data untuk berbagai aplikasi target dan mendukung mekanisme delta dalam skenario ini. Dalam kasus prosedur delta, data dari sumber (Penyedia ODP) secara otomatis ditulis ke antrian delta (Operational Delta Queue — ODQ) menggunakan proses pembaruan atau diteruskan ke antrian delta menggunakan antarmuka ekstraktor. Penyedia ODP dapat berupa DataSource (extractors), ABAP Core Data Services Views (ABAP CDS Views), SAP BW atau SAP BW/4HANA, SAP Landscape Transformation Replication Server (SLT), dan Tampilan Informasi SAP HANA (tampilan perhitungan). Aplikasi target (disebut sebagai 'pelanggan' ODQ atau lebih umum “Konsumen ODP”) mengambil data dari antrian delta dan melanjutkan pemrosesan data.

## Beban penuh
<a name="sap-odata-full-load"></a>

Dalam konteks entitas SAP OData dan ODP, **Full Load** mengacu pada proses ekstraksi semua data yang tersedia dari entitas ODP dalam satu operasi. Operasi ini mengambil dataset lengkap dari sistem sumber, memastikan bahwa sistem target memiliki up-to-date salinan data entitas yang komprehensif. Beban penuh biasanya digunakan untuk sumber yang tidak mendukung beban tambahan atau ketika penyegaran sistem target diperlukan.

**Contoh**

Anda dapat secara eksplisit mengatur `ENABLE_CDC` bendera ke false, saat membuat. DynamicFrame Catatan: false `ENABLE_CDC` secara default, jika Anda tidak ingin menginisialisasi antrian delta, Anda tidak perlu mengirim bendera ini atau mengaturnya ke true. Tidak menyetel flag ini ke true akan menghasilkan ekstraksi beban penuh.

```
sapodata_df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "ENABLE_CDC": "false"
    }, transformation_ctx=key)
```

## Beban tambahan
<a name="sap-odata-incremental-load"></a>

**Beban tambahan** dalam konteks entitas ODP (Operational Data Provisioning) melibatkan penggalian hanya data baru atau yang diubah (delta) dari sistem sumber sejak ekstraksi data terakhir, menghindari pra-pemrosesan catatan yang sudah diproses. Pendekatan ini secara signifikan meningkatkan efisiensi, mengurangi volume transfer data, meningkatkan kinerja, memastikan sinkronisasi yang efisien antar sistem, dan meminimalkan waktu pemrosesan, terutama untuk kumpulan data besar yang sering berubah.

# Transfer Inkremental berbasis Delta Token
<a name="sap-odata-incremental-transfers"></a>

Untuk mengaktifkan Transfer Inkremental menggunakan Change Data Capture (CDC) untuk entitas berkemampuan ODP yang mendukungnya, ikuti langkah-langkah berikut:

1. Buat pekerjaan Transfer Inkremental dalam mode skrip.

1. Saat membuat DataFrame or Glue DynamicFrame, Anda harus melewati opsi`"ENABLE_CDC": "True"`. Opsi ini memastikan bahwa Anda akan menerima Token Delta dari SAP, yang dapat digunakan untuk pengambilan data yang diubah selanjutnya.

Token delta akan hadir di baris terakhir kerangka data, di kolom DELTA\$1TOKEN. Token ini dapat digunakan sebagai opsi konektor dalam panggilan berikutnya untuk mengambil kumpulan data berikutnya secara bertahap.

**Contoh**
+ Kami mengatur `ENABLE_CDC` bendera ke`true`, saat membuat DynamicFrame. Catatan: `ENABLE_CDC` secara `false` default, jika Anda tidak ingin menginisialisasi antrian delta, Anda tidak perlu mengirim bendera ini atau mengaturnya ke true. Tidak menyetel flag ini ke true akan menghasilkan ekstraksi beban penuh.

  ```
  sapodata_df = glueContext.create_dynamic_frame.from_options(
      connection_type="SAPOData",
      connection_options={
          "connectionName": "connectionName",
          "ENTITY_NAME": "entityName",
          "ENABLE_CDC": "true"
      }, transformation_ctx=key)
  
  # Extract the delta token from the last row of the DELTA_TOKEN column
  delta_token_1 = your_logic_to_extract_delta_token(sapodata_df) # e.g., D20241029164449_000370000
  ```
+ Token delta yang diekstraksi dapat diteruskan sebagai opsi untuk mengambil peristiwa baru.

  ```
  sapodata_df_2 = glueContext.create_dynamic_frame.from_options(
      connection_type="SAPOData",
      connection_options={
          "connectionName": "connectionName",
          "ENTITY_NAME": "entityName",
          // passing the delta token retrieved in the last run
          "DELTA_TOKEN": delta_token_1
      } , transformation_ctx=key)
  
  # Extract the new delta token for the next run
  delta_token_2 = your_logic_to_extract_delta_token(sapodata_df_2)
  ```

Perhatikan bahwa catatan terakhir, di mana `DELTA_TOKEN` ada, bukan catatan transaksional dari sumber, dan hanya ada untuk tujuan meneruskan nilai token delta.

Terlepas dari`DELTA_TOKEN`, bidang berikut dikembalikan di setiap baris kerangka data. 
+ **GLUE\$1FETCH\$1SQ**: Ini adalah bidang urutan, yang dihasilkan dari stempel waktu EPOC dalam urutan catatan diterima, dan unik untuk setiap catatan. Ini dapat digunakan jika Anda perlu mengetahui atau menetapkan urutan perubahan dalam sistem sumber. Bidang ini hanya akan hadir untuk entitas yang diaktifkan ODP.
+ **DML\$1STATUS**: Ini akan ditampilkan `UPDATED` untuk semua catatan yang baru dimasukkan dan diperbarui dari sumber, dan `DELETED` untuk catatan yang telah dihapus dari sumber.

Untuk detail selengkapnya tentang cara mengelola status dan menggunakan kembali token delta untuk mengambil catatan yang diubah melalui contoh, lihat bagian tersebut. [Menggunakan skrip manajemen OData status SAP](sap-odata-state-management-script.md)

## Pembatalan Token Delta
<a name="sap-odata-invalidation"></a>

Token delta dikaitkan dengan koleksi layanan dan pengguna. Jika penarikan awal baru dimulai untuk koleksi layanan yang sama dan pengguna, semua token delta sebelumnya yang dikeluarkan sebagai hasil dari inisialisasi sebelumnya akan dibatalkan oleh layanan SAP. `“ENABLE_CDC” : “true”` OData Memanggil konektor dengan token delta yang kedaluwarsa akan menghasilkan pengecualian: 

`Could not open data access via extraction API RODPS_REPL_ODP_OPEN` 

# OData Layanan (Sumber Non-ODP)
<a name="sap-odata-non-odp-services"></a>

## Beban penuh
<a name="sap-odata-non-odp-full-load"></a>

Untuk sistem non-ODP (Operational Data Provisioning), **Full Load** melibatkan ekstraksi seluruh dataset dari sistem sumber dan memuatnya ke dalam sistem target. Karena sistem non-ODP tidak secara inheren mendukung mekanisme ekstraksi data canggih seperti delta, prosesnya mudah tetapi dapat intensif sumber daya tergantung pada ukuran data.

## Beban tambahan
<a name="sap-odata-non-odp-incremental-load"></a>

Untuk sistem atau entitas yang tidak mendukung **ODP (Operational Data Provisioning)**, transfer data inkremental dapat dikelola secara manual dengan menerapkan mekanisme berbasis stempel waktu untuk melacak dan mengekstrak perubahan.

**Transfer Inkremental Berbasis Timestamp**

Untuk entitas berkemampuan non-ODP (atau untuk entitas yang diaktifkan ODP yang tidak menggunakan flag ENABLE\$1CDC), kita dapat menggunakan `filteringExpression` opsi di konektor untuk menunjukkan `datetime` interval yang ingin kita ambil data. Metode ini bergantung pada bidang stempel waktu dalam data Anda yang mewakili kapan setiap catatan terakhir dibuat/dimodifikasi.

**Contoh**

Mengambil catatan yang berubah setelah 2024-01-01T 00: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)
```

Catatan: Dalam contoh ini, `LastChangeDateTime` adalah bidang yang mewakili kapan setiap rekaman terakhir diubah. Nama bidang yang sebenarnya dapat bervariasi tergantung pada OData entitas SAP spesifik Anda.

Untuk mendapatkan subset data baru dalam proses berikutnya, Anda akan memperbarui `filteringExpression` dengan stempel waktu baru. Biasanya, ini akan menjadi nilai stempel waktu maksimum dari data yang diambil sebelumnya.

**Contoh**

```
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
```

Di bagian selanjutnya, kami akan memberikan pendekatan otomatis untuk mengelola transfer inkremental berbasis stempel waktu ini, menghilangkan kebutuhan untuk memperbarui ekspresi pemfilteran secara manual di antara proses.