Interrogation de données à partir de lacs de données
Avant de commencer
Dans les exemples, les données publiques disponibles sur les trajets en taxi à New York pour les taxis jaunes en janvier 2022 sont utilisées. Pour suivre cet exemple, assurez-vous que les données se trouvent dans un compartiment accessible d' S3.
Pour accéder aux fichiers d' S3, vous devez disposer d'un compte AWS doté des autorisations nécessaires afin de fournir votre identifiant de clé d'accès et votre clé d'accès secrète.
AWS S3 exemple
1. Créez une source de données externe.
Les sources de données externes permettent à un administrateur d'accorder l'accès à S3 sans fournir les clés directement à un utilisateur.
Création d'une source de données :
a) Définissez ENABLE_EXTERNAL_DATASOURCE.
set ENABLE_EXTERNAL_DATASOURCE = 1;
b) Créez une source de données externe.
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCESSKEYID 'ACCESS KEY ID' SECRETACCESSKEY 'SECRET ACCESS KEY' BUCKET 'BUCKET' REGION 'REGION'
);
Exemple :
create EXTERNAL DATASOURCE AWS_TAXI_DATASET on AWSS3
using (
ACCESSKEYID '...' SECRETACCESSKEY '...' BUCKET 'nyc-tlc' REGION 'us-east-1'
);
Pour plus d'informations, voir Commande CREATE EXTERNAL DATASOURCE.
2. Créez une table externe.
Après avoir créé une source de données externe, vous pouvez créer une table externe qui accède aux données de taxi jaunes à partir de janvier 2022.
Vérifiez que vous disposez des privilèges nécessaires, comme décrit dans Privilèges de création de tables externes.
create EXTERNAL TABLE 'TABLE NAME' on 'DATA SOURCE'
using (
DATAOBJECT ('DATA OBJECT') FORMAT 'PARQUET'
);
L'argument DATAOBJECT doit faire référence à un fichier unique au format parquet. Si vous souhaitez interroger plusieurs fichiers " parquet, vous devez créer d'autres tables externes.
Exemple :
create EXTERNAL TABLE YELLOW_TAXI_JANUARY_2022 on AWS_TAXI_DATASET
using (
DATAOBJECT ('/trip data/yellow_tripdata_2022-01.parquet') FORMAT 'PARQUET'
);
3. Interroger vos données.
Vous pouvez interroger les tables externes au format parquet comme n'importe quelle autre table NPSaaS sans avoir à charger les données dans la base de données.
Les noms de colonnes du parquet sont insensibles à la casse, sauf si cela introduit une collision dans les noms de colonnes.
- Pour connaître le nombre total de passagers qui ont voyagé en taxi à New York en janvier 2022, exécutez :
select sum(passenger_count) from YELLOW_TAXI_JANUARY_2022;
Sortie :
SUM
-----
3324167
(1 row)
- Pour identifier le fournisseur qui a le plus de passagers entre 1:00 et 6:00, exécutez:
```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;
```
Sortie :
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```
Vous n’avez pas besoin de charger des tables entières dans l’ NPSaaS. *Parquet* est un format en colonnes, ce qui permet au moteur d’ NPSaaS s d’interroger un sous-ensemble de colonnes sans avoir à transférer la table entière sur Internet. Ainsi, si vous utilisez des tables de grande taille, vous pouvez réduire considérablement le trafic entrant et obtenir des temps de chargement plus rapides. Le moteur de requête utilise toujours uniquement les colonnes d'une table *parquet* qui sont nécessaires.
{: tip}
Dépannage des erreurs de délai d' AWS
Si vous rencontrez l'erreur suivante lors de requêtes Lakehouse :
AWS Error NETWORK_CONNECTION during HeadObject operation: curlCode: 28, Timeout was reached
Vous pouvez résoudre ce problème en définissant les valeurs de configuration suivantes :
set dlAWSConnectTimeout=10;
set dlAWSRetryStrategy=1;
set dlAWSNumRetries=10;
Ces paramètres permettent de régler le délai d'expiration de la connexion à l' AWS, la stratégie de relance et le nombre de tentatives afin de gérer plus efficacement les problèmes de connectivité réseau.
Exemple de BLOB Azure
Définir ENABLE_AZURE_DATALAKE_SUPPORT.
set ENABLE_AZURE_DATALAKE_SUPPORT = true;
1. Créez une source de données externe.
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCOUNT 'ACCOUNT NAME' ACCOUNTKEY 'SECRET ACCESS KEY' CONTAINER 'CONTAINER NAME'
);
ACCOUNTKEY peut être omis pour un accès anonyme.
create EXTERNAL DATASOURCE AZURE_TAXI_DATASET on AZUREBLOB
using (
ACCOUNT 'azureopendatastorage' CONTAINER 'nyctlc'
);
Pour plus d'informations, voir Commande CREATE EXTERNAL DATASOURCE.
2. Créez une table externe.
Après avoir créé une source de données externe, vous pouvez créer une table externe qui accède aux données des taxis verts de janvier 2018.
Vérifiez que vous disposez des privilèges nécessaires, comme décrit dans Privilèges de création de tables externes.
Exemple :
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. Interroger vos données.
Vous pouvez interroger les tables externes au format parquet comme n'importe quelle autre table NPSaaS sans avoir à charger les données dans la base de données.
Les noms de colonnes du parquet sont insensibles à la casse, sauf si cela introduit une collision dans les noms de colonnes.
- Pour connaître le nombre total de passagers qui ont voyagé en taxi à New York en janvier 2018, exécutez :
select sum(passengercount) from GREEN_TAXI_JANUARY_2018;
Sortie :
SUM
-----
1081283
(1 row)
- Pour identifier le fournisseur qui a le plus de passagers entre 1:00 et 6:00, exécutez:
```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;
```
Sortie :
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```