Daten aus Data Lakes abfragen
Vorbereitende Schritte
In den Beispielen wird der öffentlich zugängliche Wert für Taxifahrt in New York Daten erfassen gelbe Taxis im Januar 2022 verwendet. Um diesem Beispiel zu folgen, stellen Sie sicher, dass sich die Daten in einem zugänglichen S3-Bucket befinden.
Um auf S3-Dateien zugreifen zu können, benötigen Sie ein AWS-Konto mit den entsprechenden Berechtigungen, um Ihre Zugriffsschlüssel-ID und Ihren geheimen Zugriffsschlüssel anzugeben.
AWS S3 Beispiel
1. Erstellen Sie eine externe Datenquelle.
Externe Datenquellen ermöglichen es einem Administrator, Zugriff auf S3 zu erteilen, ohne die Schlüssel direkt für einen Benutzer bereitzustellen.
Datenquellenerstellung:
a) Definieren Sie ENABLE_EXTERNAL_DATASOURCE.
set ENABLE_EXTERNAL_DATASOURCE = 1;
b) Erstellen Sie eine externe Datenquelle
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCESSKEYID 'ACCESS KEY ID' SECRETACCESSKEY 'SECRET ACCESS KEY' BUCKET 'BUCKET' REGION 'REGION'
);
Beispiel:
create EXTERNAL DATASOURCE AWS_TAXI_DATASET on AWSS3
using (
ACCESSKEYID '...' SECRETACCESSKEY '...' BUCKET 'nyc-tlc' REGION 'us-east-1'
);
Weitere Informationen finden Sie unter Befehl CREATE EXTERNAL DATASOURCE.
2. Erstellen Sie eine externe Tabelle.
Nachdem Sie eine externe Datenquelle erstellt haben, können Sie eine externe Tabelle erstellen, die ab Januar 2022 auf die gelben Taxidaten zugreift.
Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen (siehe Berechtigungen zum Erstellen externer Tabellen).
create EXTERNAL TABLE 'TABLE NAME' on 'DATA SOURCE'
using (
DATAOBJECT ('DATA OBJECT') FORMAT 'PARQUET'
);
Das Argument DATAOBJECT muss auf eine einzelne Datei im Format parquet verweisen. Wenn Sie mehrere parquet-Dateien abfragen möchten, müssen Sie weitere externe Tabellen erstellen.
Beispiel:
create EXTERNAL TABLE YELLOW_TAXI_JANUARY_2022 on AWS_TAXI_DATASET
using (
DATAOBJECT ('/trip data/yellow_tripdata_2022-01.parquet') FORMAT 'PARQUET'
);
3. Abfragen Ihrer Daten.
Sie können externe Tabellen im Parquet-Format wie jede andere NPSaaS Tabelle abfragen, ohne die Daten in die Datenbank laden zu müssen.
Bei den Parquet-Spaltennamen wird die Groß-/Kleinschreibung nicht beachtet, sofern dadurch keine Kollision bei den Spaltennamen auftritt.
- Um die Gesamtzahl der Passagiere zu ermitteln, die im Januar 2022 mit Taxis in New York gefahren sind, geben Sie Folgendes ein:
select sum(passenger_count) from YELLOW_TAXI_JANUARY_2022;
Ausgabe:
SUM
-----
3324167
(1 row)
- Führen Sie den folgenden Befehl aus, um den Anbieter zu ermitteln, der die meisten Passagiere zwischen 1:00 und 6:00 Uhr hatte:
```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;
```
Ausgabe:
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```
Sie müssen nicht ganze Tabellen in NPSaaS laden. *Parquet* ist ein spaltenorientiertes Format, sodass die NPSaaS-Engine eine Teilmenge von Spalten abfragen kann, ohne die gesamte Tabelle über das Internet übertragen zu müssen. Wenn Sie auf diese Weise mit großen Tabellen arbeiten, können Sie den Eingangsdatenverkehr erheblich reduzieren und schnellere Ladezeiten erreichen. Die Abfrageengine verwendet immer nur die Spalten aus einer *Parquet*-Tabelle, die erforderlich sind.
{: tip}
Fehlerbehebung bei Zeitüberschreitungsfehlern bei AWS
Wenn bei Lakehouse-Abfragen der folgende Fehler auftritt:
AWS Error NETWORK_CONNECTION during HeadObject operation: curlCode: 28, Timeout was reached
Sie können dieses Problem beheben, indem Sie die folgenden Konfigurationswerte festlegen:
set dlAWSConnectTimeout=10;
set dlAWSRetryStrategy=1;
set dlAWSNumRetries=10;
Mit diesen Einstellungen lassen sich das Zeitlimit für die Verbindung zu AWS, die Wiederholungsstrategie und die Anzahl der Wiederholungsversuche anpassen, um Probleme mit der Netzwerkverbindung effektiver zu beheben.
Azure BLOB-Beispiel
Legen Sie ENABLE_AZURE_DATALAKE_SUPPORT fest.
set ENABLE_AZURE_DATALAKE_SUPPORT = true;
1. Erstellen Sie eine externe Datenquelle.
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCOUNT 'ACCOUNT NAME' ACCOUNTKEY 'SECRET ACCESS KEY' CONTAINER 'CONTAINER NAME'
);
Für den anonymen Zugriff kann der ACCOUNTKEY weggelassen werden.
create EXTERNAL DATASOURCE AZURE_TAXI_DATASET on AZUREBLOB
using (
ACCOUNT 'azureopendatastorage' CONTAINER 'nyctlc'
);
Weitere Informationen finden Sie unter Befehl CREATE EXTERNAL DATASOURCE.
2. Erstellen Sie eine externe Tabelle.
Nachdem Sie eine externe Datenquelle erstellt haben, können Sie eine externe Tabelle erstellen, die auf die Daten zum grünen Taxi ab Januar 2018 zugreift.
Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen (siehe Berechtigungen zum Erstellen externer Tabellen).
Beispiel:
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. Abfragen Ihrer Daten.
Sie können externe Tabellen im Parquet-Format wie jede andere NPSaaS Tabelle abfragen, ohne die Daten in die Datenbank laden zu müssen.
Bei den Parquet-Spaltennamen wird die Groß-/Kleinschreibung nicht beachtet, sofern dadurch keine Kollision bei den Spaltennamen auftritt.
- Um die Gesamtzahl der Passagiere zu ermitteln, die im Januar 2018 mit dem Taxi in New York gefahren sind, geben Sie Folgendes ein:
select sum(passengercount) from GREEN_TAXI_JANUARY_2018;
Ausgabe:
SUM
-----
1081283
(1 row)
- Führen Sie den folgenden Befehl aus, um den Anbieter zu ermitteln, der die meisten Passagiere zwischen 1:00 und 6:00 Uhr hatte:
```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;
```
Ausgabe:
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```