분석 규칙을 사용하여 데이터 액세스 제한

이 문서에서는 BigQuery용 GoogleSQL의 분석 규칙에 대한 일반적인 정보를 제공합니다.

분석 규칙이란 무엇인가요?

분석 규칙은 데이터 공유 정책을 적용합니다. 정책은 쿼리를 실행하기 전에 충족해야 하는 조건을 나타냅니다. BigQuery를 사용하면 데이터 클린룸을 사용하거나 분석 규칙을 직접 뷰에 적용하여 뷰에서 분석 규칙을 적용할 수 있습니다. 분석 규칙을 적용하면 해당 뷰를 쿼리하는 모든 사용자가 뷰에서 해당 분석 규칙을 준수해야 합니다. 분석 규칙이 충족되면 쿼리는 분석 규칙을 충족하는 출력을 생성합니다. 쿼리가 분석 규칙을 충족하지 않으면 오류가 발생합니다.

지원되는 분석 규칙

다음 분석 규칙이 지원됩니다.

  • 집계 기준점 분석 규칙: 데이터 세트에 있어야 하는 최소 고유 항목 수를 적용합니다. DDL 문이나 데이터 클린룸을 사용하여 뷰에 이 규칙을 적용할 수 있습니다. 이 규칙은 집계 기준점 정책과 조인 제한 정책을 지원합니다.

  • 개인 정보 차등 보호 분석 규칙: 데이터가 개인 정보 차등 보호로 보호되는 경우 구독자를 나타내는 데이터를 제한하는 개인 정보 보호 예산을 적용합니다. DDL 문이나 데이터 클린룸을 사용하여 뷰에 이 규칙을 적용할 수 있습니다. 이 규칙은 개인 정보 차등 보호 정책과 조인 제한 정책을 지원합니다.

  • 목록 겹침 분석 규칙: 규칙을 준수하는 조인 작업 후에만 겹치는 행을 쿼리할 수 있습니다. DDL 문이나 데이터 클린룸을 사용하여 뷰에 이 규칙을 적용할 수 있습니다. 이 규칙은 조인 제한 정책을 지원합니다.

집계 기준점 분석 규칙

집계 기준점 분석 규칙은 쿼리의 출력 행에 기여해야 하는 최소 고유 항목 수를 적용하므로 출력 행은 쿼리 결과에 포함됩니다.

적용되는 경우 집계 기준 분석 규칙은 여러 측정기준으로 데이터를 그룹화하면서 집계 기준이 충족되게 합니다. 각 그룹의 개인 정보 보호 단위 열로 표시된 개별 개인 정보 보호 단위의 수를 계산하고, 개별 개인 정보 보호 단위 수가 집계 기준을 충족하는 그룹만 출력합니다.

이 분석 규칙이 포함된 뷰에는 집계 기준점 정책이 포함되어야 하며 선택적으로 조인 제한 정책이 포함될 수 있습니다.

뷰의 집계 기준점 분석 규칙 정의

데이터 클린룸에서 또는 CREATE VIEW 문을 사용하여 뷰의 집계 기준점 분석 규칙을 정의할 수 있습니다.

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "aggregation_threshold_policy": {
        "threshold" : THRESHOLD,
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
      },
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

