Consulta de datos desde lagos de datos
Antes de empezar
En los ejemplos, se utilizan los datos públicos de los registros de viajes en taxi de Nueva York correspondientes a los taxis amarillos de enero de 2022. Para seguir este ejemplo, asegúrate de que los datos se encuentren en un depósito de S3 accesible.
Para acceder a los archivos de S3, es necesario disponer de una cuenta de AWS con los permisos adecuados para proporcionar tu ID de clave de acceso y tu clave de acceso secreta.
AWS S3 Ejemplo
1. Cree un origen de datos externo.
Los orígenes de datos externos permiten a un administrador otorgar acceso a S3 sin proporcionar las claves directamente a un usuario.
Creación de fuentes de datos:
a) Establezca ENABLE_EXTERNAL_DATASOURCE.
set ENABLE_EXTERNAL_DATASOURCE = 1;
b) Cree un origen de datos externo.
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCESSKEYID 'ACCESS KEY ID' SECRETACCESSKEY 'SECRET ACCESS KEY' BUCKET 'BUCKET' REGION 'REGION'
);
Ejemplo:
create EXTERNAL DATASOURCE AWS_TAXI_DATASET on AWSS3
using (
ACCESSKEYID '...' SECRETACCESSKEY '...' BUCKET 'nyc-tlc' REGION 'us-east-1'
);
Para obtener más información, consulte Mandato CREATE EXTERNAL DATASOURCE.
2. Cree una tabla externa.
Después de crear un origen de datos externo, puede crear una tabla externa que acceda a los datos de taxi amarillo a partir de enero de 2022.
Asegúrese de que tiene los privilegios necesarios tal como se describe en Privilegios para crear tablas externas.
create EXTERNAL TABLE 'TABLE NAME' on 'DATA SOURCE'
using (
DATAOBJECT ('DATA OBJECT') FORMAT 'PARQUET'
);
El argumento DATAOBJECT debe hacer referencia a un único archivo en el formato parquet. Si desea realizar consultas a partir de varios ficheros " parquet ", deberá crear más tablas externas.
Ejemplo:
create EXTERNAL TABLE YELLOW_TAXI_JANUARY_2022 on AWS_TAXI_DATASET
using (
DATAOBJECT ('/trip data/yellow_tripdata_2022-01.parquet') FORMAT 'PARQUET'
);
3. Consulta tus datos.
Puede consultar tablas externas en formato parquet como cualquier otra tabla NPSaaS sin tener que cargar los datos en la base de datos.
Los nombres de columna del parquet no distinguen entre mayúsculas y minúsculas, a menos que introduzca una colisión en los nombres de columna.
- Para identificar el número total de pasajeros que viajaron en taxi en Nueva York en enero de 2022, ejecute:
select sum(passenger_count) from YELLOW_TAXI_JANUARY_2022;
Salida:
SUM
-----
3324167
(1 row)
- Para identificar el proveedor que tenía más pasajeros entre la 1:00 AM y las 6:00 AM, ejecute:
```sql {: codeblock}
select
VendorID,
sum("passenger_count") as passengers
from
YELLOW_TAXI_JANUARY_2022
where
tpep_pickup_datetime::time > '1:00am'
and tpep_pickup_datetime::time < '6:00am'
group by
VendorID
order by
passengers desc;
```
Salida:
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```
No es necesario cargar tablas completas en NPSaaS. *Parquet* es un formato columnar, por lo que el motor NPSaaS puede consultar un subconjunto de columnas sin tener que transferir la tabla completa a través de Internet. De esta forma, si trabaja con tablas grandes, puede reducir significativamente el tráfico de entrada y conseguir tiempos de carga más rápidos. El motor de consulta siempre utiliza sólo las columnas de una tabla *parquet* que son necesarias.
{: tip}
Solución de problemas relacionados con los errores de tiempo de espera de AWS
Si te encuentras con el siguiente error durante las consultas en Lakehouse:
AWS Error NETWORK_CONNECTION during HeadObject operation: curlCode: 28, Timeout was reached
Puede resolver este problema estableciendo los siguientes valores de configuración:
set dlAWSConnectTimeout=10;
set dlAWSRetryStrategy=1;
set dlAWSNumRetries=10;
Estos ajustes permiten configurar el tiempo de espera de la conexión de AWS, la estrategia de reintentos y el número de reintentos para gestionar los problemas de conectividad de red de forma más eficaz.
Ejemplo de Azure BLOB
Establece ENABLE_AZURE_DATALAKE_SUPPORT.
set ENABLE_AZURE_DATALAKE_SUPPORT = true;
1. Cree un origen de datos externo.
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCOUNT 'ACCOUNT NAME' ACCOUNTKEY 'SECRET ACCESS KEY' CONTAINER 'CONTAINER NAME'
);
ACCOUNTKEY puede omitirse para el acceso anónimo.
create EXTERNAL DATASOURCE AZURE_TAXI_DATASET on AZUREBLOB
using (
ACCOUNT 'azureopendatastorage' CONTAINER 'nyctlc'
);
Para obtener más información, consulte Mandato CREATE EXTERNAL DATASOURCE.
2. Cree una tabla externa.
Después de crear una fuente de datos externa, puede crear una tabla externa que acceda a los datos de taxis verdes de enero de 2018.
Asegúrese de que tiene los privilegios necesarios tal como se describe en Privilegios para crear tablas externas.
Ejemplo:
create EXTERNAL table GREEN_TAXI_JANUARY_2018 on AZURE_TAXI_DATASET
using (
DATAOBJECT ('/green/puYear=2018/puMonth=1/part-00036-tid-4753095944193949832-fee7e113-666d-4114-9fcb-bcd3046479f3-2606-1.c000.snappy.parquet') FORMAT 'PARQUET'
);
3. Consulta tus datos.
Puede consultar tablas externas en formato parquet como cualquier otra tabla NPSaaS sin tener que cargar los datos en la base de datos.
Los nombres de columna del parquet no distinguen entre mayúsculas y minúsculas, a menos que introduzca una colisión en los nombres de columna.
- Para identificar el número total de pasajeros que viajaron en taxi en Nueva York en enero de 2018, ejecuta:
select sum(passengercount) from GREEN_TAXI_JANUARY_2018;
Salida:
SUM
-----
1081283
(1 row)
- Para identificar el proveedor que tenía más pasajeros entre la 1:00 AM y las 6:00 AM, ejecute:
```sql {: codeblock}
select
VendorID,
sum(passengercount) as passengers
from
GREEN_TAXI_JANUARY_2018
where
lpeppickupdatetime::time > '1:00am'
and lpeppickupdatetime::time < '6:00am'
group by
VendorID
order by
passengers desc;
```
Salida:
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```