# h3TableSource

You can use **h3TableSource** to build layers and widgets using **tables** in your data warehouse that contain:

* **h3-based data:** a column containing an [h3 cell identifier](https://h3geo.org/docs/core-library/h3Indexing)
* **Point-based vector data**

{% hint style="success" %}
When you use point-based vector data in your h3TableSource, CARTO will dynamically aggregate it into h3 cells, using an aggregation expression of your choice.
{% endhint %}

## Usage

```typescript
import {h3TableSource} from '@carto/api-client';

const data = h3TableSource({
  accessToken: 'XXX',
  connectionName: 'carto_dw',
  tableName: 'carto-demo-data.demo_tables.h3_table',
  aggregationExp: 'SUM(population)'
});
```

## Options

```typescript
type H3TableSourceOptions = {
  tableName: string;
  aggregationExp: string;
  aggregationResLevel?: number;
  spatialDataColumn?: string;
  filters?: Filters;
  filtersLogicalOperator?: 'and' | 'or'; 
};
```

* **tableName**: The fully qualified name (FQN) of the table you want to retrieve from your data warehouse. For example, for a BigQuery connection, `carto-demo-data.demo_tables.h3_sample` would be a valid table name.
* **aggregationExp:** A valid SQL expression that will define how this source aggregates h3 cells starting from the base resolution into each parent h3 cell in lower zoom levels. For example, for an `aggregationExp` containing `AVG(income)` , each parent h3 cell will contain the average income from all its children.
  * For point-based, this defines the aggregation of the points for every zoom level.
* **aggregationResLevel** (optional): A number that expresses the resolution detail that will be used for each zoom level. By default this value is `4` .
  * Numbers lower than 4 will produce a less detailed visualization, with better performance.
  * Numbers higher than 4 will product a more detailed visualization, with worse performance.
* **spatialDataColumn** (optional): The name of the column that contains the geospatial information (geometries/geographies) that will be used for visualization and etc. By default, CARTO assumes this column is named `geom`.
* **filters** (optional): A valid [CARTO Filters](/carto-for-developers/reference/filters/column-filters.md) object, used to perform server-side filtering of this data source with column-based filters.
* **filtersLogicalOperator** (optional): Indicates whether `filters` are applied following an `AND` logic or an `OR` logic.

## Response

The response of `h3TableSource` is a promise that can be resolved and used in [layers](https://github.com/CartoDB/gitbook-documentation/blob/master/carto-for-developers/key-concepts/carto-for-deck.gl) and [widgets](/carto-for-developers/reference/carto-widgets-reference.md).

## Connection compatibility

| Connection Data Warehouse                                                      | Compatible           |
| ------------------------------------------------------------------------------ | -------------------- |
| [BigQuery](/carto-user-manual/connections/bigquery.md)                         | :white\_check\_mark: |
| [Snowflake](/carto-user-manual/connections/snowflake.md)                       | :white\_check\_mark: |
| [Redshift](/carto-user-manual/connections/redshift.md)                         | :white\_check\_mark: |
| [Databricks](/carto-user-manual/connections/databricks.md)                     | :white\_check\_mark: |
| [Oracle](/carto-user-manual/connections/oracle.md)                             | :white\_check\_mark: |
| [PostgreSQL](/carto-user-manual/connections/postgresql.md)                     | :white\_check\_mark: |
| [CARTO Data Warehouse](/carto-user-manual/connections/carto-data-warehouse.md) | :white\_check\_mark: |

## Layer compatibility

`h3TableSource` is compatible with the following layers from the `@deck.gl/carto` module:

* [H3TileLayer](https://deck.gl/docs/api-reference/carto/h3-tile-layer)

## Widget model compatibility

`h3TableSource` is compatible with the following widget models:

* [getFormula](/carto-for-developers/reference/carto-widgets-reference/models/getformula.md)
* [getCategories](/carto-for-developers/reference/carto-widgets-reference/models/getcategories.md)
* [getHistogram](/carto-for-developers/reference/carto-widgets-reference/models/gethistogram.md)
* [getRange](/carto-for-developers/reference/carto-widgets-reference/models/getrange.md)
* [getScatter](/carto-for-developers/reference/carto-widgets-reference/models/getscatter.md)
* [getTimeSeries](/carto-for-developers/reference/carto-widgets-reference/models/gettimeseries.md)
* [getTable](/carto-for-developers/reference/carto-widgets-reference/models/gettable.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.carto.com/carto-for-developers/reference/data-sources/h3tablesource.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