정의:

  • aggregation_threshold_policy: 집계 기준점 분석 규칙의 집계 기준점 정책입니다.

    • VIEW_NAME: 뷰의 경로와 이름입니다.

    • THRESHOLD: 쿼리 결과의 각 행에 기여해야 하는 최소 개별 개인 정보 보호 단위 수입니다. 잠재적 행이 이 기준점을 충족하지 않으면 해당 행은 쿼리 결과에서 생략됩니다.

    • PRIVACY_UNIT_COLUMN: 개인 정보 보호 단위 열을 나타냅니다. 개인 정보 보호 단위 열은 개인 정보 보호 단위의 고유 식별자입니다. 개인 정보 보호 단위는 보호되는 데이터 세트의 항목을 나타내는 개인 정보 보호 단위 열의 값입니다.

      개인 정보 보호 단위 열은 하나만 사용할 수 있으며 개인 정보 보호 단위 열의 데이터 유형은 그룹화 가능이어야 합니다.

      쿼리를 통해 개인 정보 보호 단위 열의 값을 직접 프로젝션할 수 없으며 분석 규칙 지원 집계 함수만 사용하여 이 열의 데이터를 집계할 수 있습니다.

  • join_restriction_policy(선택사항): 집계 기준점 분석 규칙의 선택적 조인 제한 정책입니다.

    • JOIN_CONDITION: 뷰에서 적용할 조인 제한 유형입니다. 다음 값 중 한 가지로 표시됩니다.

      • JOIN_ALL: 이 뷰를 쿼리하려면 join_allowed_columns의 모든 열이 내부 조인되어야 합니다.

      • JOIN_ANY: 이 뷰를 쿼리하려면 join_allowed_columns에 있는 열이 최소 하나 이상 조인되어야 합니다.

      • JOIN_BLOCKED: 이 뷰는 어떠한 열과도 조인될 수 없습니다. 이 경우에는 join_allowed_columns를 설정하지 마세요.

      • JOIN_NOT_REQUIRED: 이 뷰를 쿼리하는 데는 조인이 필요하지 않습니다. 조인을 사용하는 경우 join_allowed_columns의 열만 사용할 수 있습니다.

    • JOIN_ALLOWED_COLUMNS: 조인 작업의 일부일 수 있는 열입니다.

  • QUERY: 뷰에 대한 쿼리입니다.

예를 들면 다음과 같습니다.

다음 예시에서는 집계 기준점 분석 규칙이 ExamView 뷰에 생성됩니다. ExamViewExamTable 테이블을 참조합니다.

CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

CREATE VIEWOPTIONS 목록을 참조하세요.

뷰의 집계 기준점 분석 규칙 업데이트

데이터 클린룸에서 또는 ALTER VIEW 문을 사용하여 뷰의 집계 기준점 분석 규칙을 변경할 수 있습니다.

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "aggregation_threshold_policy": {
      "threshold" : THRESHOLD,
      "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
    }
  }'
)

앞의 구문에서 개인정보처리방침에 설정할 수 있는 값에 대한 자세한 내용은 뷰의 집계 기준점 분석 규칙 정의를 참조하세요.

예를 들면 다음과 같습니다.

다음 예시에서는 집계 기준점 분석 규칙이 ExamView 뷰에서 업데이트됩니다.

ALTER VIEW mydataset.ExamView
SET OPTIONS (
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);

ALTER VIEW에 대한 privacy_policy 문법을 검토하려면 ALTER VIEW SET OPTIONSOPTIONS 목록을 참조하세요.

집계 기준점 분석 규칙 적용 뷰 쿼리

AGGREGATION_THRESHOLD 절을 사용하여 집계 기준점 분석 규칙이 있는 뷰를 쿼리할 수 있습니다. 쿼리에는 집계 함수가 포함되어야 하며 이 쿼리에서는 집계 기준점 지원 집계 함수만 사용할 수 있습니다.

예를 들면 다음과 같습니다.

다음 예시에서는 ExamView 뷰에서 집계 기준점 분석 규칙이 쿼리됩니다.

SELECT WITH AGGREGATION_THRESHOLD
  test_id, COUNT(DISTINCT last_name) AS student_count
FROM mydataset.ExamView
GROUP BY test_id;

/*---------+---------------*
 | test_id | student_count |
 +---------+---------------+
 | P91     | 3             |
 | U25     | 4             |
 *---------+---------------*/

집계 기준점 분석 규칙에는 선택적으로 조인 제한 정책이 포함될 수도 있습니다. 분석 규칙과 함께 조인 제한 정책을 사용하는 방법은 분석 규칙의 조인 제한 정책을 참조하세요.

