Visualizzazione TABLE_CONSTRAINTS
La vista TABLE_CONSTRAINTS
contiene le relazioni di chiave primaria ed esterna in un set di dati BigQuery.
Nei tipici database relazionali, le chiavi primarie e le chiavi esterne vengono utilizzate per garantire l'integrità dei dati. Un valore della chiave primaria è univoco per ogni riga e non è NULL
. Ogni valore della chiave esterna in una riga deve essere presente nella colonna della chiave primaria della tabella della chiave primaria o essere NULL
. Le relazioni di chiave primaria ed esterna
vengono create e gestite tramite
le istruzioni DDL.
Limitazioni
- I vincoli di valore per le chiavi primarie e le chiavi esterne non vengono applicati in modo forzato.
Gli utenti devono assicurarsi che i valori corrispondano ai rispettivi vincoli, altrimenti potrebbero ottenere risultati errati. Nello specifico:
- Le chiavi primarie devono avere valori univoci.
- Le chiavi primarie non possono avere più di 16 colonne.
- Le chiavi esterne devono contenere valori presenti nella colonna della tabella della chiave primaria. Questi valori possono essere NULL.
- Le chiavi primarie e le chiavi esterne devono essere di uno dei seguenti tipi:
BIGNUMERIC
,BOOLEAN
,DATE
,DATETIME
,INT64
,NUMERIC
,STRING
oTIMESTAMP
.
- Le chiavi primarie e esterne possono essere impostate solo nelle colonne di primo livello.
- Non è possibile assegnare un nome alle chiavi primarie.
- Le tabelle con vincoli di chiave primaria non possono essere rinominate.
- Le tabelle con una chiave primaria e una relazione di chiave esterna devono trovarsi nello stesso set di dati.
- Una tabella può contenere fino a 64 chiavi esterne definite al suo interno.
- Una chiave esterna non può fare riferimento a una colonna nella stessa tabella.
- Le chiavi primarie e esterne non sono supportate per il tipo
RANGE
. - I campi che fanno parte di vincoli di chiave primaria o di chiave esterna non possono essere rinominati o avere il tipo modificato.
- Se copi, cloni, riprendi o esegui uno snapshot di una tabella senza l'opzione
-a
o--append_table
, i vincoli della tabella di origine vengono copiati e sovrascritti nella tabella di destinazione. Se utilizzi l'opzione-a
o--append_table
, solo i record della tabella di origine vengono aggiunti alla tabella di destinazione senza i vincoli di tabella.
Autorizzazioni obbligatorie
Devi disporre delle seguenti autorizzazioni IAM (Identity and Access Management):
bigquery.tables.get
per visualizzare le definizioni di chiave primaria ed esterna.bigquery.tables.list
per visualizzare gli schemi di informazioni della tabella.
Ciascuno dei seguenti ruoli predefiniti dispone delle autorizzazioni necessarie per eseguire i flussi di lavoro descritti in questo documento:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti.
Schema
La vista INFORMATION_SCHEMA.TABLE_CONSTRAINTS
ha il seguente schema:
Nome colonna | Tipo | Significato |
---|---|---|
|
|
Il nome del progetto del vincolo. |
|
|
Il nome del set di dati del vincolo. |
|
|
Il nome del vincolo. |
|
|
Il nome del progetto della tabella vincolata. |
|
|
Nome del set di dati della tabella vincolata. |
|
|
Il nome della tabella vincolata. |
|
|
Può essere PRIMARY KEY o
FOREIGN KEY . |
|
|
YES o NO a seconda che un vincolo sia differibile. È supportato soltanto l'ID NO . |
|
|
È supportato soltanto l'ID NO . |
|
|
YES o NO a seconda dell'applicazione o meno del vincolo. È supportato soltanto il criterio NO . |
Ambito e sintassi
Le query in questa visualizzazione devono includere un qualificatore del set di dati. Per le query con un qualificatore del set di dati, devi disporre delle autorizzazioni per il set di dati. Per ulteriori informazioni, consulta la sezione Sintassi. La tabella seguente mostra gli ambiti della regione e delle risorse per questa visualizzazione:
Nome vista | Ambito risorsa | Ambito regione |
---|---|---|
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; |
Livello set di dati | Posizione del set di dati |
- (Facoltativo)
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Se non specificato, viene utilizzato il progetto predefinito.
Esempi
La seguente query mostra i vincoli per una singola tabella in un set di dati:
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE table_name = TABLE;
Sostituisci quanto segue:
PROJECT_ID
: facoltativo. Il nome del tuo progetto cloud. Se non specificato, questo comando utilizza il progetto predefinito.DATASET
: il nome del set di dati.TABLE
: il nome della tabella.
Al contrario, la seguente query mostra i vincoli per tutte le tabelle in un singolo set di dati.
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Con i vincoli esistenti, i risultati della query sono simili ai seguenti:
+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+ | Row | constraint_catalog | constraint_schema | constraint_name | table_catalog | table_schema | table_name | constraint_type | is_deferrable | initially_deferred | enforced | +-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+ | 1 | myConstraintCatalog | myDataset | orders.pk$ | myConstraintCatalog | myDataset | orders | PRIMARY KEY | NO | NO | NO | | 2 | myConstraintCatalog | myDataset | orders.order_customer | myConstraintCatalog | myDataset | orders | FOREIGN KEY | NO | NO | NO | +-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+
Se la tabella o il set di dati non ha vincoli, i risultati della query avranno il seguente aspetto:
+-----------------------------+ | There is no data to display | +-----------------------------+