View a markdown version of this page

Membaca dari REST API - AWS Lem

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

Membaca dari REST API

Setelah Anda mendaftarkan REST API ConnectionType dan membuat AWS Glue koneksi, Anda dapat membaca data dari REST API di pekerjaan AWS Glue ETL Anda. Dengan koneksi ini, Anda dapat memproses data REST API eksternal bersama sumber lain dalam pekerjaan yang sama. Anda memerlukan nama koneksi dan nama entitas untuk membaca data.

Contoh berikut menunjukkan cara membaca dari sumber data REST API menggunakan Python:

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type" } )

Memfilter data

Anda dapat menekan predikat filter ke REST API sumber untuk mengurangi jumlah data yang ditransfer. Konektor REST API mendukung dua mode filter:

  • QUERY_PARAMS — Setiap filter menjadi parameter kueri URL terpisah. Misalnya: ?created[gte]=1704067200&created[lte]=1717200000

  • FILTER_STRING — Semua filter digabungkan menjadi satu parameter kueri. Misalnya: ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01"

Untuk menerapkan predikat filter dalam pekerjaan AWS Glue ETL Anda, gunakan opsi FILTER_PREDICATE koneksi:

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "FILTER_PREDICATE": "status = \"ACTIVE\" AND lastUpdated >= \"2024-01-01T00:00:00.000Z\"" } )
FilterConfiguration properti

Konfigurasikan perilaku pemfilteran dalam ConnectionType pendaftaran Anda menggunakan FilterConfiguration objek. Tabel berikut menjelaskan properti yang tersedia:

Properti

Tipe

Deskripsi

FilterMode

String

Diperlukan. QUERY_PARAMSatauFILTER_STRING.

OperatorMappings

Peta

Memetakan operator logis ke API-specific sintaks.

DateTimeFormat

String

DateTime pola format atauEPOCH_SECONDS/EPOCH_MILLIS.

StripQuotes

Boolean

Menentukan apakah akan menghapus tanda kutip di sekitarnya dari nilai input. Default: true.

BetweenConfiguration

Objek

Konfigurasi penanganan BETWEEN default.

FilterStringConfiguration

Objek

Pengaturan khusus untuk FILTER_STRING mode.

FilterStringConfiguration properti

Tabel berikut menjelaskan properti untuk FILTER_STRING mode:

Properti

Tipe

Deskripsi

FilterStringKey

String

Wajib. Kunci parameter kueri (misalnya, “pencarian” atau “filter”).

QuoteStringValues

Boolean

Menentukan apakah akan membungkus String dan DateTime nilai dalam tanda kutip.

QuoteCharacter

String

Kutipan karakter. Default: "

BetweenConfiguration properti

Tabel berikut menjelaskan properti penanganan BETWEEN:

Properti

Modus

Deskripsi

LowBoundKey

QUERY_PARAMETER

Template kunci untuk batas rendah. Mendukung {FIELD} placeholder.

HighBoundKey

QUERY_PARAMETER

Template kunci untuk batas tinggi. Hilangkan untuk menurunkan batas tinggi.

Template

FILTER_STRING

Template dengan{FIELD},{LOW}, {HIGH} placeholder.

Operator yang didukung

Operator berikut didukung dalam predikat filter:EQUAL_TO,GREATER_THAN,LESS_THAN,GREATER_THAN_OR_EQUAL_TO,LESS_THAN_OR_EQUAL_TO,NOT_EQUAL_TO,CONTAINS, BETWEENAND,OR.

Field-level mengesampingkan

Anda dapat mengonfigurasi perilaku filter per bidang menggunakan FilterOverrides dalam definisi Skema. Properti penggantian berikut tersedia:

  • FieldName— Ganti nama bidang yang digunakan dalam output filter.

  • OperatorMappings— Field-level penggantian operator.

  • BetweenConfiguration— Per-field ANTARA penggantian.

  • DateTimeFormat— Per-field DateTime penggantian format.

Contoh: mode QUERY_PARAMS

Contoh berikut menunjukkan API FilterConfiguration untuk REST yang menggunakan parameter kueri dengan notasi tanda kurung untuk operator dan stempel waktu zaman untuk nilai tanggal:

"FilterConfiguration": { "FilterMode": "QUERY_PARAMS", "OperatorMappings": { "EQUAL_TO": "{FIELD}", "GREATER_THAN_OR_EQUAL_TO": "{FIELD}[gte]", "LESS_THAN_OR_EQUAL_TO": "{FIELD}[lte]" }, "DateTimeFormat": "EPOCH_SECONDS", "BetweenConfiguration": { "LowBoundKey": "{FIELD}[gte]", "HighBoundKey": "{FIELD}[lte]" } }

Dengan konfigurasi ini, filter input created >= 2024-01-01 AND created <= 2024-06-01 menghasilkan string kueri URL: ?created[gte]=1704067200&created[lte]=1717200000

Contoh: mode FILTER_STRING

Contoh berikut menunjukkan API FilterConfiguration REST yang menggunakan parameter string filter tunggal dengan operator berisi spasi:

"FilterConfiguration": { "FilterMode": "FILTER_STRING", "OperatorMappings": { "EQUAL_TO": " eq ", "GREATER_THAN": " gt ", "GREATER_THAN_OR_EQUAL_TO": " ge ", "LESS_THAN": " lt ", "AND": " and ", "OR": " or " }, "DateTimeFormat": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "BetweenConfiguration": { "Template": "{FIELD} ge {LOW} and {FIELD} le {HIGH}" }, "FilterStringConfiguration": { "FilterStringKey": "search", "QuoteStringValues": true, "QuoteCharacter": "\"" } }

Dengan konfigurasi ini, filter input status = "ACTIVE" AND lastUpdated > 2024-01-01T00:00:00.000Z menghasilkan string kueri URL: ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01T00:00:00.000Z"

Kueri partisi

Anda dapat membagi pembacaan data menjadi partisi paralel di seluruh Spark pekerja untuk meningkatkan throughput. Konektor REST API mendukung partisi berbasis bidang, yang membagi data menjadi rentang berdasarkan bidang tertentu.

Spark parameter pekerjaan

Opsi koneksi berikut mengontrol perilaku partisi:

  • PARTITION_FIELD— Bidang untuk dipartisi. Harus ditandai IsPartitionable: true dalam skema.

  • LOWER_BOUND— Batas bawah inklusif untuk rentang partisi.

  • UPPER_BOUND— Batas atas untuk rentang partisi. Partisi menengah mengecualikan nilai ini. Partisi terakhir termasuk itu.

  • NUM_PARTITIONS— Jumlah partisi paralel.

Field-based partisi

Field-based partisi membagi data ke dalam rentang berdasarkan bidang tertentu. Berikut contoh partisi data di lastUpdated lapangan:

rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "PARTITION_FIELD": "lastUpdated", "LOWER_BOUND": "2024-01-01T00:00:00.000Z", "UPPER_BOUND": "2024-12-31T00:00:00.000Z", "NUM_PARTITIONS": "4" } )

Dengan 4 partisi di lastUpdated lapangan, pekerjaan didistribusikan sebagai berikut:

  • Pekerja 1: lastUpdated >= "2024-01-01" AND lastUpdated < "2024-04-01"

  • Pekerja 2: lastUpdated >= "2024-04-01" AND lastUpdated < "2024-07-01"

  • Pekerja 3: lastUpdated >= "2024-07-01" AND lastUpdated < "2024-10-01"

  • Pekerja 4: lastUpdated >= "2024-10-01" AND lastUpdated <= "2024-12-31"

Mengkonfigurasi dukungan partisi di RegisterConnectionType

Untuk mengaktifkan partisi berbasis bidang, tandai bidang sebagai dapat dipartisi dalam definisi Skema:

"Schema": { "lastUpdated": { "FieldDataType": "TIMESTAMP", "IsPartitionable": true } }

Nilai- FieldDataType nilai berikut didukung untuk partisi:

  • TIMESTAMP— DateTime partisi. Membagi rentang menjadi jendela waktu.

  • INTEGER— Partisi bilangan bulat. Membagi rentang menjadi jendela numerik.

catatan

Konektor menggabungkan filter partisi dengan filter pengguna menggunakan AND. Jika filter Anda berisi klausa LIMIT, konektor melewatkan partisi. Jika pembuatan partisi gagal, konektor jatuh kembali ke satu partisi dan pekerjaan masih selesai.