AGGREGATION_THRESHOLD 절에 대한 추가 예시를 검토하려면 AGGREGATION_THRESHOLD을 참조하세요.

개인 정보 차등 보호 분석 규칙

개인 정보 차등 보호 분석 규칙은 데이터가 개인 정보 차등 보호로 보호되는 경우 구독자를 나타내는 데이터를 제한하는 개인 정보 보호 예산을 적용합니다. 개인 정보 보호 예산은 모든 쿼리의 엡실론 또는 델타의 합이 총 엡실론 또는 총 델타 값에 도달하면 모든 구독자가 공유 데이터를 쿼리할 수 없게 합니다. 뷰에서 이 분석 규칙을 사용할 수 있습니다.

이 분석 규칙이 포함된 뷰에는 개인 정보 차등 보호 정책이 포함되어야 하며 선택적으로 조인 제한 정책이 포함될 수 있습니다.

뷰의 개인 정보 차등 보호 분석 규칙 정의

데이터 클린룸에서 또는 CREATE VIEW 문을 사용하여 뷰의 개인 정보 차등 보호 분석 규칙을 정의할 수 있습니다.

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "differential_privacy_policy": {
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
        "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
        "epsilon_budget": EPSILON_BUDGET,
        "delta_per_query": DELTA_PER_QUERY,
        "delta_budget": DELTA_BUDGET,
        "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
      },
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

정의:

  • differential_privacy_policy: 개인 정보 차등 보호 분석 규칙의 개인 정보 차등 보호 정책입니다.

    • PRIVACY_UNIT_COLUMN: 개인 정보 보호 분석 규칙을 통해 보호되는 데이터 세트의 항목을 식별하는 입니다. 이 값은 JSON 문자열입니다.

    • MAX_EPSILON_PER_QUERY: 쿼리당 결과에 추가된 노이즈 양을 결정하고 총 epsilon이 단일 쿼리를 통해 도달하지 못하도록 합니다. 이 값은 0.001부터 1e+15까지의 JSON 숫자입니다.

    • EPSILON_BUDGET: 뷰의 모든 차등 비공개 쿼리에서 사용할 수 있는 총 엡실론을 나타내는 epsilon 예산입니다. 이 값은 MAX_EPSILON_PER_QUERY보다 커야 하며 0.001부터 1e+15까지의 JSON 숫자입니다.

    • DELTA_PER_QUERY: 결과의 모든 행이 엡실론-차등 비공개가 되지 못할 가능성입니다. 이 값은 1e-15부터 1까지의 JSON 숫자입니다.

    • DELTA_BUDGET: 뷰의 모든 차등 비공개 쿼리에서 사용할 수 있는 총 델타를 나타내는 델타 예산입니다. 이 값은 DELTA_PER_QUERY보다 커야 하며 1e-15부터 1000까지의 JSON 숫자입니다.

    • MAX_GROUPS_CONTRIBUTED(선택사항): 개인 정보 보호 단위 열의 항목이 참여할 수 있는 그룹 수를 제한합니다. 이 값은 음수가 아닌 JSON 정수여야 합니다.

  • join_restriction_policy(선택사항): 개인 정보 차등 보호 분석 규칙의 선택적 조인 제한 정책입니다.

    • JOIN_CONDITION: 뷰에서 적용할 조인 제한 유형입니다. 다음 값 중 한 가지로 표시됩니다.

      • JOIN_ALL: 이 뷰를 쿼리하려면 join_allowed_columns의 모든 열이 내부 조인되어야 합니다.

      • JOIN_ANY: 이 뷰를 쿼리하려면 join_allowed_columns에 있는 열이 최소 하나 이상 조인되어야 합니다.

      • JOIN_BLOCKED: 이 뷰는 어떠한 열과도 조인될 수 없습니다. 이 경우에는 join_allowed_columns를 설정하지 마세요.

      • JOIN_NOT_REQUIRED: 이 뷰를 쿼리하는 데는 조인이 필요하지 않습니다. 조인을 사용하는 경우 join_allowed_columns의 열만 사용할 수 있습니다.

    • JOIN_ALLOWED_COLUMNS: 조인 작업의 일부일 수 있는 열입니다.

  • QUERY: 뷰에 대한 쿼리입니다.

