Connettore Amazon Athena Redis OSS - Amazon Athena

Connettore Amazon Athena Redis OSS

Il connettore Amazon Athena Redis OSS consente ad Amazon Athena di comunicare con le istanze Redis OSS in modo da poter eseguire query sui dati Redis OSS con SQL. È possibile utilizzare il AWS Glue Data Catalog per mappare le coppie chiave-valore Redis OSS in tabelle virtuali.

A differenza dei tradizionali archivi di dati relazionali, Redis OSS non ha il concetto di tabella o colonna. Al contrario, Redis OSS offre modelli di accesso chiave-valore in cui la chiave è essenzialmente una string e il valore è una string, un z-set oppure una hmap.

Puoi utilizzare AWS Glue Data Catalog per creare schemi e configurare tabelle virtuali. Le proprietà speciali della tabella indicano al connettore Redis OSS per Athena come mappare le chiavi e i valori di Redis OSS in una tabella. Per ulteriori informazioni, consultare Configurazione di database e tabelle in AWS Glue riportata di seguito in questo documento.

Questo connettore non utilizza connessioni Glue per centralizzare le proprietà di configurazione in Glue. La configurazione della connessione viene effettuata tramite Lambda.

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.

Il connettore Redis OSS di Amazon Athena supporta Amazon MemoryDB e Amazon ElastiCache (Redis OSS).

Prerequisiti

Parametri

Utilizzare i parametri illustrati in questa sezione per configurare il connettore Redis.

  • 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.

  • glue_catalog: (facoltativo) utilizza questa opzione per specificare un catalogo AWS Glue multi-account. Per impostazione predefinita, il connettore tenta di ottenere i metadati dal proprio account AWS Glue.

Configurazione di database e tabelle in AWS Glue

Per abilitare una tabella AWS Glue da utilizzare con Redis OSS, è possibile impostare per la tabella le seguenti proprietà delle tabelle: redis-endpoint, redis-value-type e redis-keys-zset oppure redis-key-prefix.

Inoltre, qualsiasi database AWS Glue che contiene tabelle Redis OSS deve avere un redis-db-flag nella proprietà URI del database. Per impostare la proprietà URI redis-db-flag, utilizza la console AWS Glue per modificare il database.

L'elenco seguente descrive le proprietà delle tabelle.

  • redis-endpoint: (obbligatorio) il valore hostname:port:password del server Redis OSS che contiene i dati per questa tabella (ad esempio, athena-federation-demo.cache.amazonaws.com:6379). In alternativa, è possibile archiviare l'endpoint, o parte dell'endpoint, in Gestione dei segreti AWS utilizzando ${Secret_Name} (nome del segreto) come valore della proprietà della tabella.

Nota

Per utilizzare la funzione Athena Federated Query con Gestione dei segreti AWS, il VPC collegato alla funzione Lambda deve disporre dell'accesso a Internet o di un endpoint VPC per connettersi a Secrets Manager.

  • redis-keys-zset: (obbligatorio se non viene utilizzato redis-key-prefix) un elenco separato da virgole di chiavi il cui valore è un zset (ad esempio, active-orders,pending-orders). Ciascuno dei valori del set viene considerato come una chiave facente parte della tabella. È necessario impostare la proprietà redis-keys-zset o la proprietà redis-key-prefix.

  • redis-key-prefix: (obbligatorio se non viene utilizzato redis-keys-zset) un elenco separato da virgole di prefissi della chiave per scansionare i valori nella tabella (ad esempio, accounts-*,acct-). È necessario impostare la proprietà redis-key-prefix o la proprietà redis-keys-zset.

  • redis-value-type: (obbligatorio) definisce in che modo i valori per le chiavi sono definiti da redis-key-prefix o redis-keys-zset sono mappati alla tua tabella. Un valore letterale è associato a una singola colonna. Anche un zset è associato a una singola colonna, ma ogni chiave può archiviare più righe. Un hash consente a ciascuna chiave di costituire una riga con più colonne (ad esempio, hash, letterale o zset).

  • redis-ssl-flag: (facoltativo) quando è True, crea una connessione Redis che utilizza SSL/TLS. Il valore predefinito è False.

  • redis-cluster-flag: (facoltativo) quando è True, abilita il supporto per le istanze Redis in cluster. Il valore predefinito è False.

  • redis-db-number: (facoltativo) si applica solo alle istanze autonome e non in cluster. Imposta questo numero (ad esempio 1, 2 o 3) per leggere da un database Redis non predefinito. L'impostazione predefinita è il database logico Redis 0. Questo numero non si riferisce a un database di Athena o AWS Glue, ma a un database logico Redis. Per ulteriori informazioni, consulta la sezione SELECT index (Indice SELECT) nella documentazione di Redis.

