

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 設定済みテーブルの許可されていない列
<a name="disallowed-columns"></a>

許可されていない出力列の設定は、 AWS Clean Rooms カスタム分析ルールのコントロールであり、クエリ結果に投影できない列のリスト (存在する場合) を定義できます。このリストで参照されている列は、「許可されていない出力列」と見なされます。つまり、変換、エイリアシング、またはその他の手段を通じたこのような列への参照は、クエリの最終 SELECT (射影) に存在しない可能性があります。

この機能では、列が出力に直接射影されることを禁止していますが、基になる値が他のメカニズムを介して間接的に推測されることを完全に防ぐわけではありません。これらの列は、最終射影で参照されていない限り、射影句 (サブクエリや共通テーブル式 (CTE) など) で引き続き使用できます。

許可されていない出力列の設定により、ユースケースと対応するプライバシー要件に基づく分析テンプレートレベルのレビューと組み合わせて、テーブルにコントロールを適用およびコード化する柔軟性が得られます。

この設定方法に関する詳細については、「[カスタム分析ルールのテーブルへの追加 (ガイドフロー)](add-analysis-rule.md#add-custom-analysis-rule-wizard)」を参照してください。

**例**

次の例は、許可されていない出力列コントロールがどのように適用されるかを示しています。
+ メンバー A は、メンバー B とコラボレーションしています。
+ メンバー B は、クエリを実行できるメンバーです。
+ メンバー A は、*age*、*gender*、*email*、および *name* の各列を持つ *users* テーブルを定義します。*age* および *name* 列は、許可されていない出力列です。
+ メンバー B は、*age*、*gender*、および *owner\$1name* 列の類似したセットを持つ *pets* テーブルを定義します。ただし、出力列に制約は設定しません。このため、テーブル内のすべての列をクエリで自由に射影できます。



メンバー B が次のクエリを実行すると、ブロックされます。これは、許可されていない出力列を直接射影できないためです。

```
SELECT 
  age 
FROM 
  users
```

メンバー B が次のクエリを実行すると、ブロックされます。これは、許可されていない出力列をプロジェクトスターを介して暗黙的に射影できないためです。

```
SELECT 
  * 
FROM 
  users
```

メンバー B が次のクエリを実行すると、ブロックされます。これは、許可されていない出力列の変換を射影できないためです。

```
SELECT 
  COUNT(age) 
FROM 
  users
```

メンバー B が次のクエリを実行すると、ブロックされます。これは、許可されていない出力列はエイリアスを使用して最終射影で参照できないためです。

```
SELECT 
  count_age
FROM 
  (SELECT COUNT(age) AS count_age FROM users)
```

メンバー B が次のクエリを実行すると、ブロックされます。これは、変換された制限付き列が出力に射影されるためです。

```
SELECT 
  CONCAT(name, email) 
FROM 
  users
```

メンバー B が次のクエリを実行すると、ブロックされます。これは、CTE で定義された許可されていない出力列を最終射影で参照できないためです。

```
WITH cte AS (
  SELECT 
    age AS age_alias 
  FROM 
    users
)
SELECT age_alias FROM cte
```

メンバー B が次のクエリを実行すると、ブロックされます。これは、許可されていない出力列を最終射影のソートキーまたはパーティションキーとして使用できないためです。

```
SELECT 
  LISTAGG(gender) WITHIN GROUP (ORDER BY age) OVER (PARTITION BY age) 
FROM 
  users
```

メンバー B が次のクエリを実行すると、成功します。これは、許可されていない出力列の一部である列は、結合句やフィルター句など、クエリ内の他のコンストラクト間で引き続き使用できるためです。

```
SELECT
  u.name, 
  p.gender, 
  p.age
FROM 
  users AS u
JOIN 
  pets AS p
ON 
  u.name = p.owner_name
```

同じシナリオで、メンバー B はフィルターまたはソートキーとして *users* の *name* 列を使用することもできます。

```
SELECT 
  u.email,
  u.gender
FROM 
  users AS u
WHERE 
  u.name = 'Mike'
ORDER BY
  u.name
```

さらに、*users* からの許可されていない出力列は、次のようなサブクエリや CTE などの中間射影で使用できます。

```
WTIH cte AS (
 SELECT 
   u.gender, 
   u.id,
   u.first_name
 FROM
   users AS u
)
SELECT 
  first_name 
FROM
  (SELECT cte.gender, cte.id, cte.first_name FROM cte)
```