Google Cloud コンソールを使ってデータベースを作成してクエリを実行する

このクイックスタートでは、 Google Cloud コンソールを使って Spanner の基本的な操作を行う方法を説明します。このクイックスタートでは、以下を行います。

  • Spanner インスタンスを作成する。
  • データベースを作成する。
  • スキーマを作成する。
  • データを挿入、変更する。
  • クエリを実行する。

Spanner の使用料金については、料金についてのページをご覧ください。

始める前に

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 省略可: 通常、Spanner API は自動的に有効になります。それ以外の場合は、手動で有効にします。

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

  5. インスタンスを作成する

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

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

      [Spanner] に移動

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

    3. [Spanner] ページで、[プロビジョニングされたインスタンスを作成] をクリックします。

      以前に Spanner を使用したことがある場合は、プロダクト ページの代わりに Spanner の [インスタンス] ページが表示されます。[インスタンスを作成] をクリックします。

    4. [インスタンス名を指定する] ページで、インスタンス名を入力します(例: テスト インスタンス)。

    5. インスタンス ID は、インスタンス名(例: test-instance)に基づき自動的に入力されます。必要に応じて変更できます。[続行] をクリックします。

    6. [インスタンスを構成する] ページで、デフォルトのオプション [リージョン] をそのままにして、プルダウン メニューから構成を選択します。

      インスタンスの構成により、インスタンスが保存および複製される地理的位置が決まります。

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

    8. [コンピューティング容量の割り当て] ページで、[処理ユニット(PU)] を選択し、デフォルト値の 1,000 処理ユニットのままにします。

    9. [作成] をクリックします。

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

    データベースを作成する

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

      [Spanner インスタンス] に移動

    2. テスト インスタンス」などの作成したインスタンスをクリックします。

    3. 開いたインスタンスの [概要] ページで、[データベースを作成] をクリックします。

    4. データベース名には「example-db」などの名前を入力します。

    5. データベース言語を選択します。

      PostgreSQL のサポートや、言語の選択に関するガイダンスについては、PostgreSQL Interface をご覧ください。 GoogleSQL を選択した場合は、このクイックスタートの次のセクションにある [スキーマを定義する] テキスト フィールドでスキーマを定義します。

      データベース作成ページは次のようになります。

      更新されたデータベース作成ウィンドウ。

    6. [作成] をクリックします。

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

    データベースのスキーマの作成

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

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

    3. 次のように入力します。

      GoogleSQL

      CREATE TABLE Singers (
        SingerId   INT64 NOT NULL,
        FirstName  STRING(1024),
        LastName   STRING(1024),
        SingerInfo BYTES(MAX),
        BirthDate  DATE
      ) PRIMARY KEY(SingerId);
      

      PostgreSQL

      CREATE TABLE Singers (
        BirthDate  TIMESTAMPTZ,
        SingerId   BIGINT PRIMARY KEY,
        FirstName  VARCHAR(1024),
        LastName   VARCHAR(1024),
        SingerInfo BYTEA
      );
      
    4. 実行)をクリックします。

      Google Cloud コンソールがデータベースの [概要] ページに戻り、[スキーマの更新] が進行中であることが表示されます。更新が完了すると、次のようなページが表示されます。

      GoogleSQL

      更新された概要ページ。

      PostgreSQL

      更新された概要ページ。

      なお、PostgreSQL ではテーブル名が小文字に変換されます。

    データの挿入と変更

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

    データを挿入する

    1. データベースの [概要] ページのテーブルのリストで、Singers テーブルをクリックします。

      Google Cloud コンソールに Singers テーブルの [スキーマ] ページが表示されます。

    2. ナビゲーション・メニューで、[データ] をクリックして、Singers テーブルの [データ] ページを表示します。

    3. [挿入] をクリックします。

      Google Cloud コンソールに Singers テーブルの [Spanner Studio] ページが表示され、INSERT ステートメントが含まれる新しいクエリタブが開いている状態になっています。それを編集して Singers テーブルに 1 行を挿入し、その結果を確認することができます。

      GoogleSQL

       -- Add new values in the VALUES clause in order of the column list.
       -- Each value must be type compatible with its associated column.
      INSERT INTO
       Singers (SingerId,
         FirstName,
         LastName,
         SingerInfo,
         BirthDate)
      VALUES
       (<SingerId>, -- type: INT64
         <FirstName>, -- type: STRING(1024)
         <LastName>, -- type: STRING(1024)
         <SingerInfo>, -- type: BYTES(MAX)
         <BirthDate> -- type: DATE
         )
      THEN RETURN
       SingerId,
       FirstName,
       LastName,
       SingerInfo,
       BirthDate;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          firstname,
          lastname,
          singerinfo,
          birthdate)
      VALUES
        (<singerid>, -- type: bigint
          <firstname>, -- type: character varying
          <lastname>, -- type: character varying
          <singerinfo>, -- type: bytea
          <birthdate> -- type: timestamp with time zone
          );
      THEN RETURN
         singerid,
         firstname,
         lastname,
         singerinfo,
         birthdate;
      

      なお、PostgreSQL では、列名がすべて小文字に変換されます。

    4. INSERT ステートメントの VALUES 句を編集します。

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (1, -- type: INT64
          NULL, -- type: DATE
          'Marc', -- type: STRING(1024)
          'Richards', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          )
      THEN RETURN
        SingerId,
        FirstName,
        LastName,
        SingerInfo,
        BirthDate;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (1, -- type: bigint
          NULL, -- type: timestamp with time zone
          'Marc', -- type: character varying
          'Richards', -- type: character varying
          NULL -- type: bytea
          );
      THEN RETURN
         singerid,
         firstname,
         lastname,
         singerinfo,
         birthdate;
      
    5. 実行)をクリックします。

      Spanner により、ステートメントが実行されます。完了すると、[結果] タブに、ステートメントで 1 行が挿入されたことが示されます。

      GoogleSQL

      1 行で構成される更新された Singers テーブルデータ。

      PostgreSQL

      1 行で構成される更新された Singers テーブルデータ。

    6. エクスプローラで、Singers テーブルの横にある アクションを表示)をクリックし、[データを挿入] をクリックします。

    7. INSERT ステートメントの VALUES 句と SELECT ステートメントの WHERE 句を編集します。

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (2, -- type: INT64
          NULL, -- type: DATE
          'Catalina', -- type: STRING(1024)
          'Smith', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          )
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=2;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (2, -- type: bigint
          NULL, -- type: timestamp with time zone
          'Catalina', -- type: character varying
          'Smith', -- type: character varying
          NULL -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=2;
      
    8. 実行)をクリックします。

      Spanner によりステートメントが実行されると、[結果] タブに、ステートメントによって 1 行が挿入されたことが示されます。

    9. エクスプローラで、Singers テーブルの横にある アクションを表示)をクリックし、[データのプレビュー] をクリックします。

    10. 実行)をクリックします。Singers テーブルの行が 2 つになりました。

      GoogleSQL

      2 行で構成される更新された Singers テーブルデータ。

      PostgreSQL

      2 行で構成される更新された Singers テーブルデータ。

    また、データを入力するときに、空の文字列値を挿入することもできます。

    1. [挿入] をクリックして行を追加します。

      Spanner に Singers テーブルの [Spanner Studio] ページが表示され、INSERT ステートメントと SELECT ステートメントが含まれる新しいクエリタブが開いている状態になっています。

    2. テンプレートの INSERT ステートメントの VALUES 句と、SELECT ステートメントの WHERE 句を編集します。

      GoogleSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        Singers (SingerId,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (3, -- type: INT64
          NULL, -- type: DATE
          'Kena', -- type: STRING(1024)
          '', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=3;
      

      PostgreSQL

        -- Add new values in the VALUES clause in order of the column list.
        -- Each value must be type compatible with its associated column.
      INSERT INTO
        singers (singerid,
          birthdate,
          firstname,
          lastname,
          singerinfo)
      VALUES
        (3, -- type: bigint
          NULL, -- type: timestamp with time zone
          'Kena', -- type: character varying
          '', -- type: character varying
          NULL -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=3;
      

      なお、姓の列に指定された値は、NULL 値ではなく、空の文字列('')です。

    3. 実行)をクリックします。

      Spanner によりステートメントが実行されると、[結果] タブに、ステートメントによって 1 行が挿入されたことが示されます。

    4. エクスプローラで、Singers テーブルの横にある アクションを表示)をクリックし、[データのプレビュー] をクリックします。

    5. 実行)をクリックします。Singers テーブルには現在 3 つの行があり、そのうち主キーの値が 3 の行では、LastName 列が空の文字列になっています。

      GoogleSQL

      3 行で構成される更新された Singers テーブルデータ。

      PostgreSQL

      3 行で構成される更新された Singers テーブルデータ。

    データを編集する

    1. Singers テーブルの [データ] ページで、主キーの値が 3 の行のチェックボックスをオンにし、[編集] をクリックします。

      Spanner で [Spanner Studio] ページが表示され、UPDATE ステートメントと SET ステートメントのテンプレートを含む新しいタブが開きます。これらは編集可能です。 なお、どちらのステートメントの WHERE 句も、更新する行が 3 の主キー値を持つ行であることに注意してください。

      GoogleSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        Singers
      SET
        BirthDate='',
        FirstName='Kena',
        LastName='',
        SingerInfo=''
      WHERE
        SingerId=3;
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=3;
      

      PostgreSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        singers
      SET
        birthdate=NULL,
        firstname='Kena',
        lastname='',
        singerinfo=NULL
      WHERE
        singerid='3';
      SELECT
        *
      FROM
        singers
      WHERE
        singerid='3';
      
    2. UPDATE ステートメントの SET 句を編集して、生年月日のみを更新します。

      GoogleSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        Singers
      SET
        BirthDate='1961-04-01'
      WHERE
        SingerId=3;
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=3;
      

      PostgreSQL

        -- Change values in the SET clause to update the row where the WHERE condition is true.
      UPDATE
        singers
      SET
        birthdate='1961-04-01 00:00:00 -8:00'
      WHERE
        singerid='3';
      SELECT
        *
      FROM
        singers
      WHERE
        singerid='3';
      
    3. 実行)をクリックします。

      Spanner により、ステートメントが実行されます。完了すると、[結果] タブに、最初のステートメントで 1 行が更新されたことが示されます。

    4. エクスプローラで、Singers テーブルの横にある アクションを表示)をクリックし、[データのプレビュー] をクリックします。

    5. 実行)をクリックします。更新された行に生年月日の値が入りました。

      GoogleSQL

      更新された行がある更新された Singers テーブルデータ。

      PostgreSQL

      更新された行がある更新された Singers テーブルデータ。

    データの削除

    1. Singers テーブルの [データ] ページで、最初の列に 2 がある行のチェックボックスをオンにし、[削除] をクリックします。
    2. 表示されるダイアログで [確認] をクリックします。

      Singers テーブルの行が 2 つになりました。

      GoogleSQL

      2 行で構成される更新された Singers テーブルデータ。SingerId 2 の行が消えました。

      PostgreSQL

      2 行で構成される更新された Singers テーブルデータ。SingerId 2 の行が消えました。

    クエリの実行

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

    2. [新しいタブ] をクリックして、新しいクエリタブを作成します。次に、クエリエディタに以下のクエリを入力します。

      GoogleSQL

      SELECT * FROM Singers;
      

      PostgreSQL

      SELECT * FROM singers;
      
    3. 実行)をクリックします。

      Spanner がクエリを実行します。完了すると、[結果] タブにクエリの結果が表示されます。

      GoogleSQL

      クエリ結果。

      PostgreSQL

      クエリ結果。

    これで完了です。クエリエディタを使用して、正常に Spanner データベースを作成し、SQL ステートメントを実行することができました。

    クリーンアップ

    Google Cloud アカウントで追加料金が発生しないようにするには、データベースとインスタンスを削除します。Cloud Billing API を無効にしても、課金は停止されません。インスタンスを削除すると、インスタンス内のすべてのデータベースが削除されます。

    データベースを削除する

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

      [Spanner インスタンス] に移動

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

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

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

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

    インスタンスを削除する

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

      [Spanner インスタンス] に移動

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

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

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

    次のステップ