Connettore Amazon Athena OpenSearch - Amazon Athena

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

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_bucket specificato chiamata athena-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 putObject di 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 variabile domain_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 variabile domain_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 variabile domain_mapping può 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.com

    In 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.com

    Nel parametro domain_mapping, ogni coppia dominio-endpoint può utilizzare un segreto diverso. Il segreto stesso deve essere specificato nel formato nome_utente@password. Sebbene la password possa contenere segni @, il primo @ funge da separatore da user_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 come BIGINT in Apache Arrow. Ad esempio, 0,756 con un fattore di scala pari a 100 viene arrotondato a 76.

  • Per definire un scaled_float in AWS Glue, devi selezionare il tipo di colonna array e 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_nanos a DATEMILLI, i nanosecondi vengono arrotondati al millisecondo più vicino. I valori validi per date e date_nanos includono, 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 binary OpenSearch è una rappresentazione in formato stringa di un valore binario codificato con Base64 e viene convertito in un VARCHAR.

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 nella documentazione di Elasticsearch o Query DSL nella documentazione di OpenSearch.

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