CREATE DATABASE - Amazon Redshift

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

CREATE DATABASE

Crea un nuovo database.

Per creare un database, è necessario essere un superutente o disporre del CREATEDB privilegio. Per creare un database associato a un'ETLintegrazione zero, devi essere un superutente o disporre di entrambi i CREATEDB privilegi. CREATEUSER

Non puoi essere eseguito CREATE DATABASE all'interno di un blocco di transazione (... BEGIN END). Per ulteriori informazioni sulle transazioni, consultare Isolamento serializzabile.

Sintassi

CREATE DATABASE database_name [ { [ WITH ] [ OWNER [=] db_owner ] [ CONNECTION LIMIT { limit | UNLIMITED } ] [ COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE } ] [ ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT } ] } | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid } | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } | { INTEGRATION '<integration_id>'} } | { IAM_ROLE {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } }

Parametri

database_name

Nome del nuovo database. Per ulteriori informazioni sui nomi validi, consultare Nomi e identificatori.

WITH

Parola chiave facoltativa.

OWNER

Specifica il proprietario di un database.

=

Carattere facoltativo.

db_owner

Nome utente per il proprietario del database.

CONNECTIONLIMIT{limite |UNLIMITED}

Numero massimo di connessioni di database che gli utenti possono aprire contemporaneamente. Il limite non viene applicato per gli utente con privilegi avanzati. Usa la UNLIMITED parola chiave 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, consulta CREATE USER. L'impostazione predefinita è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 | CASE_INSENSITIVE }

Una clausola che specifica se la ricerca o il confronto tra stringhe è CASE _ SENSITIVE o CASE _. INSENSITIVE L'impostazione predefinita è _CASE. SENSITIVE

ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT }

Una clausola che specifica il livello di isolamento utilizzato quando vengono eseguite query su un database.

  • SERIALIZABLEisolamento: fornisce la serializzabilità completa per le transazioni simultanee. Per ulteriori informazioni, consulta Isolamento serializzabile.

  • SNAPSHOTisolamento: fornisce un livello di isolamento con protezione dai conflitti di aggiornamento ed eliminazione. Questa è l'impostazione predefinita per un database creato in un cluster o in uno spazio dei nomi senza server fornito.

È possibile visualizzare con quale modello di simultaneità è in esecuzione il database come segue:

  • Interroga la vista del catalogo STV _DB_ _ISOLATION. LEVEL Per ulteriori informazioni, consulta STV_DB_ _ ISOLATION LEVEL.

    SELECT * FROM stv_db_isolation_level;
  • Interroga la vista PG_ _DATABASE. INFO

    SELECT datname, datconfig FROM pg_database_info;

    Il livello di isolamento per database appare accanto alla chiave concurrency_model. Un valore di denota. 1 SNAPSHOT Un valore di denota. 2 SERIALIZABLE

Nei database Amazon Redshift, entrambi SERIALIZABLE e SNAPSHOT l'isolamento sono tipi di livelli di isolamento serializzabili. In altre parole, le letture sporche, le letture non ripetibili e le letture fantasma vengono evitate secondo lo standard. SQL Entrambi i livelli di isolamento garantiscono che una transazione funzioni su uno snapshot di dati esistente all'inizio della transazione e che nessun'altra transazione possa modificare tale snapshot. Tuttavia, SNAPSHOT l'isolamento non fornisce la serializzabilità completa, perché non impedisce inserimenti e aggiornamenti inclinati in scrittura su diverse righe della tabella.

Lo scenario seguente illustra gli aggiornamenti con inclinazione della scrittura utilizzando il livello di isolamento. SNAPSHOT Una tabella denominata Numbers contiene una colonna denominata digits che contiene valori 0 e 1. L'UPDATEistruzione di ogni utente non si sovrappone a quella dell'altro utente. Tuttavia, i valori 0 e 1 vengono scambiati. La SQL loro esecuzione segue questa sequenza temporale con questi risultati:

Orario Operazione utente 1 Operazione utente 2
1 BEGIN;
2 BEGIN;
3 SELECT* FROM Numeri;
digits
------
0
1
4 SELECT* FROM Numeri;
digits
------
0
1
5 UPDATENumeri SET cifre=0 cifre=1WHERE;
6 SELECTFROM* Numeri;
digits
------
0
0
7 COMMIT;
8 Aggiorna numeri SET cifre=1 cifre=0WHERE;
9 SELECT* FROM Numeri;
digits
------
1
1
10 COMMIT;
11 SELECT* FROM Numeri;
digits
------
1
0
12 SELECT* FROM Numeri;
digits
------
1
0

