データレイクからのデータの照会
開始前に
この例では、2022年1月のイエローキャブに関する、一般に公開されている ニューヨークのタクシー運行記録データを使用しています。 この例を実行するには、データがアクセス可能な S3 バケットにあることを確認してください。
S3 のファイルにアクセスするには、アクセスキーIDとシークレットアクセスキーを提供できる適切な権限を持つ AWS アカウントが必要です。
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テーブルと同じように外部パーケットフォーマットテーブルをクエリできます。
寄木細工のカラム名は、カラム名に衝突が生じない限り、大文字と小文字を区別しない。
- 2022年1月にニューヨークでタクシーを利用した乗客の総数を確認する:
select sum(passenger_count) from YELLOW_TAXI_JANUARY_2022;
出力:
SUM
-----
3324167
(1 row)
- 午前 1:00 から午前 6:00 の間に乗客が最も多かったベンダーを識別するには、以下を実行します。
```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 の接続タイムアウト、再試行戦略、および再試行回数を調整し、ネットワーク接続の問題により効果的に対処できるようになります。
AzureBLOBの例
**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テーブルと同じように外部パーケットフォーマットテーブルをクエリできます。
寄木細工のカラム名は、カラム名に衝突が生じない限り、大文字と小文字を区別しない。
- 2018年1月にニューヨークでタクシーを利用した乗客の総数を確認するために、実行する:
select sum(passengercount) from GREEN_TAXI_JANUARY_2018;
出力:
SUM
-----
1081283
(1 row)
- 午前 1:00 から午前 6:00 の間に乗客が最も多かったベンダーを識別するには、以下を実行します。
```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)
```