Snowflakeデータベースの統合
Squidのリアルタイムストリーミング、堅牢なクエリ、およびAI機能を活用して、Snowflakeデータベースに接続します。
TL;DR
このチュートリアルでは、新しいSnowflakeデータベースをあなたのSquidプロジェクトに接続する方法を学びます。これには、以下が含まれます:
このチュートリアルでは、ReactとSquidを使用して、Snowflakeテーブル内のサンプルデータに接続します。データベースの用語、React、及びSquidプラットフォームの基本的な理解が有益ですが、このガイドには前提条件はありません。
Environment setup
- In the Squid Console, switch to the devenvironment.

- Download the snowflake code sample using the following command. Replace the placeholders with the values from your Squid application as shown in the console. 
npx @squidcloud/cli init-sample snowflake --template snowflake --appId YOUR_SQUID_APP_ID --apiKey YOUR_SQUID_API_KEY --environmentId dev --squidDeveloperId YOUR_SQUID_DEVELOPER_ID --region YOUR_REGION
You can find your environment variables under: 'Application' -> 'Show env vars' as seen below:

- Open the project in the IDE of your choice.
- Start the app locally by running the following command in the project folder:
npm run start
- To view the app, navigate to localhost:PORT, where PORT is logged in the terminal. The address will likely be http://localhost:5173.
新しいSnowflakeデータベースの作成
Snowflakeでは、アカウント作成時にいくつかの共有データベースが提供されます。これらのデータベースは読み取り専用であるため、編集可能なコピーを作成します。
Snowflakeコンソールで、Snowflake Worksheetに移動して開きます。Worksheet内で、以下のコマンドを実行するためにRun allオプションを使用してください。<your_wh>をあなたのデータウェアハウスの名前に置き換えます:
USE WAREHOUSE <your_wh>;
CREATE DATABASE SQUID_TUTORIAL;
CREATE TABLE SQUID_TUTORIAL.PUBLIC.ORDERS LIKE "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."ORDERS";
INSERT INTO SQUID_TUTORIAL.PUBLIC.ORDERS SELECT * FROM "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."ORDERS";
これらのコマンドは、新しいデータベースを作成し、サンプルテーブルの1つから新しいデータベースにデータをインポートします。
SnowflakeのSquidへの接続
- Integrationsタブをクリックし、次にAvailable integrationsをクリックして、すべての統合を表示します。
- Snowflake統合を選択します。
- 以下の設定情報を入力します:
フィールドは大文字小文字を区別します。必要に応じて大文字を使用していることを確認してください。
- 
Integration ID: snowflake-shop 
- 
Snowflake username 
- 
Snowflake password - パスワードを秘密に保つため、Squid Secretsにパスワードを保存してください。 
- 
Snowflake account ID - Snowflakeコンソールの右上隅にあるユーザー名メニューを開き、そこでAccountオプションをクリックします。アカウントにカーソルを合わせると、あなたの完全なアカウント情報が表示されるモーダルが現れます。SnowflakeのCopy account identifierボタンを使用してIDをコピーします。Squid ConsoleにこのIDを貼り付け、. を - に置き換えて次のようにします: Before: AAAAAAA.AAA00000 
 After: AAAAAAA-AAA00000
- 
Snowflake database name: SQUID_TUTORIAL 
- 
Snowflake schema: PUBLIC 
- 
Snowflake warehouse - 先ほどデータベースを作成した際に使用したのと同じウェアハウスを使用してください。 
- 
Snowflake role - Snowflakeデータベースが存在するロールの名前です。Snowflakeコンソールであなたのユーザー名の下に表示されるSnowflakeロールを確認できます。 
接続情報を入力したら、Test connectionをクリックして接続が成功するか確認してください。
- 
Add integrationをクリックして統合を追加します。 
- 
スキーマはSnowflakeからSquidへ自動的に同期されます。各コレクションには、コレクション(テーブル)内の個々のドキュメント(行)を識別するための主キーが必要です。 
- 
Squid Consoleのスキーマプレビュー内のORDERSコレクションで、O_ORDERKEY行の**...**ボタンをクリックし、Edit fieldを選択します。 

- Primary keyの下で、ドロップダウンメニューからYesを選択します。

- Save schemaをクリックして、検出されたスキーマを保存します。
セキュリティルール
すべてのデータベース統合にはセキュリティルールが必要です。これにより、特定のコレクションやアクション、さらにはデータベース全体へのアクセスを認可するためのカスタムロジックを作成できます。本チュートリアルの範囲外である認証と認可のため、バックエンドコードにはsnowflake統合への公開アクセスを許可するセキュリティルールが含まれています。
データ保護の詳細については、Squidのバックエンドsecurity rulesについてご覧ください。
セキュリティルールは、backend/src/service/example-service.tsファイルにあります。セキュリティルールは、SquidServiceクラスにデコレーターを追加することで拡張できます。データベース統合のセキュリティルールを作成するには、デコレーター@secureDatabaseを使用し、データベースアクションのtypeとINTEGRATION_IDをパラメータとして渡します。ExampleServiceクラスでの現在のセキュリティルールは以下の通りです:
export class ExampleService extends SquidService {
  @secureDatabase('all', 'snowflake-shop')
  allowAllAccessToSnowflakeDb(): boolean {
    return true;
  }
}
アプリをローカルで実行
- Start the Squid backend locally using the following command in the terminal opened to your app's backend:
squid start
- Start the frontend using the following command in the terminal opened to your app's frontend:
npm run dev
- To view the app, navigate to localhost:PORT where PORT is logged in the terminal. The address will likely be http://localhost:5173.
アプリの機能の確認
- フロントエンドに表示されたテーブルで、クエリに一致するすべてのドキュメントを確認できます。以下のSquidフックがデータを読み込み、それがDisplayOrdersコンポーネントによって表示されます:
  const ordersCollection = useCollection<Order>('ORDERS','snowflake-shop');
  const { data } = useQuery(ordersCollection.query().eq('O_CUSTKEY',121361).dereference());
  ...
    return (
    <div>
      <h1>Orders</h1>
      {data && <DisplayOrders orders={data} />}
      <AddOrder />
    </div>
  );
- Add orderをクリックして、新しい注文をランダムに生成し、データベースに追加します。この注文がリアルタイムでビューに反映されることに注目してください。SquidはSnowflakeデータベースとのリアルタイム同期を可能にします。
これで完了です!
おめでとうございます!これでSnowflakeデータベースをSquidに接続し、Squidのセキュリティ機能を使ってクライアントアプリケーションからの読み書きを管理することに成功しました。SquidはSnowflakeやその他の統合に関してさらに多くの機能を提供できるため、ミューテーションやクエリなどの他のデータベース機能についてはSquid Client SDK documentationをご覧いただくか、Squid AIを用いたデータクエリを紹介するこのチュートリアルに挑戦してみてください。