レイクハウスプラットフォーム「Dremio Cloud」を試してみた
こんにちは!データ事業本部 サービスソリューション部の大高です。
みなさんは「レイクハウス」とは何かご存知でしょうか?私はよく理解しきれていません。
レイクハウスとは?
「データレイクとデータウェアハウスの長所を兼ね備え、ACIDトランザクションやタイムトラベルもできるもの」という認識をしていますが、具体的にどのようなものなのかは、ふわっとしたイメージしかありません。
なお、個人的によく利用させていただいている Snowflake の、以下の「データレイクハウスとは何か」ガイドページを参照すると、以下のように記載されていました。
データレイクハウスアーキテクチャは、オブジェクトストレージのファイルにテーブルメタデータを追加することで、データレイクとデータウェアハウスの長所を組み合わせるようになっています。この追加メタデータは、タイムトラベル、ACIDトランザクション、優れたプルーニング、スキーマ適用、データウェアハウスで一般的であるものの、データレイクには通常は備わっていない機能などの追加機能をデータレイクに提供します。
これを踏まえると、AWSにおいては AWS Lake Formation が相当するサービスになるかと思います。AWS Lake Formationについては、DevelopersIO 内の以下の記事一覧もご参照ください。
Dremio Cloud とは?
さて、そんな「レイクハウス」をフルマネージドなクラウドプラットフォームとして提供してくれるのが Dremio Cloud です。
今回は、この Dremio Cloud を使ってレイクハウスへの理解を深めたいと思います。
事前準備
今回はAWSを利用したいのですが、以下のページにあるように「事前準備」としてAWSアカウントとVPC、サブネットが必要となります。
こちらのドキュメントに記載されているように、作成しておきます。なお、リージョンはサポートされている us-west-2
のオレゴンリージョンを利用することにしました。
今回は以下のようなCloudFormationテンプレートを用意して作成してみました。
AWSTemplateFormatVersion: "2010-09-09"
Description: "Network Template."
Parameters:
ProjectName:
Type: String
Default: "project"
SubProjectName:
Type: String
Default: "sub"
VpcCidr:
Type: String
Default: "10.0.0.0/16"
PublicSubnet1Cidr:
Type: String
Default: "10.0.0.0/24"
PublicSubnet2Cidr:
Type: String
Default: "10.0.1.0/24"
Resources:
Vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VpcCidr
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Sub ${ProjectName}-${SubProjectName}-vpc
InternetGateway:
Type: AWS::EC2::InternetGateway
DependsOn: Vpc
Properties:
Tags:
- Key: Name
Value: !Sub ${ProjectName}-${SubProjectName}-ig
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref Vpc
InternetGatewayId: !Ref InternetGateway
PublicSubnet1:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Ref PublicSubnet1Cidr
VpcId: !Ref Vpc
AvailabilityZone:
Fn::Select:
- "0"
- Fn::GetAZs: ""
Tags:
- Key: Name
Value: !Sub ${ProjectName}-${SubProjectName}-public-subnet-1
PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref Vpc
Tags:
- Key: Name
Value: !Sub ${ProjectName}-${SubProjectName}-public-rt
RouteViaIg:
Type: AWS::EC2::Route
DependsOn:
- AttachGateway
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
PublicSubnet1RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet1
RouteTableId: !Ref PublicRouteTable
PublicSubnet2:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Ref PublicSubnet2Cidr
VpcId: !Ref Vpc
AvailabilityZone:
Fn::Select:
- "1"
- Fn::GetAZs: ""
Tags:
- Key: Name
Value: !Sub ${ProjectName}-${SubProjectName}-public-subnet-2
PublicSubnet2RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet2
RouteTableId: !Ref PublicRouteTable
S3VpcEndpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
RouteTableIds:
- !Ref PublicRouteTable
VpcId: !Ref Vpc
ServiceName: !Sub com.amazonaws.${AWS::Region}.s3
Outputs:
VpcId:
Value: !Ref Vpc
PublicSubnet1Id:
Value: !Ref PublicSubnet1
PublicSubnet2Id:
Value: !Ref PublicSubnet2
Dremio Cloud をはじめる
では準備ができたので、さっそく使ってみます。
サインアップ
まずは、以下のページからサインアップをします。
今回は S3 のデータを参照したいので「Preferred Deployment Method」は「I would like to test out a fully managed Data Lakehouse on AWS or Azure cloud storage」を選択しました。
アカウント作成を進めると、SSOかメールアドレスのどちらで作成するかを聞かれます。今回はメールアドレスでの作成としました。また、画面の右上に「North America」と表示されているプルダウンがありますが、ここからコントロールプレーンをどのリージョンに配置するか選択できます。2024/09 時点では「North America」または「Europe」が選択可能でした。今回は「North America」のままとします。
アカウント作成を進め、パスワードや組織名の設定を済ませると利用が開始できるようになります。
プロジェクトを作成する
開始画面では利用用途を聞かれているので「Cloud Apache Iceberg Lakehouse platform」にしました。これを進めていくと、ウィザード形式でプロジェクトが作成されていきます。
必要項目を入力しながら進めていきますが、ここの画面で「Launch CFT →」をクリックすると、AWS CloudFormation の管理コンソール画面が開くので、事前にテンプレートを適用したいAWSアカウントをブラウザで開いておいてから、ボタンをクリックします。
すると、AWSのCloudFormation管理コンソールが開くので、パラメータに事前に作成しておいたVPCやサブネットを指定して、スタックの作成を進めます。
今回はAWSのリージョンは us-west-2 (オレゴン)
を利用することにしました。
作成を始めると、dremio側の画面が以下のように表示されるので、すべて完了するまでしばらく待ちます。
CloudFormationテンプレートの適用が完了すると、Dremioの画面が自動的に Dremio Sonor の画面に遷移します。これでプロジェクトの作成も完了です。
サンプルデータに対してクエリを投げてみる
プロジェクトができたので、さっそくサンプルデータにクエリを投げてみました。
プロジェクトを作成した段階で、クエリは画面左側にあるサンプルデータに対して発行することができます。以下のようなSELECTクエリを発行します。
SELECT * FROM SampleDB."NYC-weather"
すると、以下のようにクエリ結果が表示されます。
今回は試せなかったのですが、画面右側の「Launch BI tool」から、BIツールでデータを見ることもできるようです。
また、画面の右下ではテーブルに対して Wiki ページを書くこともできます。データの概要をまとめておくのに役立ちそうですね。
更にもう少し、複雑なクエリとしてJOINしたクエリなども発行できます。
WITH trips AS (
SELECT * FROM Samples."samples.dremio.com"."NYC-taxi-trips-iceberg"
),
weather AS (
SELECT * FROM SampleDB."NYC-weather"
)
SELECT
*
FROM
trips
INNER JOIN weather ON
trips.pickup_datetime = weather."date"
;
データソースの追加
ここでは詳細は省きますが、様々なデータソースを追加することもできます。
画面左側の「Get started with Dremio > Add own your datasource」からデータソース追加ができます。
ダイアログに表示されているように、 S3 や Redshift などの様々なデータをデータソースとして追加できます。
これらも前述のサンプルデータと同様に、データをSQLクエリでSELECTすることができるので、様々なデータソースのデータを横断的に利用することが可能ですね。
ここで困った
今回 Dremio Cloud を試す際に、以下の困ったことがありました。
us-east-1 に対して、CloudFormation テンプレートを適用するとエラーが発生してスタックが作成できない
エラーメッセージとしては、以下の Dremio のトラブルシューティング ドキュメントにもある以下のエラーが発生していました。
Problem: Your project creation fails during the CFT or manual setup, and you see this error: Received response status [FAILED] from custom resource. Message returned: Reason: INVALID_ARGUMENT: Unable to create project <project-name>. Cannot access the project store. Check the path (<path>) and credentials (<credentials>) are valid. Please go back to Dremio UI and retry. (<RequestId>)
STSのエンドポイントは有効化されていたのですが、どうもうまく通信がされないようでエラーが発生しており、結局は構築先のリージョンを us-west-2
にすることで解決しました。
このようなトラブルシューティングのドキュメントが充実しているのは、とても優しいですね。
まとめ
以上、レイクハウスプラットフォーム「Dremio Cloud」を使ってみました。
セットアップは少しAWS側との設定でハマってしまったのですが、解決すればすぐに利用可能でした。公式にCloudFormationのテンプレートが用意されており、テンプレートを適用するだけになっているのが嬉しいですね。
また、各データソースを接続して横断的にデータを扱えるのは強いと思いました。データについてもIceberg形式で扱えるのでACIDトランザクションを使えるのも良かったです。
どなたかのお役に立てば幸いです。それでは!