Google Cloud コンソールを使用して Spanner Graph を設定しクエリを実行する

このドキュメントでは、Google Cloud コンソールを使用して Spanner Graph を設定してクエリする方法について説明します。このドキュメントでは、次の操作を行います。

  • Spanner インスタンスを作成する
  • データベースを作成します。
  • グラフ スキーマを作成します。
  • グラフデータを挿入します。
  • 作成したグラフに対してクエリを実行します。

Spanner の料金の詳細については、Spanner の料金をご覧ください。

Codelab を試すには、Spanner Graph を使ってみるをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Spanner API は自動的に有効になります。それ以外の場合は、手動で有効にします。

    Spanner API を有効にする
  1. インスタンスとデータベースを作成するために必要な権限を取得するには、プロジェクトに対する Cloud Spanner 管理者roles/spanner.admin)IAM ロールを付与するよう管理者に依頼してください。

インスタンスの作成

Spanner を最初に使用する場合は、インスタンスを作成する必要があります。インスタンスとは、Spanner データベースによって使用されるリソースの割り当てのことです。

  1. Google Cloud コンソールで、[Spanner] ページに移動します。

    Spanner に移動

  2. Google Cloud プロジェクトを選択するか、新しく作成します(まだ作成していない場合)。

  3. 次のいずれかを行います。

    1. まだ Spanner インスタンスを作成していない場合は、[Spanner へようこそ] ページで [プロビジョニングされたインスタンスを作成する] をクリックします。

    2. Spanner インスタンスを作成した場合は、[インスタンス] ページで [インスタンスを作成] をクリックします。

  4. [エディションを選択] ページで、[Enterprise Plus] または [Enterprise] を選択します。

    Spanner Graph は、Enterprise エディションまたは Enterprise Plus エディションでのみ使用できます。異なるエディションを比較するには、[エディションを比較] をクリックします。詳細については、Spanner エディションの概要をご覧ください。

  5. [続行] をクリックします。

  6. [インスタンス名] にインスタンス名を入力します(例: test-instance)。

  7. [インスタンス ID] で、インスタンス ID を保持するか変更します。インスタンス ID はデフォルトでインスタンス名になりますが、変更できます。インスタンス名とインスタンス ID は同じでも異なっていてもかまいません。

  8. [続行] をクリックします。

  9. [構成を選択] で、次の操作を行います。

    1. [リージョン] を選択したままにします。

    2. [構成を選択] でリージョンを選択します。選択したリージョンにインスタンスが保存され、複製されます。

    3. [続行] をクリックします。

  10. [コンピューティング容量を構成する] で、次の操作を行います。

    1. [ユニットを選択] で、[処理ユニット(PU)] を選択します。

    2. [スケーリング モードを選択] で [手動で割り当てる] を選択し、[数量] では 1,000 処理ユニットのままにします。

  11. [作成] をクリックします。Google Cloud コンソールに、作成したインスタンスの [概要] ページが表示されます。

データベースを作成する

  1. Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。

    Spanner インスタンスに移動

  2. 作成したインスタンスをクリックします(例: Test Instance)。

  3. [概要] で、インスタンス名の下にある [データベースを作成] をクリックします。

  4. [データベース名] にデータベース名を入力します。例: example-db

  5. [データベース言語を選択] で、Google 標準 SQL を選択します。PostgreSQL 言語では Spanner Graph を使用できません。データベース作成ページは次のようになります。

    データベース作成ページを更新しました。

  6. [作成] をクリックします。Google Cloud コンソールに、作成したデータベースの [概要] ページが表示されます。

Spanner Graph データベースのスキーマを作成する

  1. ナビゲーション メニューで [Spanner Studio] をクリックします。

  2. [Spanner Studio] ページで、[エディタ 1] タブをクリックするか、 [新しいタブ] をクリックするか、新しいタブを使用します。

  3. 次のスキーマをコピーして、エディタタブに貼り付けます。このスキーマには、2 つのノードテーブル定義(PersonAccount)と 2 つのエッジテーブル定義(PersonOwnAccountAccountTransferAccount)が含まれています。Spanner Graph はリレーショナル テーブルを使用してグラフを定義するため、スキーマにはリレーショナル テーブルとグラフ ステートメントの両方が表示されます。Spanner Graph スキーマの詳細については、Spanner Graph スキーマの概要をご覧ください。

    CREATE TABLE Person (
      id               INT64 NOT NULL,
      name             STRING(MAX),
      birthday         TIMESTAMP,
      country          STRING(MAX),
      city             STRING(MAX),
    ) PRIMARY KEY (id);
    
    CREATE TABLE Account (
      id               INT64 NOT NULL,
      create_time      TIMESTAMP,
      is_blocked       BOOL,
      nick_name        STRING(MAX),
    ) PRIMARY KEY (id);
    
    CREATE TABLE PersonOwnAccount (
      id               INT64 NOT NULL,
      account_id       INT64 NOT NULL,
      create_time      TIMESTAMP,
      FOREIGN KEY (account_id) REFERENCES Account (id)
    ) PRIMARY KEY (id, account_id),
      INTERLEAVE IN PARENT Person ON DELETE CASCADE;
    
    CREATE TABLE AccountTransferAccount (
      id               INT64 NOT NULL,
      to_id            INT64 NOT NULL,
      amount           FLOAT64,
      create_time      TIMESTAMP NOT NULL,
      order_number     STRING(MAX),
      FOREIGN KEY (to_id) REFERENCES Account (id)
    ) PRIMARY KEY (id, to_id, create_time),
      INTERLEAVE IN PARENT Account ON DELETE CASCADE;
    
    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (Account, Person)
      EDGE TABLES (
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person (id)
          DESTINATION KEY (account_id) REFERENCES Account (id)
          LABEL Owns,
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account (id)
          DESTINATION KEY (to_id) REFERENCES Account (id)
          LABEL Transfers
      );
    
  4. [実行] をクリックします。[結果] ページに、スキーマの更新が実行されていることが示されます。アップデートが完了すると、[結果] にアップデートが完了したことを示すメッセージが表示されます。

