Konektor Amazon Athena OpenSearch - Amazon Athena

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

Konektor Amazon Athena OpenSearch

OpenSearch Layanan

OpenSearch Konektor Amazon Athena memungkinkan Amazon Athena berkomunikasi dengan instans OpenSearch Anda sehingga Anda dapat menggunakan SQL untuk menanyakan data Anda. OpenSearch

catatan

Karena masalah yang diketahui, OpenSearch konektor tidak dapat digunakan dengan VPC.

Jika Anda mengaktifkan Lake Formation di akun Anda, peran IAM untuk konektor Lambda federasi Athena yang Anda gunakan di harus memiliki akses baca di AWS Serverless Application Repository Lake Formation ke. AWS Glue Data Catalog

Prasyarat

Ketentuan

Istilah-istilah berikut berhubungan dengan OpenSearch konektor.

  • Domain — Nama yang dihubungkan oleh konektor ini dengan titik akhir instans Anda OpenSearch . Domain juga digunakan sebagai nama database. Untuk OpenSearch instance yang ditentukan dalam OpenSearch Layanan Amazon, domain dapat ditemukan secara otomatis. Untuk contoh lain, Anda harus menyediakan pemetaan antara nama domain dan titik akhir.

  • Indeks — Tabel database yang didefinisikan dalam OpenSearch contoh Anda.

  • Pemetaan — Jika indeks adalah tabel database, maka pemetaan adalah skemanya (yaitu, definisi bidang dan atributnya).

    Konektor ini mendukung pengambilan metadata dari OpenSearch instance dan dari file. AWS Glue Data Catalog Jika konektor menemukan AWS Glue database dan tabel yang cocok dengan nama OpenSearch domain dan indeks Anda, konektor mencoba menggunakannya untuk definisi skema. Kami menyarankan Anda membuat AWS Glue tabel Anda sehingga merupakan superset dari semua bidang dalam OpenSearch indeks Anda.

  • Document — Sebuah catatan dalam tabel database.

  • Aliran data — Data berbasis waktu yang terdiri dari beberapa indeks dukungan. Untuk informasi selengkapnya, lihat Aliran data dalam OpenSearch dokumentasi dan Memulai aliran data di Panduan Pengembang OpenSearch Layanan Amazon.

    catatan

    Karena indeks aliran data dibuat dan dikelola secara internal oleh pencarian terbuka, konektor memilih pemetaan skema dari indeks pertama yang tersedia. Untuk alasan ini, kami sangat menyarankan untuk menyiapkan AWS Glue tabel sebagai sumber metadata tambahan. Untuk informasi selengkapnya, lihat Menyiapkan database dan tabel di AWS Glue.

Parameter

