

# Asignación de tipos y formatos de datos
<a name="aurora-analytics-type-mapping"></a>

Al crear una tabla externa, la extensión asigna los tipos de datos de Parquet o Iceberg a los tipos de datos de PostgreSQL. En esta sección, se describe cómo Aurora PostgreSQL realiza la asignación de tipos y qué tipos de datos de PostgreSQL se admiten.

**Topics**
+ [Asignación de tipos de datos automática](#aurora-analytics-type-mapping-automatic)
+ [Los tipos no se admiten para la inferencia automática de esquemas](#aurora-analytics-type-mapping-unsupported-inference)
+ [Tipos de datos para columnas de tablas externas](#aurora-analytics-type-mapping-column-types)

## Asignación de tipos de datos automática
<a name="aurora-analytics-type-mapping-automatic"></a>

Al crear una tabla externa sin especificar definiciones de columnas (con paréntesis vacíos), Aurora PostgreSQL deduce automáticamente los nombres de las columnas y los tipos de datos del origen de datos remoto.

En la tabla siguiente, se muestra cómo se deducen los tipos de orígenes que existen en Parquet y en Iceberg.


**Inferencia de tipos para los tipos de origen de Parquet e Iceberg**  

| Tipo de Parquet | Tipo Iceberg | Tipo de PostgreSQL | 
| --- | --- | --- | 
| BOOLEAN | boolean | boolean | 
| INT32 | int | integer | 
| INT64 | long | bigint | 
| FLOAT | float | real | 
| DOUBLE | double | double precision | 
| DECIMAL(p,s) | decimal(p,s) | numeric(p,s) | 
| BYTE\_ARRAY | binary | bytea | 
| FIXED\_LEN\_BYTE\_ARRAY | fixed(L) | bytea | 
| STRING (UTF-8) | string | text | 
| UUID | uuid | uuid | 
| DATE | date | date | 
| TIME (milis/micros, isAdjustedToUTC = false) | time | time | 
| TIMESTAMP (micros/milis, isAdjustedToUTC = false) | timestamp | timestamp | 
| TIMESTAMP (nanos, isAdjustedToUTC = false) | timestamp\_ns | timestamp | 
| TIMESTAMP (micros/milis, isAdjustedToUTC = true) | timestamptz | timestamptz | 
| TIMESTAMP (nanos, isAdjustedToUTC = true) | timestamptz\_ns | timestamptz | 

Los siguientes tipos de Parquet adicionales no tienen un equivalente a Iceberg y se deducen como se muestra.


**Inferencia de tipos para los tipos de origen solo de Parquet**  

| Tipo de Parquet | Tipo de PostgreSQL | 
| --- | --- | 
| INT\_8 (1-byte int) | smallint | 
| INT16 | smallint | 
| UNSIGNED INT8 | smallint | 
| UNSIGNED INT16 | integer | 
| UNSIGNED INT32 | bigint | 
| UNSIGNED INT64 | numeric(20,0) | 
| ENUM (lógica) | varchar | 
| JSON | json | 
| TIME (milis/micros, isAdjustedToUTC = true) | timetz | 
| Marca temporal antigua (nanosegundos) | timestamp | 
| INTERVAL | interval | 
| BIT | varbit | 

## Los tipos no se admiten para la inferencia automática de esquemas
<a name="aurora-analytics-type-mapping-unsupported-inference"></a>

Los siguientes tipos de orígenes remotos no se pueden deducir automáticamente. Al crear una tabla externa con una lista de columnas vacía y el origen contiene uno de estos tipos, `CREATE FOREIGN TABLE` devuelve un error:
+ `STRUCT`
+ `MAP`
+ `LIST`
+ `GEOMETRY`
+ `GEOGRAPHY`

Puede gestionar estas columnas de dos maneras:
+ **Omitirlas**: si se configura `aurora_analytics.skip_unsupported_columns` en `true`, la inferencia automática del esquema omite las columnas no compatibles y crea la tabla externa con las columnas restantes. Se emite un aviso por cada columna omitida.
+ **Defínalas manualmente**: especifique la lista de columnas de forma explícita y declare las columnas de estructura, mapa o lista anidada como `json` (o `varchar` para una representación de texto nativo). A continuación, Aurora PostgreSQL devuelve los datos en formato JSON estándar.

```
CREATE FOREIGN TABLE my_table (
    id integer,
    name text,
    struct_col json,
    map_col json,
    list_of_struct json
)
SERVER aurora_analytics_server
OPTIONS (location 's3://my-bucket/data/', format 'parquet');
```

## Tipos de datos para columnas de tablas externas
<a name="aurora-analytics-type-mapping-column-types"></a>

Todos los tipos de datos de PostgreSQL funcionan en consultas de tablas externas (en expresiones, resultados y uniones) igual que en cualquier consulta de PostgreSQL. En las siguientes secciones, se trata de una cuestión más específica: en qué tipos se puede definir una columna de tabla externa y en qué tipos puede leer el motor de análisis una columna de tipo Parquet o Iceberg. Un tipo que no se admita aquí no se puede utilizar como tipo de columna de tabla externa, pero puede seguir utilizándolo libremente en cualquier otro lugar de la consulta.

### Tipos totalmente compatibles
<a name="aurora-analytics-type-mapping-fully-supported"></a>

Los siguientes tipos de datos de PostgreSQL son totalmente compatibles como tipos de columnas de tablas externas: `BOOLEAN`, `BYTEA`, `INTEGER`, `SMALLINT`, `BIGINT`, `REAL`, `DOUBLE PRECISION`, `TEXT`, `JSON`, `DATE` y `UUID`.

### Tipos compatibles parcialmente
<a name="aurora-analytics-type-mapping-partially-supported"></a>

Se admiten con las siguientes limitaciones los siguientes tipos de datos de PostgreSQL.


**Tipos de columnas de tablas externas parcialmente compatibles**  

| Tipo de PostgreSQL | Limitación | 
| --- | --- | 
| VARCHAR, BPCHAR | No se admiten restricciones de longitud (por ejemplo, VARCHAR(n) o CHAR(n)). | 
| NUMERIC, DECIMAL | La precisión (P) y la escala (S) deben definirse explícitamente. P debe estar comprendido entre 1 y 38. S debe estar comprendido entre 0 y P. | 
| TIME, TIMETZ | Solo se admite la precisión máxima (6). | 
| TIMESTAMP, TIMESTAMPTZ | Solo se admite la precisión máxima (6). | 
| BIT, VARBIT | No se admiten restricciones de longitud (por ejemplo, BIT(n) o VARBIT(n)). | 
| INTERVAL | Solo se admite la precisión máxima (6). No se admiten los valores especiales inf, -inf y NaN. | 

### No se admiten tipos para columnas de tablas externas
<a name="aurora-analytics-type-mapping-not-supported"></a>

Los siguientes tipos de datos de PostgreSQL no se pueden utilizar como tipos de columnas de tablas externas. Si una columna de tabla externa se define como uno de estos tipos (o una columna de origen se asigna a uno durante la inferencia del esquema), `CREATE FOREIGN TABLE` devuelve un error. Puede seguir utilizando estos tipos en otros lugares de una consulta (por ejemplo, crear un valor `JSONB` en la lista `SELECT` o filtrar con una matriz) porque la restricción está en la definición de la columna, no en el uso de la consulta.


**Tipos de columnas de tablas externas no compatibles**  

| Tipo de PostgreSQL | Notas | 
| --- | --- | 
| JSONB | — | 
| SMALLSERIAL, SERIAL, BIGSERIAL | — | 
| Tipos de matriz | Por ejemplo, INTEGER[], TEXT[]. | 
| ENUM | — | 
| INET, CIDR, MACADDR, MACADDR8 | — | 
| MONEY | — | 
| Tipos de rangos | Por ejemplo, INT4RANGE, TSRANGE, DATERANGE. | 
| Tipos geométricos | Por ejemplo, POINT, LINE, POLYGON, CIRCLE. | 
| TSVECTOR, TSQUERY | — | 
| XML | — | 

**nota**  
Cuando Aurora PostgreSQL deduce automáticamente el esquema de una tabla externa y el origen contiene columnas que no puede asignar, se produce un error de forma predeterminada. En su lugar, establezca el parámetro `aurora_analytics.skip_unsupported_columns` en `true` para omitir esas columnas y crear la tabla externa con el resto de las columnas compatibles.