Visualizzazione TABLE_CONSTRAINTS
La vista TABLE_CONSTRAINTS
contiene la chiave primaria e la chiave esterna
in un set di dati BigQuery.
Nei tipici database relazionali, le chiavi primarie e le chiavi esterne sono usate per
garantire l'integrità dei dati. Un valore di chiave primaria è univoco per ogni riga e non è
NULL
. Ogni valore della chiave esterna in una riga deve essere presente nella colonna di chiave primaria
della tabella di chiave primaria o essere NULL
. Relazioni di chiave primaria ed esterna
vengono creati e gestiti
Istruzioni DDL.
Limitazioni
- I vincoli dei valori per le chiavi primarie e le chiavi esterne non vengono applicati.
Gli utenti devono assicurarsi
che i valori corrispondano ai rispettivi vincoli
altrimenti potrebbero ricevere risultati errati. Nello specifico:
- Le chiavi primarie devono avere valori univoci.
- Le chiavi primarie non possono superare le 16 colonne.
- Le chiavi esterne devono avere valori presenti nell'istanza principale . 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 le chiavi 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 relazioni di chiave esterna devono essere nel lo stesso set di dati.
- Una tabella può contenere fino a 64 chiavi esterne definite nella tabella.
- Una chiave esterna non può fare riferimento a una colonna della stessa tabella.
- Le chiavi primarie e le chiavi esterne non sono supportate per il tipo
RANGE
. - Campi che fanno parte di vincoli di chiave primaria o chiave esterna i vincoli non possono essere rinominati o subiscono modifiche di tipo.
- Se
testo,
clone,
ripristinare,
o
istantanea
una tabella senza l'opzione
-a
o--append_table
, ovvero la tabella di origine i vincoli 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 della tabella.
Autorizzazioni obbligatorie
È necessario quanto segue 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 delle tabelle.
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 su ruoli e autorizzazioni IAM in per BigQuery, consulta Ruoli e autorizzazioni predefiniti.
Schema
La vista INFORMATION_SCHEMA.TABLE_CONSTRAINTS
ha il seguente schema:
Nome colonna | Tipo | Significato |
---|---|---|
|
|
Il nome del progetto di vincolo. |
|
|
Il nome del set di dati del vincolo. |
|
|
Il nome del vincolo. |
|
|
Il nome del progetto di tabella vincolata. |
|
|
Il nome del set di dati della tabella vincolata. |
|
|
Il nome della tabella vincolata. |
|
|
PRIMARY KEY o
FOREIGN KEY . |
|
|
YES o NO , a seconda che il vincolo sia
ripristinabile. È supportato solo NO . |
|
|
È supportato solo NO . |
|
|
YES o NO , a seconda che il vincolo sia
in modo forzato. È supportato solo NO . |
Ambito e sintassi
Le query su questa vista devono includere un qualificatore del set di dati. Per le query con un qualificatore set di dati, devi disporre delle autorizzazioni per il set di dati. Per maggiori informazioni informazioni vedi Sintassi. La tabella seguente mostra gli ambiti delle risorse e delle regioni per questa vista:
Nome vista | Ambito risorsa | Ambito della regione |
---|---|---|
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; |
Livello del 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 cloud progetto. 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 in un singolo set di dati.
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Con i vincoli esistenti, i risultati delle 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 saranno simili ai seguenti:
+-----------------------------+ | There is no data to display | +-----------------------------+