Gunakan variabel lingkungan Lambda di bagian ini untuk mengonfigurasi konektor. OpenSearch

  • spill_bucket - Menentukan bucket Amazon S3 untuk data yang melebihi batas fungsi Lambda.

  • spill_prefix — (Opsional) Default ke subfolder dalam nama yang ditentukan. spill_bucket athena-federation-spill Kami menyarankan Anda mengonfigurasi siklus hidup penyimpanan Amazon S3 di lokasi ini untuk menghapus tumpahan yang lebih lama dari jumlah hari atau jam yang telah ditentukan sebelumnya.

  • spill_put_request_headers — (Opsional) Peta header permintaan dan nilai yang disandikan JSON untuk permintaan Amazon S3 yang digunakan untuk menumpahkan (misalnya,). putObject {"x-amz-server-side-encryption" : "AES256"} Untuk kemungkinan header lainnya, lihat PutObjectdi Referensi API Amazon Simple Storage Service.

  • kms_key_id — (Opsional) Secara default, data apa pun yang tumpah ke Amazon S3 dienkripsi menggunakan mode enkripsi yang diautentikasi AES-GCM dan kunci yang dihasilkan secara acak. Agar fungsi Lambda Anda menggunakan kunci enkripsi yang lebih kuat yang dihasilkan oleh KMS sepertia7e63k4b-8loc-40db-a2a1-4d0en2cd8331, Anda dapat menentukan ID kunci KMS.

  • disable_spill_encryption — (Opsional) Ketika diatur ke, menonaktifkan enkripsi tumpahan. True Defaultnya False sehingga data yang tumpah ke S3 dienkripsi menggunakan AES-GCM — baik menggunakan kunci yang dihasilkan secara acak atau KMS untuk menghasilkan kunci. Menonaktifkan enkripsi tumpahan dapat meningkatkan kinerja, terutama jika lokasi tumpahan Anda menggunakan enkripsi sisi server.

  • disable_glue — (Opsional) Jika ada dan disetel ke true, konektor tidak mencoba untuk mengambil metadata tambahan dari. AWS Glue

  • query_timeout_cluster — Periode batas waktu, dalam hitungan detik, untuk kueri kesehatan klaster yang digunakan dalam pembuatan pemindaian paralel.

  • query_timeout_search — Periode batas waktu, dalam hitungan detik, untuk kueri penelusuran yang digunakan dalam pengambilan dokumen dari indeks.

  • auto_discover_endpoint — Boolean. Nilai default-nya true. Saat Anda menggunakan OpenSearch Layanan Amazon dan menyetel parameter ini ke true, konektor dapat secara otomatis menemukan domain dan titik akhir Anda dengan memanggil operasi API deskripsi atau daftar yang sesuai di Layanan. OpenSearch Untuk jenis OpenSearch instance lainnya (misalnya, di-host sendiri), Anda harus menentukan titik akhir domain terkait dalam variabel. domain_mapping Jikaauto_discover_endpoint=true, konektor menggunakan AWS kredensil untuk mengautentikasi ke Layanan. OpenSearch Jika tidak, konektor mengambil nama pengguna dan kredenal kata sandi dari variabel AWS Secrets Manager . domain_mapping

  • domain_mapping - Digunakan hanya ketika auto_discover_endpoint disetel ke false dan mendefinisikan pemetaan antara nama domain dan titik akhir yang terkait. domain_mappingVariabel dapat mengakomodasi beberapa OpenSearch titik akhir dalam format berikut:

    domain1=endpoint1,domain2=endpoint2,domain3=endpoint3,...

    Untuk tujuan otentikasi ke OpenSearch titik akhir, konektor mendukung string substitusi yang disuntikkan menggunakan format ${SecretName}: dengan nama pengguna dan kata sandi yang diambil dari. AWS Secrets Manager Titik dua (:) di akhir ekspresi berfungsi sebagai pemisah dari sisa titik akhir.

    penting

    Sebagai praktik keamanan terbaik, jangan gunakan kredensi hardcode dalam variabel lingkungan atau string koneksi Anda. Untuk informasi tentang memindahkan rahasia hardcode Anda AWS Secrets Manager, lihat Memindahkan rahasia hardcode ke AWS Secrets Manager dalam Panduan Pengguna.AWS Secrets Manager

    Contoh berikut menggunakan opensearch-creds rahasia.

    movies=https://${opensearch-creds}:search-movies-ne...qu---us-east-1---es.amazonaws.com

    Saat runtime, ${opensearch-creds} dirender sebagai nama pengguna dan kata sandi, seperti pada contoh berikut.

    movies=https://myusername@mypassword:search-movies-ne...qu---us-east-1---es.amazonaws.com

    Dalam domain_mapping parameter, setiap pasangan domain-endpoint dapat menggunakan rahasia yang berbeda. Rahasia itu sendiri harus ditentukan dalam format user_name @ password. Meskipun kata sandi mungkin berisi @ tanda yang disematkan, yang pertama @ berfungsi sebagai pemisah dari user_name.

    Penting juga untuk dicatat bahwa koma (,) dan tanda sama dengan (=) digunakan oleh konektor ini sebagai pemisah untuk pasangan domain-endpoint. Untuk alasan ini, Anda tidak boleh menggunakannya di mana pun di dalam rahasia yang disimpan.

Menyiapkan database dan tabel di AWS Glue

Konektor memperoleh informasi metadata dengan menggunakan atau. AWS Glue OpenSearch Anda dapat mengatur AWS Glue tabel sebagai sumber definisi metadata tambahan. Untuk mengaktifkan fitur ini, tentukan AWS Glue database dan tabel yang cocok dengan domain dan indeks sumber yang Anda tambahkan. Konektor juga dapat memanfaatkan definisi metadata yang disimpan dalam OpenSearch instance dengan mengambil pemetaan untuk indeks yang ditentukan.

Mendefinisikan metadata untuk array di OpenSearch

OpenSearch tidak memiliki tipe data array khusus. Bidang apa pun dapat berisi nol atau lebih nilai asalkan memiliki tipe data yang sama. Jika ingin digunakan OpenSearch sebagai sumber definisi metadata, Anda harus menentukan _meta properti untuk semua indeks yang digunakan dengan Athena untuk bidang yang akan dianggap sebagai daftar atau larik. Jika Anda gagal menyelesaikan langkah ini, kueri hanya mengembalikan elemen pertama di bidang daftar. Saat Anda menentukan _meta properti, nama bidang harus sepenuhnya memenuhi syarat untuk struktur JSON bersarang (misalnyaaddress.street, di mana street adalah bidang bersarang di dalam struktur). address

