Visualizzazione TABLE_CONSTRAINTS

La vista TABLE_CONSTRAINTS contiene le relazioni tra chiavi principali e esterne in un set di dati BigQuery.

Nei database relazionali tipici, 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 con le chiavi principali e esterne vengono create e gestite tramite comandi DDL.

Limitazioni

  • I vincoli di valore per le chiavi principali e le chiavi esterne non vengono applicati. Gli utenti devono assicurarsi che i valori corrispondano ai rispettivi vincoli, altrimenti potrebbero ottenere risultati errati. In particolare:
    • Le chiavi principali devono avere valori univoci.
    • Le chiavi primarie non possono superare le 16 colonne.
    • Le chiavi esterne devono avere 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, o TIMESTAMP.
  • Le chiavi principali e le chiavi esterne possono essere impostate solo nelle colonne di primo livello.
  • Le chiavi primarie non possono essere denominate.
  • Le tabelle con vincoli di chiave primaria non possono essere rinominate.
  • 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.
  • I campi che fanno parte di vincoli di chiave primaria o di chiavi esterne non possono essere rinominati o avere il tipo modificato.
  • Se capi, cloni, restore o crei 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 della tabella.

Autorizzazioni obbligatorie

Devi disporre delle seguenti autorizzazioni IAM (Gestione di identità e accessi):

  • bigquery.tables.get per visualizzare le definizioni delle chiavi primarie e esterne.
  • bigquery.tables.list per visualizzare gli schemi di informazioni delle tabelle.

Ciascuno dei seguenti ruoli predefiniti ha le autorizzazioni necessarie per eseguire i workflow 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 Ruoli e autorizzazioni predefiniti.

Schema

La vista INFORMATION_SCHEMA.TABLE_CONSTRAINTS ha lo schema seguente:

Nome colonna Tipo Significato

CONSTRAINT_CATALOG

STRING

Il nome del progetto vincolo.

CONSTRAINT_SCHEMA

STRING

Il nome del set di dati dei vincoli.

CONSTRAINT_NAME

STRING

Il nome del vincolo.

TABLE_CATALOG

STRING

Il nome del progetto della tabella vincolata.

TABLE_SCHEMA

STRING

Il nome del set di dati della tabella vincolata.

TABLE_NAME

STRING

Il nome della tabella vincolata.

CONSTRAINT_TYPE

STRING

PRIMARY KEY o FOREIGN KEY.

IS_DEFERRABLE

STRING

YES o NO a seconda che un vincolo sia posticipabile. È supportato solo NO.

INITIALLY_DEFERRED

STRING

È supportato solo NO.

ENFORCED

STRING

YES o NO a seconda che il vincolo sia applicato.
È 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 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; A livello di set di dati Posizione del set di dati
Sostituisci quanto segue:

  • Facoltativo: PROJECT_ID: l'ID del tuo progetto Google Cloud. Se non viene 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 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 di 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 sono i seguenti:

    +-----------------------------+
    | There is no data to display |
    +-----------------------------+