
Iceberg は、ストレージをコンピューティングから分離し、ACID トランザクションをサポートすることで、データの相互運用性の基盤を提供し、企業が複数のプラットフォームを活用してさまざまな分析ニーズに対応できるようにします。
組織がハイブリッドクラウドやマルチクラウドアーキテクチャを採用するケースが増えるにつれ、様々なデータプラットフォームとシームレスに統合できる柔軟なソリューションが求められています。このブログでは、SnowflakeとSingleStore Helios®をIcebergと連携させ、データ処理と分析を最適化する方法について解説します。
SingleStore による Iceberg のサポート: 主なユースケース
SingleStore はApache Iceberg をネイティブサポートしており、組織は Iceberg で管理されるデータのための高性能分析エンジンとしてこれを利用できます。主なユースケースとしては、以下のようなものがあります。
- BI と顧客向け分析の高速化。SingleStoreの分散 SQL エンジンは、超低レイテンシと高い同時実行性を実現し、リアルタイムのデータアクセスを必要とするダッシュボードや外部向けアプリケーションに最適なレイヤーです。
- 低レイテンシのアプリケーション層。SingleStoreのリアルタイム取り込みと高速クエリ実行は、レコメンデーションエンジン、不正検出システム、インタラクティブ分析アプリケーションなど、ミリ秒レベルの応答時間を必要とするアプリケーションに直接データを提供するのに最適です。
ステップバイステップガイド: SnowflakeとSingleStoreを使用した高速分析
このシナリオでは、Snowflake がデータ所有者として機能し、AWS の S3 ストレージにバックアップされた Iceberg テーブルを保存し、クラウド管理サービスである SingleStore Helios がデータを高性能エンジンに取り込むことで分析を高速化します。
高レベルのアーキテクチャは次のようになります。
.png?width=1024&disable=upscale&auto=webp)
以下に、設定方法を段階的に説明するガイドを示します (このチュートリアルの一部は、Snowflake の Iceberg ガイドを参照していることに注意してください。詳細については、こちらをご覧ください)。
AWSのセットアップ。まず、Icebergのデータとメタデータを保存するためのS3バケットを作成する必要があります。このバケットは、Snowflakeアカウントと同じリージョンに配置する必要があります。
S3バケットを作成します。AWSコンソールにサインインします。Snowflakeアカウントと同じリージョンにいることを確認し、S3管理に移動して「バケットの作成」ボタンをクリックします。バケットに名前を付け、その他の設定はそのままにして、バケットを作成します。
IAMポリシーを作成します。IAM管理に移動し、「アクセス管理」の「アカウント設定」をクリックし、AWSリージョンのSTSステータスがアクティブになっていることを確認します。次に、「アクセス管理」の「ポリシー」をクリックし、「ポリシーの作成」ボタンをクリックします。JSONポリシーエディタを使用して、以下のコードを貼り付けます。
1{2 "Version": "2012-10-17",3 "Statement": [4 {5 "Effect": "Allow",6 "Action": [7 "s3:PutObject",8 "s3:GetObject",9 "s3:GetObjectVersion",10 "s3:DeleteObject",11 "s3:DeleteObjectVersion"12 ],13 "Resource": "arn:aws:s3:::<my_bucket>/*"14 },15 {16 "Effect": "Allow",17 "Action": [18 "s3:ListBucket",19 "s3:GetBucketLocation"20 ],21 "Resource": "arn:aws:s3:::<my_bucket>",22 "Condition": {23 "StringLike": {24 "s3:prefix": [25 "*"26 ]27 }28 }29 }30 ]31}
ここで、「<my_bucket>」をS3バケットの名前に置き換えてください。これにより、バケットへのデータの読み取りと書き込みの権限を持つポリシーが作成されます(Snowflakeはこれを使用してIcebergのデータを管理します)。ポリシーに名前を付けて作成してください。
IAMロールを作成します。次に、「アクセス管理」の「ロール」に移動し、「ロールの作成」ボタンをクリックします。「AWSアカウント」と「このアカウント」を選択し、「外部IDが必要」オプションをオンにします。ここに「iceberg_external_table_id」のような記述子を入力します。
.png?width=1024&disable=upscale&auto=webp)
「次へ」をクリックし、前の手順で作成したポリシーを選択し、ロール名を入力して作成します。新しいロールのARN(Amazonリソースネーム)は次のステップで必要になるので、メモしておいてください。
Snowflakeのセットアップ。このデモでは、SnowflakeのTPC-Hサンプルデータセットを利用します。
外部ボリュームを作成します。まず、データが存在するS3バケットを指す外部ボリュームを作成します。これにより、SnowflakeはS3上のIcebergデータと連携できるようになります。バケット名、AWSロールのARN、そして前の手順で使用した正しい外部IDを入力してください。
1CREATE OR REPLACE EXTERNAL VOLUME iceberg_external_volume2 STORAGE_LOCATIONS =3 (4 (5 NAME = 'my-s3-us-west-2'6 STORAGE_PROVIDER = 'S3'7 STORAGE_BASE_URL = 's3://<my_bucket>/'8 STORAGE_AWS_ROLE_ARN = '<my-arn>'9 STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'10 )11 );
1DESC EXTERNAL VOLUME iceberg_external_volume;
1{2 "Version": "2012-10-17",3 "Statement": [4 {5 "Sid": "",6 "Effect": "Allow",7 "Principal": {8 "AWS": "<snowflake_user_arn>"9 },10 "Action": "sts:AssumeRole",11 "Condition": {12 "StringEquals": {13 "sts:ExternalId": "<iceberg_table_external_id>"14 }15 }16 }17 ]18}
上記の括弧内の値を、Snowflake ARN (外部ボリュームから) と、以前に AWS ロールを定義するために使用した外部 ID に置き換えます。
b. Icebergテーブルを作成します。次に、SnowflakeでCREATE ICEBERG TABLE構文を使用してIcebergテーブルを作成し、データをロードします。これにより、顧客(INSERTステートメント経由)と国(CTASステートメント経由)の2つのエンティティのデータがロードされます。
1CREATE OR REPLACE ICEBERG TABLE customer_iceberg (2 c_custkey INTEGER,3 c_name STRING,4 c_address STRING,5 c_nationkey INTEGER,6 c_phone STRING,7 c_acctbal INTEGER,8 c_mktsegment STRING,9 c_comment STRING10)11 CATALOG = 'SNOWFLAKE'12 EXTERNAL_VOLUME = 'iceberg_external_volume'13 BASE_LOCATION = 'customer_iceberg';14 15INSERT INTO customer_iceberg16 SELECT * FROM snowflake_sample_data.tpch_sf1.customer;17 18CREATE OR REPLACE ICEBERG TABLE nation_iceberg (19 n_nationkey INTEGER,20 n_name STRING21)22 BASE_LOCATION = 'nation_iceberg'23 AS SELECT24 N_NATIONKEY,25 N_NAME26 FROM snowflake_sample_data.tpch_sf1.nation;
1ALTER DATABASE iceberg_tutorial_db SET CATALOG = 'SNOWFLAKE';2ALTER DATABASE iceberg_tutorial_db SET EXTERNAL_VOLUME = 'iceberg_external_volume';
3. SingleStore のセットアップ。Snowflake側のセットアップが完了したので、SingleStore の設定に進みます。まず、Helios Organizationに2 つのテーブル (customer と nation) を作成します。
1-- create the demo database2CREATE DATABASE iceberg_demo;3USE iceberg_demo;4 5-- create the customer table6CREATE TABLE customer (7 C_CUSTKEY INTEGER, 8 C_NAME TEXT, 9 C_ADDRESS TEXT,10 C_NATIONKEY INTEGER, 11 C_PHONE TEXT, 12 C_ACCTBAL INTEGER, 13 C_MKTSEGMENT TEXT, 14 C_COMMENT TEXT,15 PRIMARY KEY(C_CUSTKEY)16);17 18-- create the nation table19CREATE TABLE nation (20 N_NATIONKEY INTEGER,21 N_NAME TEXT,22 PRIMARY KEY(N_NATIONKEY)23);
1SET GLOBAL enable_iceberg_ingest = ON;2SET GLOBAL pipelines_extractor_get_offsets_timeout_ms = 600000;
1-- create the pipeline to load customer data2CREATE OR REPLACE PIPELINE customer_iceberg_pipeline AS3LOAD DATA S3 4'<your-snowflake-database>.<snowflake-schema>.<snowflake-customer-table-name>'5CONFIG '{"region": "<your-snowflake-region>",6 "catalog_type": "SNOWFLAKE",7 "catalog.uri": 8"jdbc:snowflake://<your-snowflake-account>.snowflakecomputing.com",9 "catalog.jdbc.user":"<your-snowflake-user>",10 "catalog.jdbc.password":"<your-snowflake-password>",11 "catalog.jdbc.role":"<your-snowflake-role>"}'12CREDENTIALS '{"aws_access_key_id": "<your-S3-key>",13 "aws_secret_access_key": "<your-S3-secret>"}'14REPLACE INTO TABLE customer (15 C_CUSTKEY <- C_CUSTKEY,16 C_NAME <- C_NAME,17 C_ADDRESS <- C_ADDRESS,18 C_NATIONKEY <- C_NATIONKEY,19 C_PHONE <- C_PHONE,20 C_ACCTBAL <- C_ACCTBAL,21 C_MKTSEGMENT <- C_MKTSEGMENT,22 C_COMMENT <- C_COMMENT23)24FORMAT ICEBERG;25 26-- create the pipeline to load nation data27CREATE OR REPLACE PIPELINE nation_iceberg_pipeline AS28'<your-snowflake-database>.<snowflake-schema>.<snowflake-nation-table-name>'29CONFIG '{"region": "<your-snowflake-region>",30 "catalog_type": "SNOWFLAKE",31 "catalog.uri": 32"jdbc:snowflake://<your-snowflake-account>.snowflakecomputing.com",33 "catalog.jdbc.user":"<your-snowflake-user>",34 "catalog.jdbc.password":"<your-snowflake-password>",35 "catalog.jdbc.role":"<your-snowflake-role>"}'36CREDENTIALS '{"aws_access_key_id": "<your-S3-key>",37 "aws_secret_access_key": "<your-S3-secret>"}'38REPLACE INTO TABLE nation (39 N_NATIONKEY <- N_NATIONKEY,40 N_NAME <- N_NAME41)42FORMAT ICEBERG;
1-- test and start the customer pipeline2TEST PIPELINE customer_iceberg_pipeline;3START PIPELINE customer_iceberg_pipeline;4 5-- test and start the nation pipeline6TEST PIPELINE nation_iceberg_pipeline;7START PIPELINE nation_iceberg_pipeline;
1SELECT COUNT(*) FROM customer;2SELECT * FROM customer;3 4-- you can now power your customer facing analytics with SingleStore, and run5-- queries like this with high concurrency and low latency:6SELECT c.c_name AS customer_name7FROM customer c8INNER JOIN nation n ON c.c_nationkey = n.n_nationkey9WHERE n.n_name = 'UNITED KINGDOM' and c.c_mktsegment = 'BUILDING'10LIMIT 15;11 12SELECT COUNT(*) FROM nation;13SELECT * FROM nation;
SingleStoreを無料でお試しください
ストレージとしてSnowflakeとIcebergを活用し、アクセラレーションレイヤーとしてSingleStoreを活用することで、組織はコスト効率の高いデータウェアハウスと高性能な分析という両方のメリットを享受できます。Icebergは両者を結びつける接着剤のような役割を果たし、最新のデータアーキテクチャにおける相互運用性と柔軟性を確保します。
また、このアーキテクチャの構成とセットアップは非常にシンプルで、S3、Kafka、その他のデータ ソースの場合と同様に、データをロードするためのテーブルとパイプラインを作成するという、SingleStore での数ステップのみが必要であることがわかります。
自分で試してみませんか?今すぐSingleStoreを無料で始めましょう。














