# DISTINCTCOUNTHLLPLUS

Returns an approximate distinct count using *HyperLogLogPlusPlus*. It also takes an optional second and third arguments to configure the *p*, *sp* for the *HyperLogLogPlus*.\
The optional parameter *p* defines the normal set precision and the parameter *sp* defines the sparse set precision.\
For accurate distinct counting, see [DISTINCTCOUNT](https://docs.pinot.apache.org/functions/aggregation/distinctcount).

## Signature

> DISTINCTCOUNTHLLPlus(colName) DISTINCTCOUNTHLLPlus(colName, p) DISTINCTCOUNTHLLPlus(colName, p, sp)

## Usage Examples

These examples are based on the [Batch Quick Start](https://docs.pinot.apache.org/start-here/quick-start#batch-processing).

```sql
select DISTINCTCOUNTHLLPLUS(teamID) AS value
from baseballStats 
```

| value |
| ----- |
| 158   |

```sql
select DISTINCTCOUNTHLLPLUS(teamID, 12) AS value
from baseballStats 
```

| value |
| ----- |
| 149   |

## DISTINCTCOUNTSMARTHLLPLUS

`DISTINCTCOUNTSMARTHLLPLUS` starts with exact distinct counting in a set and switches to HyperLogLog++ when the number of distinct values exceeds a threshold. This is useful when some groups stay small enough for exact counting while larger groups still need bounded memory usage.

### Signature

> DISTINCTCOUNTSMARTHLLPLUS(colName) DISTINCTCOUNTSMARTHLLPLUS(colName, 'threshold=;p=
>
> ;sp=')

### Parameters

* `colName` (required): Column to aggregate.
* `threshold` (optional): Number of distinct values Pinot keeps exactly before converting to HLL++. Default: `100000`. A non-positive value disables the conversion.
* `p` (optional): HyperLogLog++ normal precision after conversion. Default: `14`.
* `sp` (optional): HyperLogLog++ sparse precision after conversion. Default: `0`.

### Usage Examples

```sql
SELECT DISTINCTCOUNTSMARTHLLPLUS(teamID) AS value
FROM baseballStats
```

```sql
SELECT DISTINCTCOUNTSMARTHLLPLUS(teamID, 'threshold=10000;p=12') AS value
FROM baseballStats
```