예를 들면 다음과 같습니다.

다음 예시에서는 개인 정보 차등 보호 분석 규칙이 ExamView 뷰에 생성됩니다. ExamViewExamTable 테이블을 참조합니다.

CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 1000.0, "epsilon_budget": 10000.1, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

CREATE VIEWOPTIONS 목록을 참조하세요.

뷰의 개인 정보 차등 보호 분석 규칙 업데이트

데이터 클린룸에서 또는 ALTER VIEW 문을 사용하여 뷰의 개인 정보 차등 보호 분석 규칙을 변경할 수 있습니다.

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "differential_privacy_policy": {
      "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
      "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
      "epsilon_budget": EPSILON_BUDGET,
      "delta_per_query": DELTA_PER_QUERY,
      "delta_budget": DELTA_BUDGET,
      "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
    }
  }'
)

앞의 구문에서 개인정보처리방침에 설정할 수 있는 값에 대한 자세한 내용은 뷰의 개인 정보 차등 보호 분석 규칙 정의를 참조하세요.

예를 들면 다음과 같습니다.

다음 예시에서는 개인 정보 차등 보호 분석 규칙이 ExamView 뷰에서 업데이트됩니다.

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 0.01, "epsilon_budget": 1000.0, "delta_per_query": 0.05, "delta_budget": 0.1, "max_groups_contributed": 2}}'
);

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

ALTER VIEW에 대한 privacy_policy 문법을 검토하려면 ALTER VIEW SET OPTIONSOPTIONS 목록을 참조하세요.

개인 정보 차등 보호 분석 규칙 적용 뷰 쿼리

DIFFERENTIAL_PRIVACY 절을 사용하여 개인 정보 차등 보호 분석 규칙이 있는 뷰를 쿼리할 수 있습니다. DIFFERENTIAL_PRIVACY 절에 대한 문법과 추가 예시를 검토하려면 DIFFERENTIAL_PRIVACY을 참조하세요.

예를 들면 다음과 같습니다.

다음 예시에서는 개인 정보 차등 보호 분석 규칙이 ExamView 뷰에서 쿼리됩니다. epsilon, delta, max_groups_contributed 모두 ExamView의 차등 보호 규칙 조건을 만족하므로 차등 비공개 데이터는 ExamView에서 성공적으로 반환되어야 합니다.

-- Query an analysis–rule enforced view called ExamView.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Results will vary.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | 512.627693163311   |
 | C83     | 506.01565971561649 |
 | U25     | 524.81202728847893 |
 *---------+--------------------*/

범위를 벗어난 엡실론으로 쿼리 차단

엡실론을 사용하여 노이즈를 추가하거나 제거할 수 있습니다. 엡실론이 많을수록 노이즈가 줄어듭니다. 차등 비공개 쿼리에 최소한의 노이즈가 있도록 하려면 개인 정보 차등 보호 분석 규칙의 max_epsilon_per_query 값에 주의해야 합니다.

예를 들면 다음과 같습니다.

다음 쿼리에서는 DIFFERENTIAL_PRIVACY 절의 epsilonExamViewmax_epsilon_per_query보다 높으므로 쿼리가 차단되고 오류가 발생합니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

뷰를 만들고 잠시 기다린 후 다음 쿼리를 실행합니다.

-- Error: Epsilon is too high: 1e+20, policy for table mydataset.
-- ExamView allows max 10.01
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20)
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

엡실론 예산을 초과하는 쿼리 차단