Se lo stesso scenario viene eseguito utilizzando l'isolamento serializzabile, Amazon Redshift termina l'utente 2 a causa di una violazione della serializzazione e restituisce un errore 1023. Per ulteriori informazioni, consulta Come correggere errori di isolamento serializzabile. In questo caso, solo l'utente 1 può eseguire correttamente il commit. Non tutti i carichi di lavoro richiedono un isolamento serializzabile come requisito, nel qual caso l'isolamento degli snapshot è sufficiente come livello di isolamento di destinazione per il database.

FROM ARN '<ARN>'

Il AWS Glue database ARN da utilizzare per creare il database.

{DATACATALOGSCHEMA'<schema>' | WITH NO DATA CATALOGSCHEMA}
Nota

Questo parametro è applicabile solo se il CREATE DATABASE comando utilizza anche il FROM ARN parametro.

Speciifica se creare il database utilizzando uno schema per facilitare l'accesso agli oggetti in AWS Glue Data Catalog.

FROMINTEGRATION<integration_id>''

Speciifica se creare il database utilizzando un identificatore a ETL integrazione zero. È possibile recuperare la vista di sistema integration_id from SVV _INTEGRATION. Per vedere un esempio, consulta Crea database per ricevere risultati di ETL integrazioni zero. Per ulteriori informazioni sulla creazione di database con zero ETL integrazioni, consulta Creazione di database di destinazione in Amazon Redshift nella Amazon Redshift Management Guide.

IAM_ ROLE {default | 'SESSION' | 'arn:aws:iam::<Account AWS-id>:ruolo/<role-name>' }
Nota

Questo parametro è applicabile solo se il CREATE DATABASE comando utilizza anche il parametro. FROM ARN

Se specifichi un IAM ruolo associato al cluster durante l'esecuzione del CREATE DATABASE comando, Amazon Redshift utilizzerà le credenziali del ruolo quando esegui le query sul database.

Specificare la default parola chiave significa utilizzare il IAM ruolo 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.

Usa Amazon Resource Name (ARN) per un IAM ruolo utilizzato dal tuo cluster per l'autenticazione e l'autorizzazione. Come minimo, il IAM ruolo deve disporre dell'autorizzazione per eseguire un'LISToperazione sul bucket Amazon S3 a cui accedere e un'GEToperazione sugli oggetti Amazon S3 contenuti nel bucket. Per ulteriori informazioni sull'utilizzo di IAM _ ROLE durante la creazione di un database utilizzando AWS Glue Data Catalog per le condivisioni di dati, vedi Utilizzo delle condivisioni di dati gestite da Lake Formation come consumatore.

Di seguito viene illustrata la sintassi della stringa del parametro _ per una singola stringa. IAM ROLE ARN

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

È possibile concatenare i ruoli in modo che il cluster possa assumere un altro IAM ruolo, possibilmente appartenente a un altro account. Puoi concatenare fino a 10 ruoli. Per ulteriori informazioni, consulta Concatenamento IAM dei ruoli in Amazon Redshift Spectrum.

A questo IAM ruolo, allega una politica di IAM autorizzazioni simile alla seguente.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

Per i passaggi per creare un IAM ruolo da utilizzare con una query federata, vedi. Creazione di un segreto e di un IAM ruolo per utilizzare le 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'utilizzo CREATE DATABASE con un datashare

La sintassi seguente descrive il CREATE DATABASE comando utilizzato per creare database da un datashare per la condivisione di dati all'interno dello stesso AWS conto.

CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid

La sintassi seguente descrive il CREATE DATABASE comando utilizzato per creare database da un datashare per la condivisione di dati tra AWS conti.

CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF ACCOUNT account_id NAMESPACE namespace_guid

Parametri per l'utilizzo CREATE DATABASE con un datashare

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'USAGEautorizzazione sul database avranno automaticamente accesso a tutti gli oggetti del database.

NAMESPACEnamespace_guid

Un valore che specifica lo spazio dei nomi del produttore a cui appartiene l'unità di condivisione dati.

ACCOUNTid_account

Un valore che specifica lo spazio dei nomi del produttore a cui appartiene l'unità di condivisione dati.

Note di utilizzo CREATE DATABASE per la condivisione dei dati

In qualità di superutente del database, quando si utilizza CREATE DATABASE per creare database da condivisioni di dati all'interno di AWS account, specifica l'opzione. NAMESPACE L'ACCOUNTopzione è facoltativa. Quando si utilizza CREATE DATABASE per creare database da condivisioni di dati in tutto il mondo AWS conti, specifica sia il produttore che quello ACCOUNT NAMESPACE del produttore.

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

