TABLE_CONSTRAINTS view
The TABLE_CONSTRAINTS 
view contains the primary and foreign key 
relations in a BigQuery dataset.
Required permissions
You need the following Identity and Access Management (IAM) permissions :
-  bigquery.tables.getfor viewing primary and foreign key definitions.
-  bigquery.tables.listfor viewing table information schemas.
Each of the following predefined roles has the needed permissions to perform the workflows detailed in this document:
-  roles/bigquery.dataEditor
-  roles/bigquery.dataOwner
-  roles/bigquery.admin
For more information about IAM roles and permissions in BigQuery, see Predefined roles and permissions .
Schema
The INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
view has the following schema:
| Column Name | Type | Meaning | 
|---|---|---|
|   |   | The constraint project name. | 
|   |   | The constraint dataset name. | 
|   |   | The constraint name. | 
|   |   | The constrained table project name. | 
|   |   | The constrained table dataset name. | 
|   |   | The constrained table name. | 
|   |   | Either PRIMARY KEYorFOREIGN KEY. | 
|   |   | YESorNOdepending on if a constraint is
      deferrable. OnlyNOis supported. | 
|   |   | Only NOis supported. | 
|   |   | YESorNOdepending on if the constraint is
enforced.Only NOis supported. | 
Scope and syntax
Queries against this view must include a dataset qualifier. For queries with a dataset qualifier, you must have permissions for the dataset. For more information see Syntax . The following table shows the region and resource scopes for this view:
| View name | Resource scope | Region scope | 
|---|---|---|
| [ PROJECT_ID 
.] DATASET 
.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; | Dataset level | Dataset location | 
- Optional: PROJECT_ID: the ID of your Google Cloud project. If not specified, the default project is used.
Examples
The following query shows the constraints for a single table in a dataset:
SELECT * FROM PROJECT_ID . DATASET . INFORMATION_SCHEMA . TABLE_CONSTRAINTS WHERE table_name = TABLE ;
Replace the following:
-  PROJECT_ID: Optional. The name of your cloud project. If not specified, this command uses the default project.
-  DATASET: The name of your dataset.
-  TABLE: The name of the table.
Conversely, the following query shows the constraints for all tables in a single dataset.
SELECT * FROM PROJECT_ID . DATASET . INFORMATION_SCHEMA . TABLE_CONSTRAINTS ;
With existing constraints, the query results are similar to the following:
+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+ | 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 | +-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+
If the table or dataset has no constraints, the query results look like this:
+-----------------------------+ | There is no data to display | +-----------------------------+