엡실론을 사용하여 노이즈를 추가하거나 제거할 수 있습니다. 엡실론이 적을수록 노이즈가 증가하고 엡실론이 많을수록 노이즈가 줄어듭니다. 노이즈가 많더라도 동일한 데이터에 대한 여러 쿼리를 통해 노이즈가 없는 버전의 데이터가 노출될 수 있습니다. 이를 방지하려면 엡실론 예산을 만들면 됩니다. 엡실론 예산을 추가하려면 뷰의 개인 정보 차등 보호 분석 규칙에서 epsilon_budget의 값을 검토합니다.

예를 들면 다음과 같습니다.

다음 쿼리를 세 번 실행합니다. 세 번째에서는 사용되는 총 엡실론이 30이지만 ExamViewepsilon_budget에서는 25.6만 허용하므로 쿼리가 차단됩니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 25.6, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

뷰를 만들고 잠시 기다린 후 다음 쿼리를 세 번 실행합니다.

-- Error after three query runs: Privacy budget is not sufficient for
-- table 'mydataset.ExamView' in this query.

SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10)
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

목록 겹침 분석 규칙

목록 겹침 규칙을 준수하는 조인 작업 후에는 겹치는 행만 쿼리할 수 있습니다. DDL 문이나 데이터 클린룸을 사용하여 뷰에 이 규칙을 적용할 수 있습니다.

이 분석 규칙이 포함된 뷰에는 조인 제한 정책만 포함되어야 합니다.

뷰의 목록 겹침 분석 규칙 정의

데이터 클린룸에서 또는 CREATE VIEW 문을 사용하여 뷰의 목록 겹침 분석 규칙을 정의할 수 있습니다.

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

정의:

  • join_restriction_policy: 목록 겹침 분석 규칙의 조인 제한 정책입니다.

    • JOIN_CONDITION: 뷰에 적용할 목록 중복 유형입니다. 다음 값 중 한 가지로 표시됩니다.

      • JOIN_ALL: 이 뷰를 쿼리하려면 join_allowed_columns의 모든 열이 내부 조인되어야 합니다.

      • JOIN_ANY: 이 뷰를 쿼리하려면 join_allowed_columns에 있는 열이 최소 하나 이상 조인되어야 합니다.

    • JOIN_ALLOWED_COLUMNS: 조인 작업의 일부일 수 있는 열입니다.

  • QUERY: 뷰에 대한 쿼리입니다.

예를 들면 다음과 같습니다.

다음 예시에서는 목록 중복 분석 규칙이 ExamView 뷰에 생성됩니다. ExamViewExamTable 테이블을 참조합니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_id", "test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

뷰의 목록 겹침 분석 규칙 업데이트

데이터 클린룸에서 또는 ALTER VIEW 문을 사용하여 뷰의 목록 겹침 분석 규칙을 변경할 수 있습니다.

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "join_restriction_policy": {
      "join_condition": "JOIN_CONDITION",
      "join_allowed_columns": JOIN_ALLOWED_COLUMNS
    }
  }'
)

앞선 구문에서 개인정보처리방침에 설정할 수 있는 값에 대한 자세한 내용은 뷰의 목록 겹침 분석 규칙 정의를 참조하시오.

예를 들면 다음과 같습니다.

다음 예시에서는 목록 겹침 분석 규칙이 ExamView 뷰에서 업데이트됩니다.

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);

ALTER VIEW에 대한 privacy_policy 문법을 검토하려면 ALTER VIEW SET OPTIONSOPTIONS 목록을 참조하세요.

목록 겹침 분석 규칙 적용 뷰 쿼리

목록 겹침 분석 규칙이 있는 뷰에서 조인 작업을 수행할 수 있습니다. JOIN 작업의 구문을 검토하려면 조인 작업을 참조하세요.

겹치지 않는 조인 작업 차단

필수 열과 겹치는 부분이 최소 하나 이상 포함되지 않은 경우 조인 작업을 차단할 수 있습니다.

예를 들면 다음과 같습니다.

