Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog
CREATE DATABASE
Crea un nuovo database.
Per creare un database, devi essere un utente con privilegi avanzati o disporre del privilegio CREATEDB. Per creare un database associato a un’integrazione Zero-ETL, devi essere un utente con privilegi avanzati o disporre di entrambi i privilegi CREATEDB e CREATEUSER.
Non è possibile eseguire CREATE DATABASE all'interno di un blocco di transazione (BEGIN ... END). Per ulteriori informazioni sulle transazioni, consultare Livelli di isolamento in Amazon Redshift.
Sintassi
CREATE DATABASE database_name [ { [ FROM INTEGRATION '<integration_id>'[ DATABASE '<source_database>' ] [ SET ] [ ACCEPTINVCHARS [=] { TRUE | FALSE }] [ QUERY_ALL_STATES [=] { TRUE | FALSE }] [ REFRESH_INTERVAL <interval> ] [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ] [ HISTORY_MODE [=] {TRUE | FALSE} ] ] [ WITH ] [ OWNER [=] db_owner ] [ CONNECTION LIMIT { limit | UNLIMITED } ] [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ] [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ] } | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } } | { IAM_ROLE {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } } | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid } ]
Parametri
- database_name
-
Nome del nuovo database. Per ulteriori informazioni sui nomi validi, consultare Nomi e identificatori.
- FROM INTEGRATION '<integration_id>' [ DATABASE '<source_database>' ]
-
Specifica se creare il database utilizzando un identificatore di integrazione Zero-ETL. Puoi recuperare il formato
integration_iddalla vista di sistema SVV_INTEGRATION. Per le integrazioni Zero-ETL di Aurora PostgreSQL, devi inoltre specificare il nomesource_database, che può essere recuperato anche da SVV_INTEGRATION.Per vedere un esempio, consulta Crea database per ricevere i risultati delle integrazioni Zero-ETL. Per ulteriori informazioni sulla creazione di database con integrazioni Zero-ETL, consulta Creazione di database di destinazione in Amazon Redshift nella Guida alla gestione di Amazon Redshift.
- SET
-
Parola chiave facoltativa.
- ACCEPTINVCHARS [=] { TRUE | FALSE }
-
La clausola ACCEPTINVCHARS imposta se le tabelle di integrazione Zero-ETL continuano con l’importazione quando per il tipo di dati VARCHAR vengono rilevati caratteri non validi. Quando vengono rilevati caratteri non validi, il carattere non valido viene sostituito con un carattere
?predefinito. - QUERY_ALL_STATES [=] { TRUE | FALSE }
-
La clausola QUERY_ALL_STATES imposta se è possibile eseguire query sulle tabelle di integrazione Zero-ETL in tutti gli stati (
Synced,Failed,ResyncRequiredeResyncInitiated). Per impostazione predefinita puoi eseguire query su una tabella di integrazione Zero-ETL solo nello statoSynced. - REFRESH_INTERVAL <interval>
-
La clausola REFRESH_INTERVAL imposta l’intervallo di tempo approssimativo, in secondi, per aggiornare i dati dall’origine zero-ETL al database di destinazione. Il valore può essere impostato su un numero compreso tra 0 e 432.000 secondi (5 giorni) per le integrazioni Zero-ETL il cui tipo di origine è Aurora MySQL, Aurora PostgreSQL o RDS per MySQL. Per le integrazioni Zero-ETL di Amazon DynamoDB, il valore può essere impostato su un numero compreso tra 900 e 432.000 secondi (15 minuti – 5 giorni). L’impostazione predefinita di
intervalè zero (0) secondi per le integrazioni Zero-ETL il cui tipo di origine è Aurora MySQL, Aurora PostgreSQL o RDS per MySQL. Per le integrazioni Zero-ETL di Amazon DynamoDB, l’impostazione predefinita diintervalè 900 secondi (15 minuti). - TRUNCATECOLUMNS [=] {TRUE | FALSE}
-
La clausola TRUNCATECOLUMNS imposta se le tabelle di integrazione Zero-ETL continuano con l’importazione quando i valori per gli attributi della colonna VARCHAR o della colonna SUPER superano il limite. Quando è
TRUE, i valori vengono troncati per adattarsi alla colonna e i valori degli attributi JSON in overflow vengono troncati per adattarsi alla colonna SUPER. - HISTORY_MODE [=] {TRUE | FALSE}
-
Una clausola che specifica se Amazon Redshift imposterà la modalità cronologia per tutte le nuove tabelle nel database specificato. Questa opzione è applicabile solo ai database creati per l’integrazione Zero-ETL.
La clausola HISTORY_MODE può essere impostata su
TRUEoFALSE. Il valore predefinito èFALSE. Per informazioni su HISTORY_MODE, consulta Modalità cronologia nella Guida alla gestione di Amazon Redshift. - WITH
-
Parola chiave facoltativa.
- OWNER [=] db_owner
-
Specifica il nome utente del proprietario del database.
- CONNECTION LIMIT { limit | UNLIMITED }
-
Numero massimo di connessioni di database che gli utenti possono aprire contemporaneamente. Il limite non viene applicato per gli utente con privilegi avanzati. Utilizza la parola chiave UNLIMITED per consentire il numero massimo di connessioni simultanee. È possibile che venga applicato anche un limite al numero di connessioni per ciascun utente. Per ulteriori informazioni, consultare CREA UTENTE. Il valore predefinito è UNLIMITED. Per visualizzare le connessioni correnti, eseguire una query sulla vista di sistema STV_SESSIONS.
Nota
Se si applicano entrambi i limiti di connessione utente e database, deve essere disponibile uno slot di connessione inutilizzato che rientra in entrambi i limiti quando un utente tenta di connettersi.
- COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI }
-
Una clausola che specifica se la ricerca o il confronto di stringhe fa distinzione tra maiuscole e minuscole o meno. L’impostazione predefinita fa distinzione tra maiuscole e minuscole.
COLLATE non è supportato quando si crea un database da un’unità di condivisione dati.
CASE_SENSITIVE e CS sono intercambiabili e producono gli stessi risultati. Allo stesso modo CASE_INSENSITIVE e CI sono intercambiabili e producono gli stessi risultati.
- ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE }
-
Una clausola che specifica il livello di isolamento utilizzato quando vengono eseguite query su un database. Per ulteriori informazioni sui livello di isolamento, consulta Livelli di isolamento in Amazon Redshift.
-
Isolamento SNAPSHOT: fornisce un livello di isolamento con protezione contro i conflitti di aggiornamento ed eliminazione. Questa è l’impostazione predefinita per un database creato in un cluster con provisioning o un namespace serverless.
-
Isolamento SERIALIZABLE: fornisce la serializzabilità completa per le transazioni simultanee.
-
- FROM ARN '<ARN>'
-
ARN del database AWS Glue da utilizzare per creare il database.
- { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA }
-
Nota
Questo parametro è applicabile solo se il comando CREATE DATABASE utilizza anche il parametro FROM ARN.
Specifica se creare il database utilizzando uno schema per agevolare l'accesso agli oggetti da AWS Glue Data Catalog.
- IAM_ROLE { default | 'SESSION' | 'arn:aws:iam::
<Account AWS-id>:role/<role-name>' } -
Nota
Questo parametro è applicabile solo se il comando CREATE DATABASE utilizza anche il parametro FROM ARN.
Se specifichi un ruolo IAM associato al cluster quando esegui il comando CREATE DATABASE, Amazon Redshift utilizzerà le credenziali del ruolo quando esegui le query sul database.
Specificare la parola chiave
defaultsignifica utilizzare il ruolo IAM impostato come predefinito e associato al cluster.Utilizzare
'SESSION'se ci si connette al cluster Amazon Redshift utilizzando un'identità federata e si accede alle tabelle dallo schema esterno creato con questo comando. Per ulteriori informazioni, consulta l'argomento relativo a Utilizzo di un'identità federata per gestire l'accesso di Amazon Redshift alle risorse locali e alle tabelle esterne di Amazon Redshift Spectrum, che illustra come configurare l'identità federata.L'Amazon Resource Name (ARN) per un ruolo IAM utilizzato dal cluster per l'autenticazione e l'autorizzazione. Come minimo, il ruolo IAM deve disporre dell'autorizzazione per eseguire un'operazione LIST sul bucket Amazon S3 a cui accedere e un'operazione GET sugli oggetti Amazon S3 contenuti nel bucket. Per saperne di più sull'utilizzo di IAM_ROLE durante la creazione di un database utilizzando AWS Glue Data Catalog per le condivisioni di dati, vedere Lavorare con le condivisioni di dati gestite da Lake Formation come consumatore.
Quanto segue mostra la sintassi per la stringa di parametro IAM_ROLE per un singolo ARN.
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'È possibile concatenare i ruoli in modo che il cluster possa presumere un altro ruolo IAM, possibilmente appartenente a un altro account. Puoi concatenare fino a 10 ruoli. Per ulteriori informazioni, consulta Concatenazione di ruoli IAM per Amazon Redshift Spectrum.
Per collegare a questo ruolo IAM una policy di autorizzazioni IAM simile alla seguente.
Per la procedura per creare un ruolo IAM da utilizzare con la query federata, consultare Creazione di un segreto e di un ruolo IAM per l'utilizzo di query federate.
Nota
Non includere spazi nell'elenco dei ruoli concatenati.
Quanto segue mostra la sintassi per concatenare tre ruoli.
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
Sintassi per l'uso di CREATE DATABASE con una unità di condivisione dati
La sintassi seguente descrive il comando CREATE DATABASE utilizzato per creare database da una unità di condivisione dati per condividere dati all'interno del medesimo account AWS.
CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid
La sintassi seguente descrive il comando CREATE DATABASE utilizzato per creare database da una unità di condivisione dati per condividere dati tra account AWS.
CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF ACCOUNT account_id NAMESPACE namespace_guid
Parametri per l'uso di CREATE DATABASE con una unità di condivisione dati
- FROM DATASHARE
-
Una parola chiave che indica dove si trova l'unità di condivisione dati.
- datashare_name
-
Il nome dell'unità di condivisione dati in cui viene creato il database consumer.
- WITH PERMISSIONS
-
Specifica che il database creato dall'unità di condivisione dati richiede autorizzazioni a livello di oggetto per accedere ai singoli oggetti del database. Senza questa clausola, gli utenti o i ruoli a cui è stata concessa l'autorizzazione USAGE sul database hanno automaticamente accesso a tutti gli oggetti del database.
- NAMESPACE namespace_guid
-
Un valore che specifica lo spazio dei nomi del produttore a cui appartiene l'unità di condivisione dati.
- ACCOUNT account_id
-
Un valore che specifica lo spazio dei nomi del produttore a cui appartiene l'unità di condivisione dati.
Note di utilizzo per CREATE DATABASE per la condivisione di dati
Come utente di database con privilegi avanzati, quando utilizzi CREATE DATABASE per creare database da unità di condivisione dati nell'account AWS, specifica l'opzione NAMESPACE. L'opzione ACCOUNT è facoltativa. Quando si utilizza CREATE DATABASE per creare database da unità di condivisione dati tra account AWS, è necessario specificare le opzioni ACCOUNT e NAMESPACE dal producer.
È possibile creare un solo database consumer per un'unità unità di condivisione dati in un cluster consumer. Non è possibile creare più database consumer che si riferiscono alla stessa unità di condivisione dati.
CREATE DATABASE da AWS Glue Data Catalog
Per creare un database utilizzando un database AWS Glue ARN, specifica l'ARN nel comando CREATE DATABASE.
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;
Facoltativamente, puoi anche fornire un valore nel parametro IAM_ROLE. Per ulteriori informazioni sui parametri e sui valori accettati, consulta Parametri.
Di seguito sono riportati esempi che dimostrano come creare un database da un ARN utilizzando un ruolo IAM.
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;
È inoltre possibile creare un database utilizzando uno SCHEMA DEL CATALOGO DATI.
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;
Crea database per ricevere i risultati delle integrazioni Zero-ETL
Per creare un database utilizzando un’identità di integrazione Zero-ETL, specifica il valore integration_id nel comando CREATE DATABASE.
CREATE DATABASEdestination_db_nameFROM INTEGRATION 'integration_id';
Ad esempio, recupera innanzitutto gli ID di integrazione da SVV_INTEGRATION.
SELECT integration_id FROM SVV_INTEGRATION;
Quindi utilizza uno degli ID di integrazione recuperati per creare il database che riceve le integrazioni Zero-ETL.
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';
Quando è necessario il database di origine delle integrazioni Zero-ETL, ad esempio, specifica:
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' DATABASE sourcedb;
Puoi inoltre impostare un intervallo di aggiornamento per il database. Ad esempio, per impostare l’intervallo di aggiornamento su 7.200 secondi per i dati provenienti da una fonte di integrazione Zero-ETL:
CREATE DATABASE myacct_mysql FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET REFRESH_INTERVAL 7200;
Esegui la query sulla vista del catalogo SVV_INTEGRATION per informazioni su un’integrazione Zero-ETL, ad esempio integration_id, target_database, source, refresh_interval e altro.
SELECT * FROM svv_integration;
L’esempio seguente crea un database a partire da un’integrazione con la modalità cronologia attiva.
CREATE DATABASE sample_integration_db FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET HISTORY_MODE = true;
Limiti di CREATE DATABASE
Amazon Redshift applica i seguenti limiti per i database:
-
Massimo 60 database definiti dall'utente per cluster.
-
Massimo 127 byte per un nome del database.
-
Il nome di un database non può essere una parola riservata.
Confronto di database
Il confronto è un insieme di regole che definisce il modo in cui il motore di database confronta e ordina i dati di tipo carattere in SQL. Il confronto senza distinzione tra maiuscole e minuscole è il tipo di confronto più utilizzato. Amazon Redshift utilizza il confronto senza distinzione tra maiuscole e minuscole per facilitare la migrazione da altri sistemi di data warehouse. Con il supporto nativo del confronto senza distinzione tra maiuscole e minuscole, Amazon Redshift continua a utilizzare importanti metodi di regolazione o ottimizzazione, come le chiavi di distribuzione, le chiavi di ordinamento o la scansione con intervallo limitato.
La clausola COLLATE specifica il confronto di default per tutte le colonne CHAR e VARCHAR nel database. Se è specificato CASE_INSENSITIVE, tutte le colonne CHAR o VARCHAR utilizzano confronto senza distinzione tra maiuscole e minuscole Per informazioni sul confronto, consultare Sequenze di regole di confronto.
I dati inseriti o importati nelle colonne senza distinzione tra maiuscole e minuscole manterranno il loro formato maiuscole/minuscole originale. Ma tutte le operazioni di stringa basate su confronto, inclusi l'ordinamento e il raggruppamento, non fanno distinzione tra maiuscole e minuscole. Anche le operazioni di corrispondenza dei modelli come predicati LIKE, SIMILAR TO e funzioni di espressione regolare non fanno distinzione tra maiuscole e minuscole.
Le seguenti operazioni SQL supportano la semantica di confronto applicabile:
-
Operatori di confronto: =, <>, <, <=, >, >=.
-
Operatore LIKE
-
Clausola ORDER BY
-
Clausole GROUP BY
-
Funzioni di aggregazione che utilizzano il confronto di stringhe, come MIN e MAX e LISTAGG
-
Funzioni finestra, ad esempio clausole PARTITION BY e clausole ORDER BY
-
Funzioni scalari greatest() e least(), STRPOS(), REGEXP_COUNT(), REGEXP_REPLACE(), REGEXP_INSTR(), REGEXP_SUBSTR()
-
Clausola separata
-
UNION, INTERSECT ed EXCEPT
-
IN LIST
Per le query esterne, incluse le query federate di Amazon Redshift Spectrum e Aurora PostgreSQL, il confronto della colonna VARCHAR o CHAR è uguale al confronto corrente a livello di database.
Nell'esempio seguente viene eseguita una query su una tabella Amazon Redshift Spectrum:
SELECT ci_varchar FROM spectrum.test_collation WHERE ci_varchar = 'AMAZON'; ci_varchar ---------- amazon Amazon AMAZON AmaZon (4 rows)
Per informazioni su come creare le tabelle mediante il confronto di database, consultare CREATE TABLE.
Per ulteriori informazioni sulla funzione COLLATE, consultare Funzione COLLATE.
Limitazioni del confronto di database
Di seguito sono elencate le limitazioni nell'utilizzo del confronto di database in Amazon Redshift:
-
Tutte le tabelle o le viste di sistema, incluse le tabelle dei cataloghi PG e le tabelle di sistema di Amazon Redshift, fanno distinzione tra maiuscole e minuscole.
-
Quando il database consumer e il database producer hanno regole di confronto diverse a livello di database, Amazon Redshift non supporta query tra database e tra cluster.
-
Amazon Redshift non supporta il confronto senza distinzione tra maiuscole e minuscole nella query sul solo nodo principale.
Nell'esempio seguente viene mostrata una query senza distinzione tra maiuscole e minuscole non supportata e l'errore restituito da Amazon Redshift:
SELECT collate(usename, 'case_insensitive') FROM pg_user; ERROR: Case insensitive collation is not supported in leader node only query. -
Amazon Redshift non supporta l'interazione tra le colonne con distinzione o senza distinzione tra maiuscole e minuscole, ad esempio operazioni di confronto, funzione, join o set.
Negli esempi seguenti vengono mostrati gli errori restituiti quando interagiscono colonne con distinzione e senza distinzione tra maiuscole e minuscole:
CREATE TABLE test (ci_col varchar(10) COLLATE case_insensitive, cs_col varchar(10) COLLATE case_sensitive, cint int, cbigint bigint);SELECT ci_col = cs_col FROM test; ERROR: Query with different collations is not supported yet.SELECT concat(ci_col, cs_col) FROM test; ERROR: Query with different collations is not supported yet.SELECT ci_col FROM test UNION SELECT cs_col FROM test; ERROR: Query with different collations is not supported yet.SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col; ERROR: Query with different collations is not supported yet.Select Coalesce(ci_col, cs_col) from test; ERROR: Query with different collations is not supported yet.Select case when cint > 0 then ci_col else cs_col end from test; ERROR: Query with different collations is not supported yet.
Per far funzionare queste query, utilizzare la funzione COLLATE per convertire il confronto di una colonna in modo che corrisponda all'altra. Per ulteriori informazioni, consulta Funzione COLLATE.
Esempi
Creazione di un database
Nell'esempio seguente viene creato un database denominato TICKIT e ne viene assegnata la proprietà all'utente DWUSER:
create database tickit with owner dwuser;
Per visualizzare i dettagli sui database, eseguire una query sulla tabella di catalogo PG_DATABASE_INFO.
select datname, datdba, datconnlimit from pg_database_info where datdba > 1; datname | datdba | datconnlimit -------------+--------+------------- admin | 100 | UNLIMITED reports | 100 | 100 tickit | 100 | 100
L'esempio seguente crea un database denominato sampledb con livello di isolamento SNAPSHOT.
CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
Nell'esempio seguente viene creato il database sales_db dall'unità di condivisione dati salesshare.
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
Esempi di confronto di database
Creazione di un database senza distinzione tra maiuscole e minuscole
Nell'esempio seguente viene creato il database sampledb, la tabella T1 e sono inseriti i dati nella tabella T1.
create database sampledb collate case_insensitive;
Esegui la connessione al nuovo database che hai appena creato usando il client SQL. Se usi l'Editor di query Amazon Redshift v2, scegli sampledb in Editor. Se usi RSQL, esegui un comando come il seguente.
\connect sampledb;
CREATE TABLE T1 ( col1 Varchar(20) distkey sortkey );
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');
Quindi la query trova i risultati con John.
SELECT * FROM T1 WHERE col1 = 'John'; col1 ------ john JOHN (2 row)
Ordinamento senza distinzione tra maiuscole e minuscole
Nell'esempio seguente è mostrato l'ordinamento senza distinzione tra maiuscole e minuscole con la tabella T1. L’ordinamento di Bob e bob o John e john non è deterministico perché sono uguali nella colonna senza distinzione tra maiuscole e minuscole.
SELECT * FROM T1 ORDER BY 1; col1 ------ bob Bob JOHN john Mary (5 rows)
Analogamente, nell'esempio seguente è mostrato l'ordinamento senza distinzione tra maiuscole e minuscole con la clausola GROUP BY. Bob e bob sono uguali e appartengono allo stesso gruppo. È non deterministico ciò che si presenta nel risultato.
SELECT col1, count(*) FROM T1 GROUP BY 1; col1 | count -----+------ Mary | 1 bob | 2 JOHN | 2 (3 rows)
Esecuzione di query con una funzione finestra su colonne senza distinzione tra maiuscole e minuscole
Nell'esempio seguente viene eseguita una query su una funzione finestra senza distinzione tra maiuscole e minuscole.
SELECT col1, rank() over (ORDER BY col1) FROM T1; col1 | rank -----+------ bob | 1 Bob | 1 john | 3 JOHN | 3 Mary | 5 (5 rows)
Esecuzione di query con la parola chiave DISTINCT
Nell'esempio seguente viene eseguita una query sulla tabella T1 con la parola chiave DISTINCT.
SELECT DISTINCT col1 FROM T1; col1 ------ bob Mary john (3 rows)
Esecuzione di query con la clausola UNION
Nell'esempio seguente sono mostrati i risultati dell'UNION delle tabelle T1 e T2.
CREATE TABLE T2 AS SELECT * FROM T1;
SELECT col1 FROM T1 UNION SELECT col1 FROM T2; col1 ------ john bob Mary (3 rows)