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
뷰에는 다음과 같은 스키마가 있습니다.
열 이름 | 유형 | 의미 |
---|---|---|
|
|
제약조건 프로젝트 이름입니다. |
|
|
제약조건 데이터 세트 이름입니다. |
|
|
제약조건 이름입니다. |
|
|
제한된 테이블 프로젝트 이름입니다. |
|
|
제한된 테이블 데이터 세트 이름입니다. |
|
|
제한된 테이블 이름입니다. |
|
|
PRIMARY KEY 또는 FOREIGN KEY 입니다. |
|
|
제약조건의 지연 여부에 따라 YES 또는 NO 입니다. NO 만 지원됩니다. |
|
|
NO 만 지원됩니다. |
|
|
제약조건 적용 여부에 따라 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 | +-----------------------------+