다음 쿼리에서 ExamView 뷰는 StudentTable 테이블과 조인됩니다. 뷰에 JOIN_ANY 목록 중복 분석 규칙이 포함되어 있으므로 ExamViewStudentTable에서 겹치는 행이 최소 하나 이상 필요합니다. 겹치는 부분이 최소 하나 이상 있으므로 쿼리가 성공적으로 실행됩니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query a view called ExamView and a table called StudentTable.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (test_score);

/*------------+-----------+---------+-------------*
 | test_score | last_name | test_id | last_name_1 |
 +------------+-----------+---------+-------------+
 | 490        | Ivanov    | U25     | Ivanov      |
 | 500        | Wang      | U25     | Wang        |
 | 510        | Hansen    | P91     | Hansen      |
 | 550        | Silva     | U25     | Silva       |
 | 580        | Devi      | U25     | Devi        |
 *------------+-----------+---------+-------------*/

전체 겹침이 없는 내부 조인 작업 차단

모든 필수 열과 겹치는 부분이 포함되지 않으면 조인 작업을 차단할 수 있습니다.

예를 들면 다음과 같습니다.

다음 예시에서 조인 작업은 ExamView 뷰와 StudentTable 테이블에서 시도되지만 쿼리는 실패합니다. ExamView 목록 겹침 분석 규칙은 조인 제한 정책에 있는 모든 열에서 조인되어야 하므로 오류가 발생합니다. StudentTable 테이블에는 이러한 열이 포함되지 않으므로 모든 행이 겹치지 않고 오류가 발생합니다.

-- Create a view that includes ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Joining must occur on all of the following columns
-- [test_score, last_name] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

다른 정책과 함께 조인 제한 정책 사용

집계 기준점 및 개인 정보 차등 보호 분석 규칙의 다른 정책과 함께 조인 제한 정책을 사용할 수 있습니다. 그러나 다른 정책과 함께 조인 제한 정책을 사용한 후에는 다른 정책을 변경할 수 없습니다.

예를 들면 다음과 같습니다.

다음 예시에서는 조인 제한 정책이 집계 기준점 분석 규칙에서 사용됩니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy":{"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_id", "test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

필수 열이 없는 조인 작업 차단

필수 열이 하나 이상 포함되어 있지 않으면 조인 작업을 차단할 수 있습니다. 이렇게 하려면 목록 겹침 분석 규칙에 다음 부분을 포함합니다.

"join_restriction_policy": {
  "join_condition": "JOIN_ANY",
  "join_allowed_columns": ["column_name", ...]
}

예를 들면 다음과 같습니다.

다음 쿼리에서 쿼리에 ExamViewStudentTabletest_score 또는 test_id 열에 대한 조인 작업이 포함되어 있지 않으므로 쿼리가 차단되고 오류가 발생합니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_score", "test_id"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Joining must occur on at least one of the following columns
-- [test_score, test_id] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

앞의 쿼리를 실행하려면 USING 절에서 last_nametest_score로 바꿉니다.

조인 작업이 없는 쿼리 차단

쿼리에 조인 작업이 있어야 하는 경우 조인 작업이 없으면 다음 목록 겹침 분석 규칙 중 하나를 사용하여 쿼리를 차단할 수 있습니다.

"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED"
}
"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED",
  "join_allowed_columns": []
}

예를 들면 다음과 같습니다.

다음 쿼리에서는 쿼리에 ExamView를 사용하는 조인 작업이 없으므로 쿼리가 차단됩니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: At least one allowed column must be specified with
-- join_condition = 'JOIN_NOT_REQUIRED'.
SELECT *
FROM mydataset.ExamView;

조인 작업이 없고 필수 열이 없는 쿼리 차단

쿼리에 조인 작업이 있어야 하고 조인 작업에 필수 열이 최소 하나 이상 있어야 하는 경우 목록 겹침 분석 규칙에 다음 부분을 포함합니다.

"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED",
  "join_allowed_columns": ["column_name", ...]
}

예를 들면 다음과 같습니다.

