從資料湖查詢資料
開始之前
在這些範例中,使用的是 2022 年 1 月黃色計程車的公開資料集「紐約搭計程車之旅 記錄資料」。 若要按照此範例操作,請確保資料位於可存取的 S3 儲存桶中。
若要存取 S3 中的檔案,您需要擁有一個具備適當權限的 AWS 帳戶,以便提供您的存取金鑰 ID 和秘密存取金鑰。
AWS S3 範例
1. 建立外部資料來源。
外部資料來源容許管理者授與 S3 的存取權,而不直接將金鑰提供給使用者。
資料來源創建:
a) 設定 ENABLE_EXTERNAL_DATASOURCE。
set ENABLE_EXTERNAL_DATASOURCE = 1;
b) 建立外部資料來源。
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCESSKEYID 'ACCESS KEY ID' SECRETACCESSKEY 'SECRET ACCESS KEY' BUCKET 'BUCKET' REGION 'REGION'
);
範例:
create EXTERNAL DATASOURCE AWS_TAXI_DATASET on AWSS3
using (
ACCESSKEYID '...' SECRETACCESSKEY '...' BUCKET 'nyc-tlc' REGION 'us-east-1'
);
如需相關資訊,請參閱 CREATE EXTERNAL DATASOURCE 指令。
2. 建立外部表格。
建立外部資料來源之後,您可以建立外部表格來存取 2022 年 1 月開始的黃色計程車資料。
確保您具有必要的專用權,如 建立外部表格的專用權 中所述。
create EXTERNAL TABLE 'TABLE NAME' on 'DATA SOURCE'
using (
DATAOBJECT ('DATA OBJECT') FORMAT 'PARQUET'
);
DATAOBJECT 引數必須以 parquet 格式參照單一檔案。 如果要從多個 parquet 檔案進行查詢,則必須建立更多外部表。
範例:
create EXTERNAL TABLE YELLOW_TAXI_JANUARY_2022 on AWS_TAXI_DATASET
using (
DATAOBJECT ('/trip data/yellow_tripdata_2022-01.parquet') FORMAT 'PARQUET'
);
3. 查詢您的資料。
您可以像其他任何NPSaaS表一樣查詢外部鑲木地板格式表,而無需將資料載入資料庫。
Parquet列名稱不區分大小寫,除非它在列名中引入衝突。
- 要確定 2022 年 1 月在紐約乘坐計程車出行的乘客總數,請運行:
select sum(passenger_count) from YELLOW_TAXI_JANUARY_2022;
輸出:
SUM
-----
3324167
(1 row)
- 若要識別在 1:00 AM 與 6:00 AM 之間乘客最多的供應商,請執行:
```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;
```
輸出:
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```
您無需將整個資料表載入至 NPSaaS。由於 *Parquet* 採用欄式格式,因此 NPSaaS 引擎可直接查詢部分欄位,無需透過網際網路傳輸整個資料表。 這樣,如果您使用大型表格,則可以大幅減少進入資料流量並達到更快的載入時間。 查詢引擎一律只會使用 *parquet* 表格中需要的直欄。
{: tip}
AWS 超時錯誤的疑難排解
若您在執行 Lakehouse 查詢時遇到以下錯誤:
AWS Error NETWORK_CONNECTION during HeadObject operation: curlCode: 28, Timeout was reached
您可以透過設定以下配置值來解決此問題:
set dlAWSConnectTimeout=10;
set dlAWSRetryStrategy=1;
set dlAWSNumRetries=10;
這些設定用於調整 AWS 的連線超時、重試策略及重試次數,以便更有效地處理網路連線問題。
Azure BLOB 範例
設定 ENABLE_AZURE_DATALAKE_SUPPORT。
set ENABLE_AZURE_DATALAKE_SUPPORT = true;
1. 建立外部資料來源。
create EXTERNAL DATASOURCE 'DATA SOURCE' on 'REMOTE SOURCE'
using (
ACCOUNT 'ACCOUNT NAME' ACCOUNTKEY 'SECRET ACCESS KEY' CONTAINER 'CONTAINER NAME'
);
對於匿名訪問,ACCOUNTKEY 可能會被省略。
create EXTERNAL DATASOURCE AZURE_TAXI_DATASET on AZUREBLOB
using (
ACCOUNT 'azureopendatastorage' CONTAINER 'nyctlc'
);
如需相關資訊,請參閱 CREATE EXTERNAL DATASOURCE 指令。
2. 建立外部表格。
建立外部資料來源後,您可以建立一個外部表來存取 2018 年 1 月以來的綠色計程車資料。
確保您具有必要的專用權,如 建立外部表格的專用權 中所述。
範例:
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. 查詢您的資料。
您可以像其他任何NPSaaS表一樣查詢外部鑲木地板格式表,而無需將資料載入資料庫。
Parquet列名稱不區分大小寫,除非它在列名中引入衝突。
- 若要確定 2018 年 1 月在紐約搭乘計程車的乘客總數,請執行:
select sum(passengercount) from GREEN_TAXI_JANUARY_2018;
輸出:
SUM
-----
1081283
(1 row)
- 若要識別在 1:00 AM 與 6:00 AM 之間乘客最多的供應商,請執行:
```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;
```
輸出:
```sql {: codeblock}
VendorID| passengers
--------|----------
2 | 122251
1 | 40807
6 |
5 |
(4 rows)
```