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 referenzierten Tabelle 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 Spalte der referenzierten Tabelle 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
oderTIMESTAMP
.
- Primär- und Fremdschlüssel können nur für Spalten auf oberster Ebene festgelegt werden.
- Die Primärschlüssel dürfen nicht benannt werden.
- Tabellen mit Primärschlüsseleinschränkungen können nicht umbenannt werden.
- 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.
- 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 |
---|---|---|
|
|
Der Name des Einschränkungsprojekts. |
|
|
Der Name des Einschränkungs-Datasets. |
|
|
Der Name der Einschränkung. |
|
|
Der Name des eingeschränkten Tabellenprojekts. |
|
|
Der Name des eingeschränkten Tabellen-Datasets. |
|
|
Der Name der eingeschränkten Tabelle. |
|
|
PRIMARY KEY oder FOREIGN KEY . |
|
|
YES oder NO , je nachdem, ob eine Einschränkung zurückgestellt werden kann. Nur NO wird unterstützt. |
|
|
Nur NO wird unterstützt. |
|
|
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 |
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;
Ersetzen Sie dabei Folgendes:
PROJECT_ID
: Optional. Der Name Ihres Cloud-Projekts. Wenn nicht angegeben, verwendet dieser Befehl das Standardprojekt.DATASET
: der Name Ihres DatasetsTABLE
: 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 | +-----------------------------+