Tipi di dati

Il connettore Redis OSS supporta i seguenti tipi di dati. I flussi Redis OSS non sono supportati.

Tutti i valori di Redis OSS vengono recuperati come tipo di dati string. Quindi vengono convertiti in uno dei seguenti tipi di dati Apache Arrow in base a come sono state definite le tabelle nel AWS Glue Data Catalog.

AWS GlueTipo di dati Tipo di dati Apache Arrow
int INT
string VARCHAR
bigint BIGINT
double FLOAT8
float FLOAT4
smallint SMALLINT
tinyint TINYINT
booleano BIT
binary VARBINARY

Autorizzazioni richieste

Consulta la sezione Policies del file athena-redis.yaml per i dettagli completi delle policy IAM richieste da questo connettore. L'elenco che segue riporta un riepilogo delle autorizzazioni richieste.

  • Accesso in scrittura ad Amazon S3: per trasferire i risultati di query di grandi dimensioni, il connettore richiede l'accesso in scrittura a una posizione in Amazon S3.

  • Athena GetQueryExecution: il connettore utilizza questa autorizzazione per interrompersi rapidamente con esito negativo quando la query a monte di Athena è terminata.

  • AWS Glue Data Catalog: il connettore Redis richiede l'accesso in sola lettura a AWS Glue Data Catalog per ottenere informazioni sullo schema.

  • CloudWatch Logs: il connettore richiede l'accesso a CloudWatch Logs per l'archiviazione dei registri.

  • Accesso in lettura a Gestione dei segreti AWS: se scegli di archiviare i dettagli dell'endpoint Redis in Secrets Manager, devi concedere al connettore l'accesso a tali segreti.

  • Accesso VPC: il connettore richiede la capacità di collegare e scollegare le interfacce al VPC in modo che possa connettersi ad esso e comunicare con le istanze Redis.

Prestazioni

Il connettore Redis OSS per Athena tenta di eseguire in parallelo le query sull'istanza Redis OSS in base al tipo di tabella che hai definito (ad esempio, chiavi zset chiavi di prefisso).

Il connettore Athena Redis esegue il pushdown del predicato per ridurre la quantità di dati scansionati dalla query. Tuttavia, le query contenenti un predicato sulla chiave primaria comportano un errore di timeout. Le clausole LIMIT riducono la quantità di dati scansionati, ma se non viene fornito un predicato, le query SELECT con una clausola LIMIT eseguiranno la scansione di almeno 16 MB di dati. Il connettore Redis è resiliente alla limitazione della larghezza di banda della rete dovuta alla simultaneità.

Query passthrough

Il connettore Redis supporta le query passthrough. È possibile utilizzare questa funzionalità per eseguire query che utilizzano lo script Lua sui database Redis.

Per creare query passthrough con Redis, utilizzare la seguente sintassi:

SELECT * FROM TABLE( system.script( script => 'return redis.[call|pcall](query_script)', keys => '[key_pattern]', argv => '[script_arguments]' ))

L'esempio seguente esegue uno script Lua per ottenere il valore in chiave l:a.

SELECT * FROM TABLE( system.script( script => 'return redis.call("GET", KEYS[1])', keys => '[l:a]', argv => '[]' ))

Informazioni sulla licenza

Il progetto del connettore Redis per Amazon Athena è concesso in licenza ai sensi della Licenza Apache-2.0.

Risorse aggiuntive

Per ulteriori informazioni su questo connettore, visita il sito corrispondente su GitHub.com.