

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

# ヒント
<a name="sql-commands-hints-spark"></a>

SQL 分析のヒントは、 のクエリ実行戦略をガイドする最適化ディレクティブを提供するため AWS Clean Rooms、クエリのパフォーマンスを向上させ、コンピューティングコストを削減できます。ヒントは、Spark 分析エンジンが実行計画を生成する方法を提案します。

## 構文
<a name="hints-syntax"></a>

```
SELECT /*+ hint_name(parameters), hint_name(parameters) */ column_list
FROM table_name;
```

ヒントは、コメント形式の構文を使用して SQL クエリに埋め込まれ、SELECT キーワードの直後に配置する必要があります。

## サポートされているヒントタイプ
<a name="supported-hint-types"></a>

AWS Clean Rooms は、結合ヒントとパーティション化ヒントの 2 つのカテゴリのヒントをサポートしています。

**Topics**
+ [結合ヒント](join-hints.md)
+ [パーティション分割のヒント](partitioning-hints.md)

# 結合ヒント
<a name="join-hints"></a>

結合ヒントは、クエリ実行の結合戦略を提案します。構文、引数、およびいくつかの例は、[Apache Spark SQL リファレンス](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#join-hints)から入手できます。

### ブロードキャスト
<a name="broadcast-hint"></a>

ブロードキャスト結合 AWS Clean Rooms を使用することをお勧めします。ヒントを含む結合側は、autoBroadcastJoinThreshold に関係なくブロードキャストされます。結合の両側にブロードキャストヒントがある場合、サイズが小さいもの (統計に基づく) がブロードキャストされます。

*エイリアス:* BROADCASTJOIN、MAPJOIN

*パラメータ:* テーブル識別子 (オプション)

*例:*

```
-- Broadcast a specific table
SELECT /*+ BROADCAST(students) */ e.name, s.course
FROM employees e JOIN students s ON e.id = s.id;

-- Broadcast multiple tables
SELECT /*+ BROADCASTJOIN(s, d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;
```

### MERGE
<a name="merge-hint"></a>

シャッフルソートマージ結合 AWS Clean Rooms を使用することをお勧めします。

*エイリアス:* SHUFFLE\$1MERGE、MERGEJOIN

*パラメータ:* テーブル識別子 (オプション)

*例:*

```
-- Use merge join for a specific table
SELECT /*+ MERGE(employees) */ *
FROM employees e JOIN students s ON e.id = s.id;

-- Use merge join for multiple tables
SELECT /*+ MERGEJOIN(e, s, d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;
```

### SHUFFLE\$1HASH
<a name="shuffle-hash-hint"></a>

シャッフルハッシュ結合 AWS Clean Rooms の使用を提案します。両側にシャッフルハッシュヒントがある場合、クエリオプティマイザはビルド側として小さい側 (統計に基づく) を選択します。

*パラメータ:* テーブル識別子 (オプション)

*例:*

```
-- Use shuffle hash join
SELECT /*+ SHUFFLE_HASH(students) */ *
FROM employees e JOIN students s ON e.id = s.id;
```

### SHUFFLE\$1REPLICATE\$1NL
<a name="shuffle-replicate-nl-hint"></a>

ネストされたループ結合にshuffle-and-replicate AWS Clean Rooms を使用することをお勧めします。

*パラメータ:* テーブル識別子 (オプション)

*例:*

```
-- Use shuffle-replicate nested loop join
SELECT /*+ SHUFFLE_REPLICATE_NL(students) */ *
FROM employees e JOIN students s ON e.id = s.id;
```

### Spark SQL のヒントのトラブルシューティング
<a name="join-hint-warning-cases"></a>

次の表は、SparkSQL でヒントが適用されない一般的なシナリオを示しています。詳細については、「[考慮事項と制限事項](sql-commands-hints-spark.md#hints-usage-notes)」を参照してください。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/join-hints.html)

# パーティション分割のヒント
<a name="partitioning-hints"></a>

パーティショニングヒントは、エグゼキュターノード間のデータ分散を制御します。複数のパーティショニングヒントを指定すると、複数のノードが論理プランに挿入されますが、左端のヒントはオプティマイザによって選択されます。

### COALESCE
<a name="coalesce-hint"></a>

パーティションの数を指定されたパーティションの数に減らします。

*パラメータ:* 数値 (必須) - 1～2147483647 の正の整数である必要があります

*例:*

```
-- Reduce to 5 partitions
SELECT /*+ COALESCE(5) */ employee_id, salary
FROM employees;
```

### REPARTITION
<a name="repartition-hint"></a>

指定されたパーティショニング式を使用して、指定された数のパーティションにデータを再パーティション化します。ラウンドロビン分散を使用します。

*パラメータ :*
+ 数値 (オプション) - パーティションの数。1～2147483647 の正の整数である必要があります
+ 列識別子 (オプション) - パーティション分割する列。これらの列は入力スキーマに存在する必要があります。
+ 両方を指定した場合、数値が最初に来る必要があります

*例:*

```
-- Repartition to 10 partitions
SELECT /*+ REPARTITION(10) */ *
FROM employees;

-- Repartition by column
SELECT /*+ REPARTITION(department) */ *
FROM employees;

-- Repartition to 8 partitions by department
SELECT /*+ REPARTITION(8, department) */ *
FROM employees;

-- Repartition by multiple columns
SELECT /*+ REPARTITION(8, department, location) */ *
FROM employees;
```

### REPARTITION\$1BY\$1RANGE
<a name="repartition-by-range-hint"></a>

指定された列で範囲パーティショニングを使用して、指定された数のパーティションにデータを再パーティション化します。

*パラメータ :*
+ 数値 (オプション) - パーティションの数。1～2147483647 の正の整数である必要があります
+ 列識別子 (オプション) - パーティション分割する列。これらの列は入力スキーマに存在する必要があります。
+ 両方を指定した場合、数値が最初に来る必要があります

*例:*

```
SELECT /*+ REPARTITION_BY_RANGE(10) */ *
FROM employees;

-- Repartition by range on age column
SELECT /*+ REPARTITION_BY_RANGE(age) */ *
FROM employees;

-- Repartition to 5 partitions by range on age
SELECT /*+ REPARTITION_BY_RANGE(5, age) */ *
FROM employees;

-- Repartition by range on multiple columns
SELECT /*+ REPARTITION_BY_RANGE(5, age, salary) */ *
FROM employees;
```

### バランス
<a name="rebalance-hint"></a>

クエリ結果の出力パーティションのバランスを再調整して、すべてのパーティションが適切なサイズになるようにします (小さすぎず、大きすぎません）。これはベストエフォートオペレーションです。スキューがある場合、スキューされたパーティションを AWS Clean Rooms 分割して大きくなりすぎないようにします。このヒントは、ファイルが小さすぎたり大きすぎたりしないように、クエリの結果をテーブルに書き込む必要がある場合に役立ちます。

*パラメータ :*
+ 数値 (オプション) - パーティションの数。1～2147483647 の正の整数である必要があります
+ 列識別子 (オプション) - 列は SELECT 出力リストに表示される必要があります
+ 両方を指定した場合、数値が最初に来る必要があります

*例:*

```
-- Rebalance to 10 partitions
SELECT /*+ REBALANCE(10) */ employee_id, name
FROM employees;

-- Rebalance by specific columns in output
SELECT /*+ REBALANCE(employee_id, name) */ employee_id, name
FROM employees;

-- Rebalance to 8 partitions by specific columns
SELECT /*+ REBALANCE(8, employee_id, name) */ employee_id, name, department
FROM employees;
```

## 複数のヒントを組み合わせる
<a name="combining-multiple-hints"></a>

1 つのクエリで複数のヒントを指定するには、カンマで区切ります。

```
-- Combine join and partitioning hints
SELECT /*+ BROADCAST(d), REPARTITION(8) */ e.name, d.dept_name
FROM employees e JOIN departments d ON e.dept_id = d.id;

-- Multiple join hints
SELECT /*+ BROADCAST(s), MERGE(d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;

-- Hints within separate hint blocks within the same query
SELECT /*+ REPARTITION(100) */ /*+ COALESCE(500) */ /*+ REPARTITION_BY_RANGE(3, c) */ * FROM t;
```

## 考慮事項と制限事項
<a name="hints-usage-notes"></a>
+ ヒントは最適化の提案であり、コマンドではありません。クエリオプティマイザは、リソースの制約または実行条件に基づいてヒントを無視することがあります。
+ ヒントは、CreateAnalysisTemplate API と StartProtectedQuery APIs。
+ ヒントは SELECT キーワードの直後に配置する必要があります。
+ 名前付きパラメータはヒントではサポートされず、例外がスローされます。
+ REPARTITION amd REPARTITION\$1BY\$1RANGE ヒントの列名は、入力スキーマに存在する必要があります。
+ REBALANCE ヒントの列名は SELECT 出力リストに表示される必要があります。
+ 数値パラメータは 1～2147483647 の正の整数である必要があります。*1e1* のような科学的表記はサポートされていません
+ ヒントは、差分プライバシー SQL クエリではサポートされていません。
+ SQL クエリのヒントは、PySpark ジョブではサポートされていません。PySpark ジョブで実行プランのディレクティブを提供するには、データフレーム API を使用します。詳細については、[「Apache Spark DataFrame API Docs](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.hint.html)」を参照してください。