CREATEDATABASEda AWS Glue Data Catalog

Per creare un database utilizzando un AWS Glue databaseARN, specificalo ARN nel tuo CREATE DATABASE comando.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;

Facoltativamente, puoi anche fornire un valore nel ROLE parametro IAM _. Per ulteriori informazioni sui parametri e sui valori accettati, consulta Parametri.

Di seguito sono riportati alcuni esempi che dimostrano come creare un database ARN utilizzando un IAM ruolo.

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 un DATA CATALOGSCHEMA.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;

Crea database per ricevere risultati di ETL integrazioni zero

Per creare un database utilizzando un'identità a ETL integrazione zero, specificala integration_id nel CREATE DATABASE comando.

CREATE DATABASE destination_db_name FROM INTEGRATION 'integration_id';

Ad esempio, per prima cosa, recupera 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 zero integrazioni. ETL

CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';

CREATEDATABASElimiti

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

La collazione è un insieme di regole che definisce il modo in cui il motore di database confronta e ordina i dati relativi ai tipi di carattere. 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 COLLATE clausola specifica le regole di confronto predefinite per tutte le CHAR colonne del database. VARCHAR Se INSENSITIVE viene specificato CASE _, tutte le VARCHAR colonne utilizzano regole di confronto senza distinzione tra CHAR 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 pattern matching, come LIKE i predicati, similari e le funzioni di espressione regolare, non fanno distinzione tra maiuscole e minuscole.

Le seguenti SQL operazioni supportano la semantica di confronto applicabile:

  • Operatori di confronto: =, <>, <, <=, >, >=.

  • LIKEoperatore

  • ORDERclausole BY

  • GROUPClausole BY

  • Funzioni aggregate che utilizzano il confronto di stringhe, ad esempio e e MIN MAX LISTAGG

  • Funzioni della finestra, come le clausole PARTITION BY e le clausole BY ORDER

  • Funzioni scalari greatest () e least (), (), _ STRPOS (), REGEXP _ COUNT (), REGEXP _ REPLACE (), REGEXP _ INSTR () REGEXP SUBSTR

  • Clausola separata

  • UNION, e INTERSECT EXCEPT

  • IN LIST

Per le query esterne, incluse le query SQL federate di Amazon Redshift Spectrum e Aurora Postgre, le regole di confronto della nostra colonna sono le stesse delle regole di confronto correnti a livello di databaseVARCHAR. CHAR

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.

COLLATEPer COLLATEfunzione informazioni sulla funzione, consulta.

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.
  • Amazon Redshift non supporta la collazione per SUPER tipi di dati. La creazione di SUPER colonne in database senza distinzione tra maiuscole e minuscole e le interazioni tra colonne senza distinzione tra maiuscole e minuscole non sono SUPER supportate.

    L'esempio seguente crea una tabella con SUPER come tipo di dati nel database senza distinzione tra maiuscole e minuscole:

    CREATE TABLE super_table (a super); ERROR: SUPER column is not supported in case insensitive database.

    L'esempio seguente interroga i dati con una stringa senza distinzione tra maiuscole e minuscole e li confronta con i dati: SUPER

    CREATE TABLE test_super_collation (s super, c varchar(10) COLLATE case_insensitive, i int);
    SELECT s = c FROM test_super_collation; ERROR: Coercing from case insensitive string to SUPER is not supported.

Per far funzionare queste interrogazioni, utilizzate la COLLATE funzione per convertire le regole di confronto di una colonna in modo che corrispondano all'altra. Per ulteriori informazioni, consulta COLLATEfunzione.

Esempi

Creazione di un database

L'esempio seguente crea un database denominato TICKIT e ne assegna la proprietà all'utente. DWUSER

create database tickit with owner dwuser;

Per visualizzare i dettagli sui database, interrogate la tabella del INFO catalogo PG_ DATABASE _.

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 SNAPSHOT isolamento.

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;

Connect al nuovo database che hai appena creato usando il tuo SQL client. Se usi l'Editor di query Amazon Redshift v2, scegli sampledb in Editor. Durante l'utilizzoRSQL, utilizzate 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, l'esempio seguente mostra l'ordinamento senza distinzione tra maiuscole e minuscole con la clausola BY. GROUP 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)
DISTINCTInterrogazione con la parola chiave

L'esempio seguente interroga la T1 tabella con la DISTINCT parola chiave.

SELECT DISTINCT col1 FROM T1; col1 ------ bob Mary john (3 rows)
Interrogazione con la clausola UNION

L'esempio seguente mostra i risultati 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)