Connettore Amazon Athena HBase
Il connettore HBase di Amazon Athena consente ad Amazon Athena di comunicare con le istanze Apache HBase in modo da poter eseguire query sui dati HBase con SQL.
A differenza dei tradizionali archivi di dati relazionali, le raccolte HBase non hanno uno schema prestabilito. HBase non dispone di un archivio dei metadati. Ogni voce in una raccolta HBase può avere campi e tipi di dati diversi.
Il connettore HBase supporta due meccanismi per la generazione di informazioni sullo schema della tabella: inferenza dello schema di base e metadati AWS Glue Data Catalog.
L'inferenza dello schema è l'impostazione predefinita. Questa opzione esegue la scansione di un numero limitato di documenti della raccolta, forma un'unione di tutti i campi e forza i campi che hanno tipi di dati non sovrapposti. Questa opzione funziona bene per le raccolte che hanno voci per lo più uniformi.
Per le raccolte con una maggiore varietà di tipi di dati, il connettore supporta il recupero dei metadati da AWS Glue Data Catalog. Se il connettore rileva un database e una tabella AWS Glue che corrispondono ai nomi dello spazio del nome e della raccolta HBase, ottiene le informazioni sullo schema dalla tabella AWS Glue corrispondente. Quando crei la tabella AWS Glue, ti consigliamo di renderla un superset di tutti i campi a cui potresti voler accedere dalla tua raccolta HBase.
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.
Questo connettore può essere registrato con un Catalogo Dati Glue come catalogo federato. Supporta i 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.
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.
Parametri
Utilizzare i parametri illustrati in questa sezione per configurare il connettore HBase.
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 ai connettori di origine dati Athena creati prima del 3 dicembre 2024. Questi possono differire dalle proprietà di connessione AWS Glue corrispondenti. Dal 3 dicembre 2024, utilizzare i parametri seguenti solo quando si implementa manualmente una versione precedente di un connettore di origine dati Athena.
Si consiglia di configurare un connettore HBase utilizzando un oggetto di connessioni Glue. Per fare ciò, imposta la variabile di ambiente glue_connection del connettore HBase Lambda sul nome della connessione Glue da utilizzare.
Proprietà delle connessioni Glue
Utilizzare il seguente comando per ottenere lo schema di un oggetto di connessione Glue. Questo schema contiene tutti i parametri che è possibile usare per controllare la connessione.
aws glue describe-connection-type --connection-type HBASE
Proprietà dell'ambiente Lambda
-
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 HBase creato utilizzando le connessioni Glue non supporta l'uso di un gestore multiplexing.
-
Il connettore HBase 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.
-
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.
-
default_hbase: se presente, specifica una stringa di connessione HBase da utilizzare quando non esiste alcuna variabile di ambiente specifica del catalogo.
-
enable_case_insensitive_match: (Facoltativo) Quando
true, esegue ricerche senza distinzione tra maiuscole e minuscole sui nomi delle tabelle in HBase. Il valore predefinito èfalse. Usalo se la tua query contiene nomi di tabella in maiuscolo.
Specifica delle stringhe di connessione
Puoi specificare una o più proprietà che definiscono i dettagli di connessione HBase per le istanze HBase utilizzate con il connettore. A tale scopo, imposta una variabile di ambiente Lambda che corrisponda al nome del catalogo che desideri utilizzare in Athena. Ad esempio, supponiamo di voler utilizzare le seguenti query per interrogare due diverse istanze HBase da Athena:
SELECT * FROM "hbase_instance_1".database.table
SELECT * FROM "hbase_instance_2".database.table
Prima di poter utilizzare queste due istruzioni SQL, devi aggiungere due variabili di ambiente alla funzione Lambda: hbase_instance_1 e hbase_instance_2. Il valore di ciascuno deve essere una stringa di connessione HBase nel formato seguente:
master_hostname:hbase_port:zookeeper_port
Utilizzo dei segreti
Facoltativamente, puoi utilizzare Gestione dei segreti AWS per una parte o per l'intero valore dei dettagli della stringa di connessione. Per utilizzare la funzione Athena Federated Query con Secrets Manager, il VPC collegato alla funzione Lambda dovrebbe disporre dell'accesso a Internet
Se si utilizza la sintassi ${my_secret} per inserire il nome di un segreto di Secrets Manager nella stringa di connessione, il connettore sostituisce il nome del segreto con i valori del nome utente e della password di Secrets Manager.
Ad esempio, supponiamo di impostare la variabile di ambiente Lambda per hbase_instance_1 sul seguente valore:
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
L'SDK Athena Query Federation tenta automaticamente di recuperare un segreto denominato hbase_instance_1_creds da Secrets Manager e inietta quel valore al posto di ${hbase_instance_1_creds}. Qualsiasi parte della stringa di connessione racchiusa entro la combinazione di caratteri ${
} viene interpretata come un segreto da Secrets Manager. Se specifichi un nome del segreto che il connettore non riesce a trovare in Secrets Manager, il connettore non sostituisce il testo.
Configurazione di database e tabelle in AWS Glue
L'inferenza dello schema integrata del connettore supporta solo i valori serializzati in HBase come stringhe (ad esempio, String.valueOf(int)). Poiché la capacità integrata di inferenza dello schema del connettore è limitata, in alternativa potresti voler usare AWS Glue per i metadati. Per abilitare una tabella AWS Glue da utilizzare con HBase, devi disporre di un database e di una tabella AWS Glue i cui nomi corrispondano allo spazio del nome e alla tabella HBase per i quali desideri fornire metadati supplementari. L'uso delle convenzioni di denominazione delle famiglie di colonne HBase è facoltativo ma non obbligatorio.
Utilizzo di una tabella AWS Glue per i metadati supplementari
-
Quando modifichi la tabella e il database nella console AWS Glue, aggiungi le seguenti proprietà della tabella:
hbase-metadata-flag: questa proprietà indica al connettore HBase che il connettore può utilizzare la tabella per i metadati aggiuntivi. Puoi fornire qualsiasi valore per
hbase-metadata-flag, purché la proprietàhbase-metadata-flagsia presente nell'elenco delle proprietà della tabella.-
hbase-native-storage-flag: utilizza questo flag per attivare o disattivare le due modalità di serializzazione dei valori supportate dal connettore. Per impostazione predefinita, quando questo campo non è presente, il connettore presuppone che tutti i valori siano archiviati in HBase come stringhe. Pertanto, tenterà di analizzare tipi di dati come
INT,BIGINTeDOUBLEda HBase come stringhe. Se questo campo è impostato con un valore nella tabella in AWS Glue, il connettore passa alla modalità di archiviazione "nativa" e tenta di leggereINT,BIGINT,BITeDOUBLEcome byte utilizzando le seguenti funzioni:ByteBuffer.wrap(value).getInt() ByteBuffer.wrap(value).getLong() ByteBuffer.wrap(value).get() ByteBuffer.wrap(value).getDouble()
-
Assicurati di utilizzare i tipi di dati appropriati per AWS Glue come elencato in questo documento.
Modellazione delle famiglie di colonne
Il connettore HBase per Athena supporta due modi per modellare le famiglie di colonne HBase: denominazioni completamente qualificate (appiattite) come family:column, oppure l'utilizzo degli oggetti STRUCT.
Nel modello STRUCT, il nome del campo STRUCT dovrebbe corrispondere alla famiglia della colonna, mentre i figli di STRUCT dovrebbero corrispondere ai nomi delle colonne della famiglia. Tuttavia, poiché le letture colonnari e il pushdown dei predicati non sono ancora completamente supportati per tipi complessi come STRUCT, l'utilizzo di STRUCT al momento non è consigliato.
L'immagine seguente mostra una tabella configurata in AWS Glue che utilizza una combinazione dei due approcci.
Supporto dei tipi di dati
Il connettore recupera tutti i valori HBase come tipo di byte di base. Quindi, in base a come hai definito le tue tabelle in AWS Glue Data Catalog, mappa i valori in uno dei tipi di dati Apache Arrow nella tabella seguente.
| AWS GlueTipo di dati | Tipo di dati Apache Arrow |
|---|---|
| int | INT |
| bigint | BIGINT |
| double | FLOAT8 |
| float | FLOAT4 |
| booleano | BIT |
| binary | VARBINARY |
| string | VARCHAR |
Nota
Se non utilizzi AWS Glue per integrare i metadati, l'inferenza dello schema del connettore utilizza solo i tipi di dati BIGINT, FLOAT8 e VARCHAR.
Autorizzazioni richieste
Consulta la sezione Policies del file athena-hbase.yaml
-
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 HBase 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 HBase 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 HBase.
Prestazioni
Il connettore HBase per Athena tenta di eseguire in parallelo le query sull'istanza HBase leggendo ogni server regionale in parallelo. Il connettore Athena HBase esegue il pushdown del predicato per ridurre la quantità di dati scansionati dalla query.
La funzione Lambda esegue inoltre il pushdown delle proiezioni per ridurre la quantità di dati scansionati dalla query. Tuttavia, la selezione di un sottoinsieme di colonne a volte comporta un runtime delle query più lungo. 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.
HBase è soggetto a errori di query e tempi di esecuzione delle query variabili. Potrebbe essere necessario ritentare più volte affinché le query abbiano esito positivo. Il connettore HBase è resiliente alla limitazione della larghezza di banda della rete dovuta alla simultaneità.
Query passthrough
Il connettore HBase supporta le query passthrough ed è basato su NoSQL. Per informazioni sull'interrogazione di Apache HBase utilizzando il filtro, consulta Filter language
Per utilizzare le query passthrough con HBase, usare la seguente sintassi:
SELECT * FROM TABLE( system.query( database => 'database_name', collection => 'collection_name', filter => '{query_syntax}' ))
Nell'esempio seguente, la query passthrough HBase filtra i dipendenti di 24 o 30 anni all'interno della raccolta employee del database default.
SELECT * FROM TABLE( system.query( DATABASE => 'default', COLLECTION => 'employee', FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' || ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')' ))
Informazioni sulla licenza
Il progetto del connettore HBase 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