Ansicht TABLE_CONSTRAINTS

Die Ansicht TABLE_CONSTRAINTS enthält die primären und Fremdschlüsselbeziehungen in einem BigQuery-Dataset.

In typischen relationalen Datenbanken werden Primärschlüssel und Fremdschlüssel verwendet, um die Datenintegrität sicherzustellen. Ein Primärschlüsselwert ist für jede Zeile eindeutig und nicht NULL. Jeder Fremdschlüsselwert in einer Zeile muss in der Primärschlüsselspalte der Primärschlüsseltabelle vorhanden sein oder NULL sein. Primärschlüssel- und Fremdschlüsselbeziehungen werden über DDL-Anweisungen erstellt und verwaltet.

Beschränkungen

  • Wertbeschränkungen für Primärschlüssel und Fremdschlüssel werden nicht erzwungen. Nutzer müssen dafür sorgen, dass die Werte den jeweiligen Einschränkungen entsprechen. Andernfalls erhalten sie möglicherweise falsche Ergebnisse. Zum Beispiel:
    • Primärschlüssel müssen eindeutige Werte haben.
    • Primärschlüssel dürfen 16 Spalten nicht überschreiten.
    • Fremdschlüssel müssen Werte haben, die in der Primärschlüsselspalte vorhanden sind. Diese Werte können NULL sein.
    • Primärschlüssel und Fremdschlüssel müssen einen der folgenden Typen haben: BIGNUMERIC, BOOLEAN, DATE, DATETIME, INT64, NUMERIC, STRING oder TIMESTAMP.
  • Primärschlüssel und Fremdschlüssel können nur für Spalten der obersten Ebene festgelegt werden.
  • Die Primärschlüssel können nicht benannt werden.
  • Tabellen mit Primärschlüsseleinschränkungen können nicht umbenannt werden.
  • Tabellen mit einem Primärschlüssel und Fremdschlüsselbeziehungen müssen sich im selben Dataset befinden.
  • Eine Tabelle kann bis zu 64 Fremdschlüssel enthalten, die in der Tabelle definiert sind.
  • Ein Fremdschlüssel kann nicht auf eine Spalte in derselben Tabelle verweisen.
  • Primärschlüssel und Fremdschlüssel werden für den Typ RANGE nicht unterstützt.
  • Felder, die Teil von Primärschlüsseleinschränkungen oder Fremdschlüsseleinschränkungen sind, können nicht umbenannt werden oder ihren Typ ändern.
  • Wenn Sie eine Tabelle kopieren, klonen, wiederherstellen oder einen Snapshot machen, ohne die Option -a oder --append_table auswählen, werden die Einschränkungen der Quelltabelle kopiert und in die Zieltabelle überschrieben. Wenn Sie die Option -a oder --append_table verwenden, werden nur die Quelltabelleneinträge zur Zieltabelle ohne Tabelleneinschränkungen hinzugefügt.

Erforderliche Berechtigungen

Sie benötigen die folgenden IAM-Berechtigungen (Identity and Access Management):

  • bigquery.tables.get zum Aufrufen von Definitionen des primären und Fremdschlüssels.
  • bigquery.tables.list zum Aufrufen von Tabelleninformationsschemas

Jede der folgenden vordefinierten Rollen hat die erforderlichen Berechtigungen zum Ausführen der in diesem Dokument beschriebenen Workflows:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Schema

Die Ansicht INFORMATION_SCHEMA.TABLE_CONSTRAINTS hat das folgende Schema:

Spaltenname Typ Bedeutung

CONSTRAINT_CATALOG

STRING

Der Name des Einschränkungsprojekts.

CONSTRAINT_SCHEMA

STRING

Der Name des Einschränkungs-Datasets.

CONSTRAINT_NAME

STRING

Der Name der Einschränkung.

TABLE_CATALOG

STRING

Der Name des eingeschränkten Tabellenprojekts.

TABLE_SCHEMA

STRING

Der Name des eingeschränkten Tabellen-Datasets.

TABLE_NAME

STRING

Der Name der eingeschränkten Tabelle.

CONSTRAINT_TYPE

STRING

PRIMARY KEY oder FOREIGN KEY.

IS_DEFERRABLE

STRING

YES oder NO, je nachdem, ob eine Einschränkung zurückgestellt werden kann. Nur NO wird unterstützt.

INITIALLY_DEFERRED

STRING

Nur NO wird unterstützt.

ENFORCED

STRING

YES oder NO, je nachdem, ob die Einschränkung erzwungen wird.
Nur NO wird unterstützt.

Bereich und Syntax

Für Abfragen dieser Ansicht muss ein Dataset-Qualifizierer verwendet werden. Für Abfragen mit einem Dataset-Qualifier benötigen Sie Berechtigungen für das Dataset. Weitere Informationen finden Sie unter Syntax. In der folgenden Tabelle werden die Regions- und Ressourcenbereiche für diese Ansicht gezeigt:

Ansichtsname Ressourcenbereich Regionsbereich
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; Dataset-Ebene Dataset-Standort
Dabei gilt:

  • Optional: PROJECT_ID: die ID Ihres Google Cloud-Projekts. Wenn keine Angabe erfolgt, wird das Standardprojekt verwendet.

Beispiele

Die folgende Abfrage zeigt die Einschränkungen für eine einzelne Tabelle in einem Dataset:

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE table_name = TABLE;

Dabei gilt:

  • PROJECT_ID: Optional. Der Name Ihres Cloud-Projekts. Wenn nicht angegeben, verwendet dieser Befehl das Standardprojekt.
  • DATASET: der Name Ihres Datasets
  • TABLE: der Name der Tabelle

Umgekehrt werden in der folgenden Abfrage die Einschränkungen für alle Tabellen in einem einzelnen Dataset angezeigt.

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Bei vorhandenen Einschränkungen sehen die Abfrageergebnisse etwa so aus:

+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+
| 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       |
+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+

Wenn für die Tabelle oder das Dataset keine Einschränkungen gelten, sehen die Abfrageergebnisse so aus:

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