다음 쿼리에서는 조인 작업에 ExamView join_allowed_columns 배열의 열이 포함되어 있지 않으므로 쿼리가 차단됩니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Join occurring on a restricted column.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

앞의 쿼리를 실행하려면 USING 절에서 last_nametest_score로 바꿉니다.

모든 조인 작업 차단

모든 조인 작업을 차단할 수 있습니다. 이렇게 하려면 목록 겹침 분석 규칙에 다음 부분만 포함합니다.

"join_restriction_policy": {
  "join_condition": "JOIN_BLOCKED",
}

예를 들면 다음과 같습니다.

다음 쿼리에서는 ExamView 뷰를 사용하는 조인 작업이 있으므로 쿼리가 차단됩니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_BLOCKED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Join occurring on a restricted column.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

앞의 쿼리를 실행하려면 INNER JOIN 작업을 삭제합니다.

모든 필수 열이 없는 내부 조인 작업 차단

모든 필수 열이 포함되지 않으면 내부 조인 작업을 차단할 수 있습니다. 이렇게 하려면 목록 겹침 분석 규칙에 다음 부분을 포함합니다.

"join_restriction_policy": {
  "join_condition": "JOIN_ALL",
  "join_allowed_columns": ["column_name", ...]
}

예를 들면 다음과 같습니다.

다음 쿼리에서는 쿼리에 ExamView 뷰를 사용하는 조인 작업의 test_score가 포함되어 있지 않으므로 쿼리가 차단되고 오류가 발생합니다.

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}, "join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query error: Joining must occur on all of the following columns
-- [test_score, last_name] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

앞의 쿼리를 실행하려면 USING (last_name)USING (last_name, test_score)로 바꿉니다.

테이블 예시

이 문서의 여러 예시에서는 ExamTableStudentTable 테이블 2개를 참조합니다. ExamTable에는 학생들이 생성한 시험 점수 목록이, StudentTable에는 학생 목록과 시험 점수가 포함되어 있습니다.

이 문서의 예시를 테스트하려면 먼저 다음 샘플 테이블을 프로젝트에 추가합니다.

-- Create a table called ExamTable.
CREATE OR REPLACE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE OR REPLACE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

제한사항

분석 규칙에는 다음과 같은 제한사항이 있습니다.

  • 분석 규칙을 뷰에 이미 추가한 경우에는 집계 기준점 분석 규칙 또는 개인 정보 차등 보호 분석 규칙으로 전환할 수 없습니다.

집계 기준점 분석 규칙에는 다음과 같은 제한사항이 있습니다.

  • 집계 기준점 분석 규칙 적용 뷰의 쿼리에 지원되는 집계 함수만 사용할 수 있습니다.
  • 구체화된 뷰에는 집계 기준 분석 규칙을 추가할 수 없습니다.
  • 집계 기준점 쿼리에서 집계 기준점 분석 규칙 적용 뷰를 사용하는 경우 둘 다 개인 정보 보호 단위 열의 값이 같아야 합니다.
  • 집계 기준점 쿼리에서 집계 기준점 분석 규칙 적용 뷰를 사용하는 경우 쿼리의 기준점은 뷰의 기준점보다 크거나 같아야 합니다.
  • 시간 이동은 집계 기준점 분석 규칙이 있는 모든 뷰에서 중지됩니다.

개인 정보 차등 보호 분석 규칙에는 다음과 같은 제한사항이 있습니다.

  • 뷰에 대한 개인 정보 보호 예산이 소진되면 해당 뷰를 사용할 수 없으며 새 뷰를 만들어야 합니다.

목록 겹침 분석 규칙에는 다음과 같은 제한사항이 있습니다.

  • 집계 기준점 분석 규칙이나 개인 정보 차등 보호 분석 규칙을 목록 중복 분석 규칙과 결합하고 privacy_unit_column을 목록 겹침 분석 규칙의 join_allowed_column으로 배치하지 않으면 특정 상황에서 열을 조인할 수 없습니다.

가격 책정