データ相互運用性の実現:Iceberg、Snowflake、SingleStore を活用した高性能分析

1 min read

Mar 27, 2025

Apache Iceberg は、組織が複数のクエリ エンジンにわたって大規模なデータセットを効率的に保存、管理、アクセスできるようにする強力なオープン テーブル形式として登場しました。
データ相互運用性の実現:Iceberg、Snowflake、SingleStore を活用した高性能分析

Iceberg は、ストレージをコンピューティングから分離し、ACID トランザクションをサポートすることで、データの相互運用性の基盤を提供し、企業が複数のプラットフォームを活用してさまざまな分析ニーズに対応できるようにします。

組織がハイブリッドクラウドやマルチクラウドアーキテクチャを採用するケースが増えるにつれ、様々なデータプラットフォームとシームレスに統合できる柔軟なソリューションが求められています。このブログでは、SnowflakeとSingleStore Helios®をIcebergと連携させ、データ処理と分析を最適化する方法について解説します。

SingleStore による Iceberg のサポート: 主なユースケース

SingleStore はApache Iceberg をネイティブサポートしており、組織は Iceberg で管理されるデータのための高性能分析エンジンとしてこれを利用できます。主なユースケースとしては、以下のようなものがあります。

  • BI と顧客向け分析の高速化。SingleStoreの分散 SQL エンジンは、超低レイテンシと高い同時実行性を実現し、リアルタイムのデータアクセスを必要とするダッシュボードや外部向けアプリケーションに最適なレイヤーです。
  • 低レイテンシのアプリケーション層。SingleStoreのリアルタイム取り込みと高速クエリ実行は、レコメンデーションエンジン、不正検出システム、インタラクティブ分析アプリケーションなど、ミリ秒レベルの応答時間を必要とするアプリケーションに直接データを提供するのに最適です。

ステップバイステップガイド: SnowflakeとSingleStoreを使用した高速分析

このシナリオでは、Snowflake がデータ所有者として機能し、AWS の S3 ストレージにバックアップされた Iceberg テーブルを保存し、クラウド管理サービスである SingleStore Helios がデータを高性能エンジンに取り込むことで分析を高速化します。

高レベルのアーキテクチャは次のようになります。

以下に、設定方法を段階的に説明するガイドを示します (このチュートリアルの一部は、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」のような記述子を入力します。

「次へ」をクリックし、前の手順で作成したポリシーを選択し、ロール名を入力して作成します。新しいロールの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      );
次に、次のコマンドを実行して、Snowflake の ARN を取得します。
1DESC EXTERNAL VOLUME iceberg_external_volume;
「STORAGE_AWS_IAM_USER_ARN」プロパティを記録します。AWSコンソールに戻り、IAM管理で作成したロールを見つけて、「信頼関係」タブの「信頼ポリシー」を編集します。
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;
c.カタログの設定。この場合、SnowflakeはIcebergカタログとしても機能するため、以下の設定が必要です。
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);
4. SingleStore のパイプライン機能を使用してテーブルにデータをロードします。これを行うには、グローバル変数を介して Iceberg の取り込みを有効にし、パイプラインのタイムアウトを設定します。
1SET GLOBAL enable_iceberg_ingest = ON;2SET GLOBAL pipelines_extractor_get_offsets_timeout_ms = 600000;
5.設定が完了したら、以下のコードを使ってパイプラインを作成します。括弧内の設定情報(例:「<your-snowflake-database>」)は、実際のリソース名に置き換えてください。また、Snowflakeでウェアハウス、データベース、スキーマ、テーブルにアクセスできるユーザーと、SingleStoreがIcebergデータを含むS3バケットにアクセスするために使用するAWSアクセスキーとシークレットが作成済みであることを前提としています。
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;
6. これでパイプラインをテストして開始できます。
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;
7. データが SingleStore に取り込まれ、クエリを実行して結果を Snowflake と比較できるようになりました。
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を無料で始めましょう。

よくある質問

今すぐ開発を始めましょう

SingleStore Heliosを今日から始めて、600ドル分のクレジットを獲得しましょう。

無料で始める

Share