グラフデータを挿入する

Google Cloud コンソールには、データを挿入、編集、削除するためのインターフェースがあります。

データの挿入

  1. [Spanner Studio] ページで、 [新しいタブ] をクリックするか、エディタタブを使用します。
  2. 次のグラフデータ挿入ステートメントをコピーして、ノードとエッジに貼り付けます。

    INSERT INTO Account
      (id, create_time, is_blocked, nick_name)
    VALUES
      (7,"2020-01-10 06:22:20.222",false,"Vacation Fund"),
      (16,"2020-01-27 17:55:09.206",true,"Vacation Fund"),
      (20,"2020-02-18 05:44:20.655",false,"Rainy Day Fund");
    
    INSERT INTO Person
      (id, name, birthday, country, city)
    VALUES
      (1,"Alex","1991-12-21 00:00:00","Australia","Adelaide"),
      (2,"Dana","1980-10-31 00:00:00","Czech_Republic","Moravia"),
      (3,"Lee","1986-12-07 00:00:00","India","Kollam");
    
    INSERT INTO AccountTransferAccount
      (id, to_id, amount, create_time, order_number)
    VALUES
      (7,16,300,"2020-08-29 15:28:58.647","304330008004315"),
      (7,16,100,"2020-10-04 16:55:05.342","304120005529714"),
      (16,20,300,"2020-09-25 02:36:14.926","103650009791820"),
      (20,7,500,"2020-10-04 16:55:05.342","304120005529714"),
      (20,16,200,"2020-10-17 03:59:40.247","302290001255747");
    
    INSERT INTO PersonOwnAccount
      (id, account_id, create_time)
    VALUES
      (1,7,"2020-01-10 06:22:20.222"),
      (2,20,"2020-01-27 17:55:09.206"),
      (3,16,"2020-02-18 05:44:20.655");
    

    次のグラフは、挿入されたユーザー、アカウント、アカウントの所有権、アカウントの移行を示しています。

    グラフの例。

  3. [実行] をクリックします。実行が完了すると、[結果] タブに 3 行が挿入されたことが示されます。

グラフクエリを実行する

  1. データベースの [概要] ページで、ナビゲーション メニューの [Spanner Studio] をクリックします。

  2. [Spanner Studio] ページで、 [新しいタブ] をクリックするか、エディタタブを使用します。

  3. クエリエディタに以下のクエリを入力します。このクエリでは、Dana が送金したすべてのユーザーと、送金の金額が見つかります。

    GRAPH FinGraph
    MATCH
      (from_person:Person {name: "Dana"})-[:Owns]->
      (from_account:Account)-[transfer:Transfers]->
      (to_account:Account)<-[:Owns]-(to_person:Person)
    RETURN
      from_person.name AS from_account_owner,
      from_account.id AS from_account_id,
      to_person.name AS to_account_owner,
      to_account.id AS to_account_id,
      transfer.amount AS amount
    
  4. [実行] をクリックします。

    [結果] タブには、Dana から Account {id:20} までの次のパスが表示されます。

    • Alex が所有する Account {id:7} へのパス。
    • Lee が所有する Account {id:16} へのパス。

      グラフクエリの結果の例。

クリーンアップ

次のステップの例の多くでは、このドキュメントで設定したリソースを使用します。これらの例のいずれかを使用して Spanner Graph の作業を続ける場合は、これらのクリーンアップ手順はまだ行わないでください。

そうでない場合は、Cloud 請求先アカウントに追加料金が発生しないように、設定時に作成したデータベースとインスタンスを削除します。インスタンスを削除すると、そのインスタンス内に作成されたすべてのデータベースが自動的に削除されます。

データベースの削除

  1. Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。

    Spanner インスタンスに移動

  2. テスト・インスタンスなど、削除するデータベースがあるインスタンスの名前をクリックします。

  3. example-db など、削除するデータベースの名前をクリックします。

  4. [データベースの詳細] ページで [データベースを削除] をクリックします。

  5. データベース名を入力して [削除] をクリックし、データベースを削除することを確認します。

インスタンスを削除する

  1. Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。

    Spanner インスタンスに移動

  2. [テスト インスタンス] など、削除するインスタンスの名前をクリックします。

  3. [インスタンスの削除] をクリックします。

  4. インスタンス名を入力し [削除] をクリックして、インスタンスを削除することを確認します。

次のステップ