

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Petunjuk
<a name="sql-commands-hints-spark"></a>

Petunjuk untuk analisis SQL memberikan arahan pengoptimalan yang memandu strategi eksekusi kueri AWS Clean Rooms, memungkinkan Anda meningkatkan kinerja kueri dan mengurangi biaya komputasi. Petunjuk menunjukkan bagaimana mesin analitik Spark harus menghasilkan rencana pelaksanaannya.

## Sintaksis
<a name="hints-syntax"></a>

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

Petunjuk disematkan dalam kueri SQL menggunakan sintaks gaya komentar dan harus ditempatkan langsung setelah kata kunci SELECT.

## Jenis petunjuk yang didukung
<a name="supported-hint-types"></a>

AWS Clean Rooms mendukung dua kategori petunjuk: Gabung petunjuk dan petunjuk Partisi.

**Topics**
+ [Bergabunglah dengan petunjuk](join-hints.md)
+ [Petunjuk partisi](partitioning-hints.md)

# Bergabunglah dengan petunjuk
<a name="join-hints"></a>

Petunjuk bergabung menyarankan strategi bergabung untuk eksekusi kueri. Sintaks, argumen, dan beberapa contoh berasal dari [Apache Spark SQL](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#join-hints) Reference untuk informasi lebih lanjut

### MENYIARKAN
<a name="broadcast-hint"></a>

Menyarankan bahwa AWS Clean Rooms gunakan broadcast join. Sisi gabungan dengan petunjuk akan disiarkan terlepas dari autoBroadcastJoin Threshold. Jika kedua sisi gabungan memiliki petunjuk siaran, yang dengan ukuran lebih kecil (berdasarkan statistik) akan disiarkan.

*Alias:* BROADCASTJOIN, MAPJOIN

*Parameter:* Pengidentifikasi tabel (opsional)

*Contoh:*

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

Menyarankan bahwa AWS Clean Rooms gunakan shuffle sort merge join.

*Alias:* SHUFFLE\$1MERGE, MERGEJOIN

*Parameter:* Pengidentifikasi tabel (opsional)

*Contoh:*

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

Menyarankan bahwa AWS Clean Rooms gunakan shuffle hash join. Jika kedua sisi memiliki petunjuk hash acak, pengoptimal kueri memilih sisi yang lebih kecil (berdasarkan statistik) sebagai sisi build.

*Parameter:* Pengidentifikasi tabel (opsional)

*Contoh:*

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

Menyarankan bahwa AWS Clean Rooms gunakan gabungan loop shuffle-and-replicate bersarang.

*Parameter:* Pengidentifikasi tabel (opsional)

*Contoh:*

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

### Petunjuk Pemecahan Masalah di Spark SQL
<a name="join-hint-warning-cases"></a>

Tabel berikut menunjukkan skenario umum di mana petunjuk tidak diterapkan di SparkSQL. Untuk informasi tambahan, lihat [Pertimbangan dan batasan](sql-commands-hints-spark.md#hints-usage-notes).

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

# Petunjuk partisi
<a name="partitioning-hints"></a>

Petunjuk partisi mengontrol distribusi data di seluruh node pelaksana. Ketika beberapa petunjuk partisi ditentukan, beberapa node dimasukkan ke dalam rencana logis, tetapi petunjuk paling kiri dipilih oleh pengoptimal.

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

Mengurangi jumlah partisi ke jumlah partisi yang ditentukan.

*Parameter:* Nilai numerik (wajib) - harus berupa bilangan bulat positif antara 1 dan 2147483647

*Contoh:*

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

### PARTISI ULANG
<a name="repartition-hint"></a>

Repartisi data ke jumlah partisi yang ditentukan menggunakan ekspresi partisi yang ditentukan. Menggunakan distribusi round-robin.

*Parameter:*
+ Nilai numerik (opsional) - jumlah partisi; Harus berupa bilangan bulat positif antara 1 dan 2147483647
+ Pengidentifikasi kolom (opsional) - kolom untuk dipartisi oleh; Kolom ini harus ada dalam skema input.
+ Jika keduanya ditentukan, nilai numerik harus didahulukan

*Contoh:*

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

Repartisi data ke jumlah partisi yang ditentukan menggunakan partisi rentang pada kolom yang ditentukan.

*Parameter:*
+ Nilai numerik (opsional) - jumlah partisi; Harus berupa bilangan bulat positif antara 1 dan 2147483647
+ Pengidentifikasi kolom (opsional) - kolom untuk dipartisi oleh; Kolom ini harus ada dalam skema input.
+ Jika keduanya ditentukan, nilai numerik harus didahulukan

*Contoh:*

```
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;
```

### MENYEIMBANGKAN KEMBALI
<a name="rebalance-hint"></a>

Menyeimbangkan kembali partisi keluaran hasil kueri sehingga setiap partisi berukuran wajar (tidak terlalu kecil dan tidak terlalu besar). Ini adalah operasi upaya terbaik: jika ada kemiringan, AWS Clean Rooms akan membagi partisi miring untuk membuatnya tidak terlalu besar. Petunjuk ini berguna ketika Anda perlu menulis hasil kueri ke tabel untuk menghindari file yang terlalu kecil atau terlalu besar.

*Parameter:*
+ Nilai numerik (opsional) - jumlah partisi; Harus berupa bilangan bulat positif antara 1 dan 2147483647
+ Pengidentifikasi kolom (opsional) - kolom harus muncul di daftar keluaran SELECT
+ Jika keduanya ditentukan, nilai numerik harus didahulukan

*Contoh:*

```
-- 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;
```

## Menggabungkan beberapa petunjuk
<a name="combining-multiple-hints"></a>

Anda dapat menentukan beberapa petunjuk dalam satu kueri dengan memisahkannya dengan koma:

```
-- 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;
```

## Pertimbangan dan batasan
<a name="hints-usage-notes"></a>
+ Petunjuk adalah saran pengoptimalan, bukan perintah. Pengoptimal kueri dapat mengabaikan petunjuk berdasarkan batasan sumber daya atau kondisi eksekusi.
+ Petunjuk disematkan langsung dalam string kueri SQL untuk keduanya dan. CreateAnalysisTemplate StartProtectedQuery APIs
+ Petunjuk harus ditempatkan langsung setelah kata kunci SELECT.
+ Parameter bernama tidak didukung dengan petunjuk dan akan memberikan pengecualian.
+ Nama kolom di REPARTITION amd REPARTITION\$1BY\$1RANGE petunjuk harus ada dalam skema input.
+ Nama kolom dalam petunjuk REBALANCE harus muncul di daftar keluaran SELECT.
+ Parameter numerik harus bilangan bulat positif antara 1 dan 2147483647. Notasi ilmiah seperti *1e1* tidak didukung
+ Petunjuk tidak didukung dalam kueri SQL Privasi Diferensial.
+ Petunjuk untuk kueri SQL tidak didukung dalam pekerjaan. PySpark Untuk memberikan arahan untuk rencana eksekusi dalam PySpark pekerjaan, gunakan API bingkai data. Lihat [Apache Spark DataFrame API Docs](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.hint.html) untuk informasi selengkapnya. 