TABLE_CONSTRAINTS 뷰

TABLE_CONSTRAINTS 뷰는 BigQuery 데이터 세트의 기본 및 외래 키 관계를 포함합니다.

일반적인 관계형 데이터베이스에서 기본 키와 외래 키는 데이터 무결성을 보장하기 위해 사용됩니다. 기본 키 값은 각 행에 고유하며 NULL이 아닙니다. 행의 각 외래 키 값은 기본 키 테이블의 기본 키 열에 있거나 NULL이어야 합니다. 기본 및 외래 키 관계는 DDL 문을 통해 생성되고 관리됩니다.

제한사항

  • 기본 키 및 외래 키에는 값 제약조건이 적용되지 않습니다. 사용자는 값이 해당 제약조건과 일치하는지 확인해야 합니다. 그렇지 않으면 잘못된 결과가 발생할 수 있습니다. 구체적으로는 다음과 같습니다.
    • 기본 키에는 고유한 값이 있어야 합니다.
    • 기본 키는 16개의 열을 초과할 수 없습니다.
    • 외래 키에는 기본 키 테이블 열에 있는 값이 있어야 합니다. 이러한 값은 NULL일 수 있습니다.
    • 기본 키와 외래 키는 BIGNUMERIC, BOOLEAN, DATE, DATETIME, INT64, NUMERIC, STRING, TIMESTAMP 유형 중 하나여야 합니다.
  • 기본 키와 외래 키는 최상위 열에만 설정할 수 있습니다.
  • 기본 키의 이름은 지정할 수 없습니다.
  • 기본 키 제약조건이 있는 테이블의 이름은 변경할 수 없습니다.
  • 기본 키와 외래 키 관계가 있는 테이블은 같은 데이터 세트에 있어야 합니다.
  • 테이블에는 테이블에 정의된 외래 키가 최대 64개까지 포함될 수 있습니다.
  • 외래 키는 동일한 테이블의 열을 참조할 수 없습니다.
  • 기본 키와 외래 키는 RANGE 유형에서 지원되지 않습니다.
  • 기본 키 제약조건 또는 외래 키 제약조건의 일부인 필드 이름을 바꾸거나 유형을 변경할 수 없습니다.
  • -a 또는 --append_table 옵션이 없는 테이블을 복사, 클론, restore 또는 스냅샷하면 소스 테이블 제약조건이 복사되어 대상 테이블에 덮어쓰여집니다. -a 또는 --append_table 옵션을 사용하는 경우 테이블 제약조건 없이 소스 테이블 레코드만 대상 테이블에 추가됩니다.

필수 권한

다음 Identity and Access Management(IAM) 권한이 필요합니다.

  • 기본 및 외래 키 정의 보기용 bigquery.tables.get
  • 테이블 정보 스키마 보기용 bigquery.tables.list

다음 사전 정의된 각 역할에는 이 문서에 설명된 워크플로를 수행하는 데 필요한 권한이 있습니다.

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

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

스키마

INFORMATION_SCHEMA.TABLE_CONSTRAINTS 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 유형 의미

CONSTRAINT_CATALOG

STRING

제약조건 프로젝트 이름입니다.

CONSTRAINT_SCHEMA

STRING

제약조건 데이터 세트 이름입니다.

CONSTRAINT_NAME

STRING

제약조건 이름입니다.

TABLE_CATALOG

STRING

제한된 테이블 프로젝트 이름입니다.

TABLE_SCHEMA

STRING

제한된 테이블 데이터 세트 이름입니다.

TABLE_NAME

STRING

제한된 테이블 이름입니다.

CONSTRAINT_TYPE

STRING

PRIMARY KEY 또는 FOREIGN KEY입니다.

IS_DEFERRABLE

STRING

제약조건의 지연 여부에 따라 YES 또는 NO입니다. NO만 지원됩니다.

INITIALLY_DEFERRED

STRING

NO만 지원됩니다.

ENFORCED

STRING

제약조건 적용 여부에 따라 YES 또는 NO입니다.
NO만 지원됩니다.

범위 및 구문

이 뷰에 대한 쿼리에는 데이터 세트 한정자가 있어야 합니다. 데이터 세트 한정자가 있는 쿼리에는 데이터 세트에 대한 권한이 있어야 합니다. 자세한 내용은 구문을 참조하세요. 다음 표에서는 이 뷰의 리전 범위와 리소스 범위를 보여줍니다.

뷰 이름 리소스 범위 리전 범위
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; 데이터 세트 수준 데이터 세트 위치
다음을 바꿉니다.

  • (선택사항) PROJECT_ID: Google Cloud 프로젝트의 ID입니다. 지정하지 않으면 기본 프로젝트가 사용됩니다.

예시

다음 쿼리는 데이터 세트에서 단일 테이블의 제약조건을 보여줍니다.

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

다음을 바꿉니다.

  • PROJECT_ID: (선택사항) 클라우드 프로젝트의 이름. 지정하지 않으면 이 명령어는 기본 프로젝트를 사용합니다.
  • DATASET: 데이터 세트의 이름
  • TABLE: 테이블의 이름

반대로 다음 쿼리는 단일 데이터 세트의 모든 테이블에 대한 제약조건을 보여줍니다.

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

기존 제약조건을 사용할 경우 쿼리 결과는 다음과 유사합니다.

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

테이블 또는 데이터 세트에 제약조건이 없는 경우 쿼리 결과는 다음과 같습니다.

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