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]=1717200000FILTER_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 |
|---|---|---|
|
String |
Diperlukan. |
|
Peta |
Memetakan operator logis ke API-specific sintaks. |
|
String |
DateTime pola format atau |
|
Boolean |
Menentukan apakah akan menghapus tanda kutip di sekitarnya dari nilai input. Default: |
|
Objek |
Konfigurasi penanganan BETWEEN default. |
|
Objek |
Pengaturan khusus untuk |
FilterStringConfiguration properti
Tabel berikut menjelaskan properti untuk FILTER_STRING mode:
Properti |
Tipe |
Deskripsi |
|---|---|---|
|
String |
Wajib. Kunci parameter kueri (misalnya, “pencarian” atau “filter”). |
|
Boolean |
Menentukan apakah akan membungkus String dan DateTime nilai dalam tanda kutip. |
|
String |
Kutipan karakter. Default: |
BetweenConfiguration properti
Tabel berikut menjelaskan properti penanganan BETWEEN:
Properti |
Modus |
Deskripsi |
|---|---|---|
|
QUERY_PARAMETER |
Template kunci untuk batas rendah. Mendukung |
|
QUERY_PARAMETER |
Template kunci untuk batas tinggi. Hilangkan untuk menurunkan batas tinggi. |
|
FILTER_STRING |
Template dengan |
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 ditandaiIsPartitionable: truedalam 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.