Connettore Amazon Athena OpenSearch
OpenSearch Service
Il connettore Amazon Athena OpenSearch consente ad Amazon Athena di comunicare con le istanze OpenSearch in modo da poter eseguire query sui dati OpenSearch con SQL.
Questo connettore può essere registrato con il Catalogo dati Glue come catalogo federato. Supporta controlli di accesso ai dati definiti in Lake Formation a livello di catalogo, database, tabella, colonna, riga e tag. Questo connettore utilizza Connessioni Glue per centralizzare le proprietà di configurazione in Glue.
Nota
A causa di un problema noto, il connettore OpenSearch non può essere utilizzato con un VPC.
Se hai abilitato Lake Formation nel tuo account, il ruolo IAM per il connettore Lambda federato Athena che hai implementato nel file AWS Serverless Application Repository deve avere accesso in lettura in Lake Formation per il AWS Glue Data Catalog.
Prerequisiti
Implementa il connettore sul tuo Account AWS utilizzando la console Athena o AWS Serverless Application Repository. Per ulteriori informazioni, consulta Crea una connessione di un'origine dati o Utilizzare AWS Serverless Application Repository per distribuire un connettore origine dati.
Termini
I seguenti termini si riferiscono al connettore OpenSearch.
-
Dominio: un nome che questo connettore associa all'endpoint dell'istanza OpenSearch. Il dominio viene utilizzato anche come nome del database. Per le istanze OpenSearch definite all'interno del servizio OpenSearch di Amazon, il dominio è individuabile automaticamente. Per altre istanze, devi fornire una mappatura tra il nome di dominio e l'endpoint.
-
Indice: una tabella di database definita nell'istanza OpenSearch.
-
Mappatura: se un indice è una tabella del database, la mappatura è il relativo schema (ossia le definizioni dei campi e degli attributi).
Questo connettore supporta il recupero dei metadati sia dall'istanza OpenSearch sia da AWS Glue Data Catalog. Se il connettore rileva un database e una tabella AWS Glue che corrispondono ai nomi di dominio e indice di OpenSearch, tenta di utilizzarli per la definizione dello schema. Ti consigliamo di creare la tabella AWS Glue in modo che sia un superset di tutti i campi dell'indice OpenSearch.
-
Documento: un record all'interno di una tabella del database.
-
Flusso di dati: dati basati su tempo composti da più indici di supporto. Per ulteriori informazioni, consulta Data streams
nella documentazione di OpenSearch e Nozioni di base sui flussi di dati nella Guida per gli sviluppatori del servizio OpenSearch di Amazon. Nota
Poiché gli indici dei flussi di dati sono creati e gestiti internamente da open search, il connettore sceglie dal primo indice disponibile la mappatura dello schema. Per questo motivo, è vivamente consigliato configurare una tabella AWS Glue come origine di metadati supplementare. Per ulteriori informazioni, consulta Configurazione di database e tabelle in AWS Glue.
Parametri
Utilizza i parametri mostrati in questa sezione per configurare il connettore OpenSearch.
Nota
I connettori di origine dati Athena creati il 3 dicembre 2024 e versioni successive utilizzano connessioni AWS Glue.
I nomi e le definizioni dei parametri elencati di seguito si riferiscono a connettori di origine dati Athena creati prima del 3 dicembre 2024. Questi possono differire dalle proprietà di connessione AWS Glue corrispondenti. A partire dal 3 dicembre 2024, utilizza i parametri seguenti solo quando implementi manualmente una versione precedente di un connettore di origine dati Athena.
Si consiglia di configurare un connettore OpenSearch utilizzando un oggetto di connessioni Glue. Per fare ciò, imposta la variabile di ambiente glue_connection del connettore OpenSearch Lambda sul nome della connessione Glue da utilizzare.
Proprietà delle connessioni Glue
Utilizzare il seguente comando per ottenere lo schema di una connessione Glue. Questo schema contiene tutti i parametri che è possibile usare per controllare la connessione.
aws glue describe-connection-type --connection-type OPENSEARCH
Proprietà dell'ambiente
-
glue_connection — Specifica il nome della connessione Glue associata al connettore federato.
Nota
-
Tutti i connettori che utilizzano le connessioni Glue devono utilizzare Gestione dei segreti AWS per memorizzare le credenziali.
-
Il connettore OpenSearch creato utilizzando le connessioni Glue non supporta l'uso di un gestore multiplexing.
-
Il connettore OpenSearch creato utilizzando le connessioni Glue supporta solo 2
ConnectionSchemaVersion.
-
spill_bucket: specifica il bucket Amazon S3 per i dati che superano i limiti della funzione Lambda.
-
spill_prefix: (facoltativo) per impostazione predefinita, viene utilizzata una sottocartella nello
spill_bucketspecificato chiamataathena-federation-spill. Ti consigliamo di configurare un ciclo di vita dell'archiviazione di Amazon S3 in questa posizione per eliminare gli spill più vecchi di un numero predeterminato di giorni o ore. -
spill_put_request_headers: (facoltativo) una mappa codificata in JSON delle intestazioni e dei valori della richiesta per la richiesta
putObjectdi Amazon S3 utilizzata per lo spill (ad esempio,{"x-amz-server-side-encryption" : "AES256"}). Per altre possibili intestazioni, consulta l'argomento relativo a PutObject nella Documentazione di riferimento dell'API di Amazon Simple Storage Service. -
kms_key_id: (facoltativo) per impostazione predefinita, tutti i dati riversati in Amazon S3 vengono crittografati utilizzando la modalità di crittografia autenticata AES-GCM e una chiave generata casualmente. Per fare in modo che la tua funzione Lambda utilizzi chiavi di crittografia più potenti generate da KMS come
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, puoi specificare l'ID della chiave KMS. -
disable_spill_encryption: (facoltativo) se impostato su
True, disabilita la crittografia dello spill. L'impostazione predefinita èFalse: in questo modo, i dati riversati su S3 vengono crittografati utilizzando AES-GCM tramite una chiave generata casualmente o una chiave generata mediante KMS. La disabilitazione della crittografia dello spill può migliorare le prestazioni, soprattutto se la posizione dello spill utilizza la crittografia lato server. -
disable_glue: (facoltativo) se presente e impostato su true, il connettore non tenta di recuperare metadati supplementari da AWS Glue.
-
query_timeout_cluster: il periodo di timeout, in secondi, per le query sullo stato del cluster utilizzate nella generazione di scansioni in parallelo.
-
query_timeout_search: il periodo di timeout, in secondi, per le query di ricerca utilizzate per il recupero di documenti da un indice.
-
auto_discover_endpoint: un valore booleano. Il valore predefinito è
true. Quando si utilizza il servizio OpenSearch di Amazon e si imposta questo parametro su true, il connettore è in grado di rilevare automaticamente i domini ed endpoint richiamando le operazioni API di descrizione o elenco appropriate sul servizio OpenSearch. Per qualsiasi altro tipo di istanza OpenSearch (ad esempio autogestita), devi specificare gli endpoint di dominio associati nella variabiledomain_mapping. Se èauto_discover_endpoint=true, il connettore utilizza le credenziali AWS per l'autenticazione al servizio OpenSearch. Altrimenti, il connettore recupera le credenziali del nome utente e della password da Gestione dei segreti AWS attraverso la variabiledomain_mapping. -
domain_mapping: viene utilizzato solo quando
auto_discover_endpointè impostato su false e definisce la mappatura tra i nomi di dominio e gli endpoint associati. La variabiledomain_mappingpuò ospitare più endpoint OpenSearch nel formato seguente:domain1=endpoint1,domain2=endpoint2,domain3=endpoint3,...Ai fini dell'autenticazione su un endpoint OpenSearch, il connettore supporta stringhe di sostituzione iniettate utilizzando il formato
${SecretName}con il nome utente e la password recuperati da Gestione dei segreti AWS. La stringa deve avere il formato seguente:{ "username": "your_username", "password": "your_password" }Il connettore analizzerà automaticamente questa struttura JSON per recuperare le credenziali.
Importante
Come best practice di sicurezza, non utilizzare credenziali codificate nelle variabili di ambiente o nelle stringhe di connessione. Per informazioni su come trasferire i segreti codificati in Gestione dei segreti AWS, consulta Trasferimento dei segreti codificati in Gestione dei segreti AWS nella Guida per l'utente di Gestione dei segreti AWS.
Nell'esempio seguente viene utilizzato il segreto
opensearch-creds.movies=https://${opensearch-creds}:search-movies-ne...qu.us-east-1.es.amazonaws.comIn fase di runtime,
${opensearch-creds}viene visualizzato come nome utente e password, come nell'esempio seguente.movies=https://myusername@mypassword:search-movies-ne...qu.us-east-1.es.amazonaws.comNel parametro
domain_mapping, ogni coppia dominio-endpoint può utilizzare un segreto diverso. Il segreto stesso deve essere specificato nel formatonome_utente@password. Sebbene la password possa contenere segni@, il primo@funge da separatore dauser_name(nome utente).È anche importante tenere a mente che questo connettore utilizza la virgola (,) e il segno uguale (=) come separatori per le coppie dominio-endpoint. Per questo motivo, non è consigliabile utilizzarli da nessuna parte all'interno del secreto archiviato.
Configurazione di database e tabelle in AWS Glue
Il connettore ottiene informazioni sui metadati utilizzando AWS Glue oppure OpenSearch. Puoi configurare una tabella AWS Glue come origine di definizione dei metadati supplementare. Per abilitare questa funzione, definisci un database e una tabella AWS Glue che corrispondano al dominio e all'indice dell'origine che stai integrando. Il connettore può anche sfruttare le definizioni dei metadati archiviate nell'istanza OpenSearch recuperando la mappatura per l'indice specificato.
Definizione dei metadati per le matrici in OpenSearch
OpenSearch non dispone di un tipo di dati di matrice dedicato. Qualsiasi campo può contenere zero o più valori purché siano dello stesso tipo di dati. Se desideri utilizzare OpenSearch come origine di definizione dei metadati, devi definire una proprietà _meta per tutti gli indici utilizzati con Athena per i campi che devono essere considerati un elenco o una matrice. Se non completi questo passaggio, le query restituiscono solo il primo elemento nel campo elenco. Quando specifichi la proprietà _meta, i nomi dei campi devono essere completamente qualificati per le strutture JSON nidificate (ad esempio, address.street, dove street è un campo nidificato all'interno di una struttura address).
L'esempio seguente definisce gli elenchi actor e genre nella tabella movies.
PUT movies/_mapping { "_meta": { "actor": "list", "genre": "list" } }
Tipi di dati
Il connettore OpenSearch può estrarre le definizioni dei metadati da AWS Glue o dall'istanza OpenSearch. Il connettore utilizza la mappatura illustrata nella seguente tabella per convertire le definizioni in tipi di dati Apache Arrow, inclusi i punti indicati nella sezione seguente.
| OpenSearch | Apache Arrow | AWS Glue |
|---|---|---|
| text, keyword, binary | VARCHAR | string |
| Long | BIGINT | bigint |
| scaled_float | BIGINT | SCALED_FLOAT(...) |
| integer | INT | int |
| short | SMALLINT | smallint |
| byte | TINYINT | tinyint |
| double | FLOAT8 | double |
| float, half_float | FLOAT4 | float |
| booleano | BIT | booleano |
| date, date_nanos | DATEMILLI | timestamp |
| Struttura JSON | STRUCT | STRUCT |
| _meta (per informazioni, consulta la sezione Definizione dei metadati per le matrici in OpenSearch.) | LIST | ARRAY |
Note sui tipi di dati
-
Attualmente, il connettore supporta solo i tipi di dati OpenSearch e AWS Glue elencati nella tabella precedente.
-
Un
scaled_floatè un numero a virgola mobile scalato in base a un fattore di scala fisso doppio e rappresentato comeBIGINTin Apache Arrow. Ad esempio, 0,756 con un fattore di scala pari a 100 viene arrotondato a 76. -
Per definire un
scaled_floatin AWS Glue, devi selezionare il tipo di colonnaarraye dichiarare il campo utilizzando il formato SCALED_FLOAT(scaling_factor) (MOBILE_SCALATO[fattore_scala]).Gli esempi seguenti sono validi:
SCALED_FLOAT(10.51) SCALED_FLOAT(100) SCALED_FLOAT(100.0)Gli esempi seguenti non sono validi:
SCALED_FLOAT(10.) SCALED_FLOAT(.5) -
Durante la conversione da
date_nanosaDATEMILLI, i nanosecondi vengono arrotondati al millisecondo più vicino. I valori validi perdateedate_nanosincludono, senza limitazione, i seguenti formati:"2020-05-18T10:15:30.123456789" "2020-05-15T06:50:01.123Z" "2020-05-15T06:49:30.123-05:00" 1589525370001 (epoch milliseconds) -
Un
binaryOpenSearch è una rappresentazione in formato stringa di un valore binario codificato conBase64e viene convertito in unVARCHAR.
Esecuzione di query SQL
Di seguito sono riportati alcuni esempi di query DDL che puoi utilizzare con questo connettore. Negli esempi, function_name corrisponde al nome della funzione Lambda, domain è il nome del dominio su cui desideri eseguire una query e index è il nome del tuo indice.
SHOW DATABASES in `lambda:function_name`
SHOW TABLES in `lambda:function_name`.domain
DESCRIBE `lambda:function_name`.domain.index
Prestazioni
Il connettore OpenSearch per Athena supporta le scansioni in parallelo basate su partizione. Il connettore utilizza le informazioni sullo stato del cluster recuperate dall'istanza OpenSearch per generare più richieste per una query di ricerca di documenti. Le richieste vengono suddivise per ogni partizione ed eseguite in simultanea.
Il connettore inoltre esegue il pushdown dei predicati come parte delle sue query di ricerca di documenti. I seguenti query e predicato di esempio mostrano come il connettore utilizza il pushdown del predicato.
Query
SELECT * FROM "lambda:elasticsearch".movies.movies WHERE year >= 1955 AND year <= 1962 OR year = 1996
Predicate
(_exists_:year) AND year:([1955 TO 1962] OR 1996)
Query passthrough
Il connettore OpenSearch supportale query passthrough e utilizza il linguaggio QueryDSL. Per ulteriori informazioni sull'esecuzione di query con Query DSL, consulta Query DSL
Per utilizzare le query passthrough con il connettore OpenSearch, utilizzare la seguente sintassi:
SELECT * FROM TABLE( system.query( schema => 'schema_name', index => 'index_name', query => "{query_string}" ))
Il seguente esempio di filtri di query passthrough di OpenSearch per i dipendenti con status occupazionale attivo nell'indice employee dello schema default.
SELECT * FROM TABLE( system.query( schema => 'default', index => 'employee', query => "{ ''bool'':{''filter'':{''term'':{''status'': ''active''}}}}" ))
Risorse aggiuntive
-
Per un articolo su come utilizzare il connettore Amazon Athena OpenSearch per eseguire query sui dati nel servizio OpenSearch di Amazon e su Amazon S3 in un'unica query, consulta Esecuzione di query sui dati nelservizio OpenSearch di Amazon usando SQL di Amazon Athena
nel Blog sui Big Data di AWS. Per ulteriori informazioni su questo connettore, visita il sito corrispondente
su GitHub.com.