Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo delle estensioni Aurora PostgreSQL con Babelfish
Aurora PostgreSQL fornisce estensioni per lavorare con altri servizi. AWS Si tratta di estensioni opzionali che supportano diversi casi d'uso, ad esempio l'utilizzo di Amazon S3 con il cluster database per l'importazione o l'esportazione di dati.
Per importare i dati da un bucket Amazon S3 nel cluster database Babelfish, è necessario configurare l'estensione Aurora PostgreSQL
aws_s3
. Questa estensione consente anche di esportare i dati dal cluster database di Aurora PostgreSQL in un bucket Simple Storage Service (Amazon S3).AWS Lambda è un servizio di elaborazione che consente di eseguire codice senza fornire o gestire server. È possibile utilizzare le funzioni Lambda per elaborare le notifiche di eventi da un'istanza database. Per ulteriori informazioni su Lambda, consulta Che cos'è AWS Lambda? nella Guida per gli sviluppatori di AWS Lambda . Per richiamare le funzioni Lambda dal cluster database Babelfish, è necessario configurare l'estensione Aurora PostgreSQL
aws_lambda
.
Per configurare queste estensioni per il cluster Babelfish, devi prima concedere l'autorizzazione all'utente Babelfish interno per caricare le estensioni. Dopo aver concesso l'autorizzazione, è possibile caricare le estensioni Aurora PostgreSQL.
Abilitazione delle estensioni Aurora PostgreSQL nel cluster database Babelfish
Per poter caricare le estensioni aws_s3
o aws_lambda
, concedere i privilegi necessari al cluster database Babelfish.
Nella procedura che segue viene utilizzato lo strumento a riga di comando psql
di PostgreSQL per connettersi al cluster database. Per ulteriori informazioni, consulta Usare psql per connettersi al cluster di database. È possibile utilizzare anche pgAdmin. Per informazioni dettagliate, vedi Uso di pgAdmin per connettersi al cluster di database.
Questa procedura carica aws_s3
e aws_lambda
, uno dopo l'altro. Se si desidera utilizzare solo una di queste estensioni, non è necessario caricarle entrambe. L'estensione aws_commons
è richiesta da ciascuno e viene caricata per impostazione predefinita come mostrato nell'output.
Per configurare il cluster database Babelfish con privilegi per le estensioni Aurora PostgreSQL
Connettiti al cluster database Babelfish. Utilizza il nome per l'utente "master" (-U) specificato al momento della creazione del cluster database Babelfish. Il valore predefinito (
postgres
) viene visualizzato negli esempi.PerLinux, omacOS: Unix
psql -h
your-Babelfish.cluster.444455556666-us-east-1.rds.amazonaws.com
\ -U postgres \ -d babelfish_db \ -p 5432Per Windows:
psql -h
your-Babelfish.cluster.444455556666-us-east-1.rds.amazonaws.com
^ -U postgres ^ -d babelfish_db ^ -p 5432Il comando risponde con un prompt per inserire la password per il nome utente (-U).
Password:
Inserisci la password del nome utente (-U) per il cluster database. Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente.
psql (13.4) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help.
postgres=>
Concedi i privilegi all'utente Babelfish interno per creare e caricare le estensioni.
babelfish_db=>
GRANT rds_superuser TO master_dbo;
GRANT ROLE
Crea e carica l'estensione
aws_s3
. L'estensioneaws_commons
è obbligatoria e viene installata automaticamente quando viene installatoaws_s3
.babelfish_db=>
create extension aws_s3 cascade;
NOTICE: installing required extension "aws_commons" CREATE EXTENSION
Crea e carica l'estensione
aws_lambda
.babelfish_db=>
create extension aws_lambda cascade;
CREATE EXTENSION
babelfish_db=>
Utilizzo di Babelfish con Simple Storage Service (Amazon S3)
Se non hai già un bucket Simple Storage Service (Amazon S3) da utilizzare con il cluster database Babelfish, puoi creane uno. Fornisci l'accesso per qualsiasi bucket Simple Storage Service (Amazon S3) che desideri utilizzare.
Prima di provare a importare o esportare dati utilizzando un bucket Simple Storage Service (Amazon S3), completa i seguenti passaggi una tantum.
Per configurare l'accesso per la tua istanza database Babelfish al bucket Simple Storage Service (Amazon S3)
-
Se necessario, crea un bucket Simple Storage Service (Amazon S3) per la tua istanza Babelfish. Per farlo, segui le istruzioni riportate in Create a bucket (Creazione di un bucket) nella Guida per l'utente di Amazon Simple Storage Service.
Carica i file nel tuo bucket Simple Storage Service (Amazon S3). A tale scopo, attieniti alla procedura descritta in Add an object to a bucket (Aggiunta di un oggetto a un bucket) nella Guida per l'utente di Amazon Simple Storage Service.
-
Imposta le autorizzazioni come necessario:
-
Per importare dati da Amazon S3, il cluster database Babelfish richiede l'autorizzazione per accedere al bucket. Ti consigliamo di utilizzare un ruolo AWS Identity and Access Management (IAM) e di associare una policy IAM a quel ruolo per il tuo cluster. A tale scopo, segui la procedura in Utilizzo di un IAM ruolo per accedere a un bucket Amazon S3.
-
Per esportare i dati dal cluster database Babelfish, è necessario concedere al cluster l'accesso al bucket Amazon S3. Come per l'importazione, si consiglia di utilizzare un ruolo e una policy IAM. A tale scopo, segui la procedura in Configurazione dell'accesso a un bucket Simple Storage Service (Amazon S3).
-
Ora puoi utilizzare Amazon S3 con l'estensione aws_s3
con il cluster database Babelfish.
Per importare dati da Simple Storage Service (Amazon S3) in Babelfish ed esportare dati Babelfish in Simple Storage Service (Amazon S3)
Utilizzo dell'estensione
aws_s3
con il cluster database Babelfish.In questa situazione, assicurati di fare riferimento alle tabelle così come sono presenti nel contesto di PostgreSQL. Vale a dire, se vuoi importare in una tabella Babelfish denominata
[database].[schema].[tableA]
, fai riferimento a quella tabella comedatabase_schema_tableA
nella funzioneaws_s3
:Per un esempio di utilizzo di una funzione
aws_s3
per importare dati, vedi .Per esempi di utilizzo di funzioni
aws_s3
per esportare dati, vedi Esportazione dei dati della query utilizzando la funzione aws_s3.query_export_to_s3.
Assicurati di fare riferimento alle tabelle Babelfish usando la denominazione PostgreSQL quando utilizzi l'estensione
aws_s3
e Simple Storage Service (Amazon S3), come illustrato nella tabella seguente.
Tabella Babelfish |
Tabella Aurora PostgreSQL |
---|---|
|
|
Per ulteriori informazioni sull'uso di Amazon S3 con Aurora PostgreSQL, vedi e Esportazione di dati da un .
Usare Babelfish con AWS Lambda
Dopo aver caricato l'estensione aws_lambda
nel cluster database Babelfish ma prima di richiamare le funzioni Lambda, puoi fornire l'accesso a Lambda al cluster database seguendo questa procedura.
Per configurare l'accesso per il cluster database Babelfish per il funzionamento con Lambda
Questa procedura utilizza AWS CLI per creare la politica e il ruolo IAM e associarli al cluster Babelfish DB.
Crea una policy IAM che consente l'accesso a Lambda dal cluster database Babelfish.
aws iam create-policy --policy-name
rds-lambda-policy
--policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToExampleFunction", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:
" } ] }'aws-region
:444455556666:function:my-functionCrea un ruolo IAM che la policy può assumere in fase di esecuzione.
aws iam create-role --role-name
rds-lambda-role
--assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'Collegare la policy al ruolo.
aws iam attach-role-policy \ --policy-arn arn:aws:iam::
444455556666
:policy/rds-lambda-policy
\ --role-namerds-lambda-role
--regionaws-region
Associa il ruolo al tuo cluster database Babelfish
aws rds add-role-to-db-cluster \ --db-cluster-identifier
my-cluster-name
\ --feature-name Lambda \ --role-arn arn:aws:iam::444455556666:role/rds-lambda-role
\ --regionaws-region
Dopo aver completato queste attività, è possibile richiamare le funzioni Lambda. Per ulteriori informazioni ed esempi di configurazione AWS Lambda per il cluster Aurora PostgreSQL DB con, consulta. AWS LambdaAWS Lambda
Per richiamare una funzione Lambda dal cluster database Babelfish
AWS Lambda supporta funzioni scritte in Java, Node.js, Python, Ruby e altri linguaggi. Se la funzione restituisce un testo quando viene richiamata, è possibile richiamarla dal cluster database Babelfish. L'esempio seguente è una funzione python segnaposto che restituisce un saluto.
lambda_function.py import json def lambda_handler(event, context): #TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!')
Attualmente, Babelfish non supporta JSON. Se la funzione restituisce JSON, si utilizza un wrapper per gestire il JSON. Ad esempio, diciamo che la funzione lambda_function.py
mostrata in precedenza è memorizzata in Lambda come my-function
.
Collegati al cluster database Babelfish utilizzando il client
psql
(o il client pgAdmin). Per ulteriori informazioni, consulta Usare psql per connettersi al cluster di database.Crea il wrapper. Questo esempio utilizza il linguaggio procedurale di PostgreSQL per SQL,
PL/pgSQL
. Per ulteriori informazioni, consulta PL/pgSQL–SQL Procedural Language(PL/pgSQL - Linguaggio procedurale SQL). create or replace function master_dbo.lambda_wrapper() returns text language plpgsql as $$ declare r_status_code integer; r_payload text; begin SELECT payload INTO r_payload FROM aws_lambda.invoke( aws_commons.create_lambda_function_arn('my-function', 'us-east-1') ,'{"body": "Hello from Postgres!"}'::json ); return r_payload ; end; $$;
La funzione ora può essere eseguita dalla porta TDS Babelfish (1433) o dalla porta PostgreSQL (5433).
Per richiamare (chiamare) questa funzione dalla porta PostgreSQL:
SELECT * from aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function', 'us-east-1'), '{"body": "Hello from Postgres!"}'::json );
L'output è simile a quello riportato di seguito:
status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)
Per richiamare (chiamare) questa funzione dalla porta TDS, connettiti alla porta utilizzando il client della riga di comando
sqlcmd
di SQL Server. Per informazioni dettagliate, vedi Utilizzo di un client SQL Server per la connessione al cluster database. Una volta connesso, esegui quanto segue:1>
select lambda_wrapper();
2>
go
Il comando restituisce un output simile al seguente:
{"statusCode": 200, "body": "\"Hello from Lambda!\""}
Per ulteriori informazioni sull'uso di Lambda con Aurora PostgreSQL, consulta Invocare un AWS Lambda. Per ulteriori informazioni sull'utilizzo delle funzioni Lambda, consulta Nozioni di base su Lambda nella Guida per gli sviluppatori di AWS Lambda .
Utilizzo di pg_stat_statements in Babelfish
Babelfish per Aurora PostgreSQL supporta l'estensione pg_stat_statements
dalla versione 3.3.0. Per maggiori informazioni, consulta pg_stat_statements
Per informazioni sulla versione di questa estensione supportata da Aurora PostgreSQL, consulta Extension versions.
Creazione dell'estensione pg_stat_statements
Per attivare pg_stat_statements
, è necessario attivare il calcolo dell'identificatore di query. Questa operazione viene eseguita automaticamente se compute_query_id
è impostato su on
o auto
nel gruppo di parametri. Il valore predefinito del parametro compute_query_id
è auto
. È inoltre necessario creare questa estensione per attivare questa funzionalità. Utilizza il comando seguente per installare l'estensione dall'endpoint T-SQL:
1>
EXEC sp_execute_postgresql 'CREATE EXTENSION pg_stat_statements WITH SCHEMA sys';
È possibile accedere alle statistiche delle query utilizzando la seguente query:
postgres=>
select * from pg_stat_statements;
Nota
Se durante l'installazione non fornisci il nome dello schema per l'estensione, per impostazione predefinita l'estensione verrà creata in uno schema pubblico. Per accedervi, è necessario scrivere il qualificatore dello schema tra parentesi quadre, come mostrato di seguito:
postgres=>
select * from [public].pg_stat_statements;
Puoi anche creare l'estensione dall'endpoint PSQL.
Autorizzazione dell'estensione
Per impostazione predefinita, è possibile visualizzare le statistiche per le query eseguite all'interno del database T-SQL senza bisogno di autorizzazioni.
Per accedere alle statistiche delle query create da altri, è necessario disporre del ruolo PostgreSQL pg_read_all_stats
. Segui i passaggi indicati di seguito per costruire il comando GRANT pg_read_all_stats.
In T-SQL, usa la seguente query che restituisce il nome del ruolo PG interno.
SELECT rolname FROM pg_roles WHERE oid = USER_ID();
Connettiti al database PostgreSQL di Babelfish per Aurora con il privilegio rds_superuser e usa il seguente comando:
GRANT pg_read_all_stats TO <rolname_from_above_query>
Esempio
Dall'endpoint T-SQL:
1>
SELECT rolname FROM pg_roles WHERE oid = USER_ID();2>
go
rolname
-------
master_dbo
(1 rows affected)
Dall'endpoint PSQL:
babelfish_db=# grant pg_read_all_stats to master_dbo;
GRANT ROLE
Puoi accedere alle statistiche delle query utilizzando la vista pg_stat_statements:
1>
create table t1(cola int);2>
go1>
insert into t1 values (1),(2),(3);2>
go
(3 rows affected)
1>
select userid, dbid, queryid, query from pg_stat_statements;2>
go
userid dbid queryid query
------ ---- ------- -----
37503 34582 6487973085327558478 select * from t1
37503 34582 6284378402749466286 SET QUOTED_IDENTIFIER OFF
37503 34582 2864302298511657420 insert into t1 values ($1),($2),($3)
10 34582 NULL <insufficient privilege>
37503 34582 5615368793313871642 SET TEXTSIZE 4096
37503 34582 639400815330803392 create table t1(cola int)
(6 rows affected)
Reimpostazione delle statistiche delle query
Puoi usare pg_stat_statements_reset()
per eseguire il ripristino delle statistiche raccolte finora da pg_stat_statements. Per maggiori informazioni, consulta pg_stat_statementsrds_superuser
, usa il comando seguente:
SELECT pg_stat_statements_reset();
Limitazioni
Attualmente,
pg_stat_statements()
non è supportato tramite l'endpoint T-SQL. La vistapg_stat_statements
è il metodo consigliato per raccogliere le statistiche.Alcune query potrebbero essere riscritte dal parser T-SQL implementato dal motore di Aurora PostgreSQL, in tal caso la vista
pg_stat_statements
mostrerà la query riscritta e non la query originale.Esempio
select next value for [dbo].[newCounter];
La query precedente viene riscritta come segue nella vista pg_stat_statements.
select nextval($1);
In base al flusso di esecuzione delle istruzioni, alcune query potrebbero non essere tracciate da pg_stat_statements e non essere visibili nella vista. Ciò include le seguenti istruzioni:
use dbname
,goto
,print
,raise error
,set
,throw
,declare cursor
.Per le istruzioni CREATE LOGIN e ALTER LOGIN, query e queryid non verranno visualizzate. Verrà visualizzato un avviso di privilegi insufficienti.
La vista
pg_stat_statements
contiene sempre le due voci seguenti, poiché vengono eseguite internamente dal clientsqlcmd
.SET QUOTED_IDENTIFIER OFF
SET TEXTSIZE 4096
Usare pgvector in Babelfish
pgvector, un'estensione open source, consente di cercare dati simili direttamente all'interno del database Postgres. Babelfish ora supporta questa estensione a partire dalle versioni 15.6 e 16.2. Per ulteriori informazioni, pgvector
Prerequisiti
Per abilitare la funzionalità pgvector, installa l'estensione nello schema sys utilizzando uno dei seguenti metodi:
-
Esegui il seguente comando nel client sqlcmd:
exec sys.sp_execute_postgresql 'CREATE EXTENSION vector WITH SCHEMA sys';
Connettiti
babelfish_db
ed esegui il seguente comando nel client psql:CREATE EXTENSION vector WITH SCHEMA sys;
Nota
Dopo aver installato l'estensione pgvector, il tipo di dati vettoriali sarà disponibile solo nelle nuove connessioni al database stabilite. Le connessioni esistenti non riconosceranno il nuovo tipo di dati.
Funzionalità supportate
Babelfish estende la funzionalità T-SQL per supportare quanto segue:
Archiviazione
Babelfish ora supporta la sintassi compatibile con i tipi di dati vettoriali, migliorando la compatibilità T-SQL. Per ulteriori informazioni sull'archiviazione dei dati con pgvector, vedi Archiviazione.
Interrogazione
Babelfish espande il supporto delle espressioni T-SQL per includere operatori di somiglianza vettoriale. Tuttavia, per tutte le altre interrogazioni, è ancora richiesta la sintassi T-SQL standard.
Nota
T-SQL non supporta il tipo Array e i driver del database non dispongono di alcuna interfaccia per gestirli. Come soluzione alternativa, Babelfish utilizza stringhe di testo (varchar/nvarchar) per memorizzare dati vettoriali. Ad esempio, quando richiedi un valore vettoriale [1,2,3], Babelfish restituirà una stringa '[1,2,3]' come risposta. Puoi analizzare e dividere questa stringa a livello di applicazione secondo le tue esigenze.
Per ulteriori informazioni sull'interrogazione dei dati con pgvector, vedi Interrogazione.
Indicizzazione
T-SQL ora supporta la sintassi.
Create Index
USING INDEX_METHOD
È ora possibile definire l'operatore di ricerca per similarità da utilizzare su una colonna specifica durante la creazione di un indice.La grammatica viene inoltre estesa per supportare le operazioni di similarità vettoriale sulla colonna richiesta (Check column_name_list_with_order_for_vector grammar).
CREATE [UNIQUE] [clustered] [COLUMNSTORE] INDEX <index_name> ON <table_name> [USING vector_index_method] (<column_name_list_with_order_for_vector>) Where column_name_list_with_order_for_vector is: <column_name> [ASC | DESC] [VECTOR_COSINE_OPS | VECTOR_IP_OPS | VECTOR_L2_OPS] (COMMA simple_column_name [ASC | DESC] [VECTOR_COSINE_OPS | VECTOR_IP_OPS | VECTOR_L2_OPS])
Per ulteriori informazioni sull'indicizzazione dei dati
con pgvector, vedi Indexing. Prestazioni
Utilizzare per eseguire il debug dei piani di interrogazione dall'
SET BABELFISH_STATISTICS PROFILE ON
endpoint T-SQL.Aumenta
max_parallel_workers_get_gather
utilizzando laset_config
funzione supportata in T-SQL.Utilizzare
IVFFlat
per ricerche approssimative. Per ulteriori informazioni, vedere IVFFlat.
Per migliorare le prestazioni con pgvector, vedi Prestazioni.
Limitazioni
Babelfish non supporta la ricerca a testo completo per la ricerca ibrida. Per ulteriori informazioni, consulta Hybrid
Search. Babelfish attualmente non supporta la funzionalità di reindicizzazione. Tuttavia, puoi comunque utilizzare l'endpoint PostgreSQL per reindicizzare. Per ulteriori informazioni, consulta Aspirazione.
Utilizzo dell'apprendimento automatico di Amazon Aurora con Babelfish
Puoi estendere le funzionalità del tuo cluster Babelfish for Aurora PostgreSQL DB integrandolo con l'apprendimento automatico di Amazon Aurora. Questa perfetta integrazione ti consente di accedere a una gamma di potenti servizi come Amazon Comprehend o Amazon o SageMaker Amazon Bedrock, ciascuno personalizzato per soddisfare esigenze di machine learning distinte.
Come utente Babelfish, puoi utilizzare le conoscenze esistenti della sintassi e della semantica T-SQL quando lavori con l'apprendimento automatico Aurora. Segui le istruzioni fornite nella AWS documentazione di Aurora PostgreSQL. Per ulteriori informazioni, consulta Utilizzo dell'apprendimento automatico di Amazon Aurora con Aurora Postgre SQL.
Prerequisiti
Prima di provare a configurare il cluster Babelfish for Aurora PostgreSQL DB per utilizzare l'apprendimento automatico di Aurora, è necessario comprendere i relativi requisiti e prerequisiti. Per ulteriori informazioni, consulta Requisiti per l'utilizzo dell'apprendimento automatico di Aurora con Aurora Postgre SQL.
Assicurati di installare l'
aws_ml
estensione utilizzando l'endpoint Postgres o la procedura store.sp_execute_postgresql
exec sys.sp_execute_postgresql 'Create Extension aws_ml'
Nota
Attualmente Babelfish non supporta le operazioni a cascata in Babelfish.
sp_execute_postgresql
Poichéaws_ml
si basa suaws_commons
, dovrai installarlo separatamente utilizzando l'endpoint Postgres.create extension aws_common;
Gestione della sintassi e della semantica T-SQL con le funzioni aws_ml
Gli esempi seguenti spiegano come la sintassi e la semantica T-SQL vengono applicate ai servizi Amazon ML:
Esempio : aws_bedrock.invoke_model — Una semplice query che utilizza le funzioni di Amazon Bedrock
aws_bedrock.invoke_model( model_id varchar, content_type text, accept_type text, model_input text) Returns Varchar(MAX)
L'esempio seguente mostra come richiamare un modello Anthropic Claude 2 per Bedrock utilizzando invoke_model.
SELECT aws_bedrock.invoke_model ( 'anthropic.claude-v2', -- model_id 'application/json', -- content_type 'application/json', -- accept_type '{"prompt": "\n\nHuman: You are a helpful assistant that answers questions directly and only using the information provided in the context below. \nDescribe the answerin detail.\n\nContext: %s \n\nQuestion: %s \n\nAssistant:","max_tokens_to_sample":4096,"temperature" :0.5,"top_k":250,"top_p":0.5,"stop_sequences":[]}' -- model_input );
Esempio : aws_comprehend.detect_sentiment — Una semplice query che utilizza le funzioni Amazon Comprehend
aws_comprehend.detect_sentiment( input_text varchar, language_code varchar, max_rows_per_batch int) Returns table (sentiment varchar, confidence real)
L'esempio seguente mostra come richiamare il servizio Amazon Comprehend.
select sentiment from aws_comprehend.detect_sentiment('This is great', 'en');
Esempio : aws_sagemaker.invoke_endpoint — Una semplice query che utilizza le funzioni di Amazon SageMaker
aws_sagemaker.invoke_endpoint( endpoint_name varchar, max_rows_per_batch int, VARIADIC model_input "any") -- Babelfish inherits PG's variadic parameter type Rerurns Varchar(MAX)
Poiché model_input è contrassegnato come VARIADIC e di tipo «any», gli utenti possono passare un elenco di qualsiasi lunghezza e qualsiasi tipo di dati alla funzione che fungerà da input (input) per il modello. L'esempio seguente mostra come richiamare il SageMaker servizio Amazon.
SELECT CAST (aws_sagemaker.invoke_endpoint( 'sagemaker_model_endpoint_name', NULL, arg1, arg2 -- model inputs are separate arguments ) AS INT) -- cast the output to INT
Per informazioni più dettagliate sull'uso del machine learning di Aurora con Aurora PostgreSQL, consulta. Utilizzo dell'apprendimento automatico di Amazon Aurora con Aurora Postgre SQL
Limitazioni
-
Sebbene Babelfish non consenta la creazione di array, può comunque gestire i dati che rappresentano gli array. Quando si utilizzano funzioni come quelle
aws_bedrock.invoke_model_get_embeddings
che restituiscono gli array, i risultati vengono forniti come una stringa contenente gli elementi dell'array.