Contoh berikut mendefinisikan actor dan genre daftar dalam movies tabel.

PUT movies/_mapping { "_meta": { "actor": "list", "genre": "list" } }

Jenis data

OpenSearch Konektor dapat mengekstrak definisi metadata dari salah satu AWS Glue atau instance. OpenSearch Konektor menggunakan pemetaan dalam tabel berikut untuk mengonversi definisi ke tipe data Apache Arrow, termasuk titik-titik yang dicatat di bagian berikut.

OpenSearch Panah Apache AWS Glue
teks, kata kunci, biner VARCHAR string
panjang BIGINT bigint
scaled_float BIGINT SCALED_FLOAT (...)
integer INT int
pendek SMALLINT smallint
byte TINYINT tinyint
double FLOAT8 double
mengapung, half_float FLOAT4 float
boolean BIT boolean
tanggal, date_nanos DATEMILLI timestamp
Struktur JSON STRUCT STRUCT
_meta (untuk informasi, lihat bagianMendefinisikan metadata untuk array di OpenSearch.) DAFTAR ARRAY

Catatan tentang tipe data

  • Saat ini, konektor hanya mendukung OpenSearch dan AWS Glue tipe data yang tercantum dalam tabel sebelumnya.

  • A scaled_float adalah angka floating-point yang diskalakan oleh faktor penskalaan ganda tetap dan direpresentasikan sebagai dalam Apache Arrow. BIGINT Misalnya, 0,756 dengan faktor penskalaan 100 dibulatkan menjadi 76.

  • Untuk menentukan scaled_float in AWS Glue, Anda harus memilih jenis array kolom dan mendeklarasikan bidang menggunakan format SCALED_FLOAT (scaling_factor).

    Contoh-contoh berikut ini valid:

    SCALED_FLOAT(10.51) SCALED_FLOAT(100) SCALED_FLOAT(100.0)

    Contoh berikut tidak valid:

    SCALED_FLOAT(10.) SCALED_FLOAT(.5)
  • Saat mengonversi dari date_nanos keDATEMILLI, nanodetik dibulatkan ke milidetik terdekat. Nilai yang valid untuk date dan date_nanos termasuk, tetapi tidak terbatas pada, format berikut:

    "2020-05-18T10:15:30.123456789" "2020-05-15T06:50:01.123Z" "2020-05-15T06:49:30.123-05:00" 1589525370001 (epoch milliseconds)
  • An OpenSearch binary adalah representasi string dari nilai biner yang dikodekan menggunakan Base64 dan dikonversi ke a. VARCHAR

Menjalankan kueri SQL

Berikut ini adalah contoh query DDL yang dapat Anda gunakan dengan konektor ini. Dalam contoh, function_name sesuai dengan nama fungsi Lambda Anda, domain adalah nama domain yang ingin Anda kueri, dan indeks adalah nama indeks Anda.

SHOW DATABASES in `lambda:function_name`
SHOW TABLES in `lambda:function_name`.domain
DESCRIBE `lambda:function_name`.domain.index

Kinerja

OpenSearch Konektor Athena mendukung pemindaian paralel berbasis shard. Konektor menggunakan informasi kesehatan cluster yang diambil dari OpenSearch instance untuk menghasilkan beberapa permintaan untuk kueri penelusuran dokumen. Permintaan dibagi untuk setiap pecahan dan dijalankan secara bersamaan.

Konektor juga menekan predikat sebagai bagian dari permintaan pencarian dokumennya. Contoh query berikut dan predikat menunjukkan bagaimana konektor menggunakan predikat push down.

Kueri

SELECT * FROM "lambda:elasticsearch".movies.movies WHERE year >= 1955 AND year <= 1962 OR year = 1996

Predikat

(_exists_:year) AND year:([1955 TO 1962] OR 1996)

Kueri passthrough

OpenSearch Konektor mendukung kueri passthrough dan menggunakan bahasa Query DSL. Untuk informasi selengkapnya tentang kueri dengan Query DSL, lihat Kueri DSL di dokumentasi Elasticsearch atau Query DSL dalam dokumentasi. OpenSearch

Untuk menggunakan kueri passthrough dengan OpenSearch konektor, gunakan sintaks berikut:

SELECT * FROM TABLE( system.query( schema => 'schema_name', index => 'index_name', query => "{query_string}" ))

OpenSearch Contoh filter kueri passthrough berikut untuk karyawan dengan status pekerjaan aktif dalam employee indeks default skema.

SELECT * FROM TABLE( system.query( schema => 'default', index => 'employee', query => "{ ''bool'':{''filter'':{''term'':{''status'': ''active''}}}}" ))

Sumber daya tambahan