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

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

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

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

始める前に

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

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

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

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

      [Spanner] に移動

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

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

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

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

    5. インスタンス ID は、インスタンス名(「テスト インスタンス」など)に基づき自動的に入力されます。必要に応じて変更できます。[続行] をクリックします。

    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 ステートメントと SELECT ステートメントが含まれる新しいクエリタブが開いている状態になっています。それを編集して 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,
          BirthDate,
          FirstName,
          LastName,
          SingerInfo)
      VALUES
        (<SingerId>, -- type: INT64
          <BirthDate>, -- type: DATE
          <FirstName>, -- type: STRING(1024)
          <LastName>, -- type: STRING(1024)
          <SingerInfo> -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=<SingerId>;
      

      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
        (<singerid>, -- type: bigint
          <birthdate>, -- type: timestamp with time zone
          <firstname>, -- type: character varying
          <lastname>, -- type: character varying
          <singerinfo> -- type: bytea
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=<singerid>;
      

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

    4. 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
        (1, -- type: INT64
          NULL, -- type: DATE
          'Marc', -- type: STRING(1024)
          'Richards', -- type: STRING(1024)
          NULL -- type: BYTES(MAX)
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        Singers
      WHERE
        SingerId=1;
      

      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
          );
        -- Change values in the WHERE condition to match the inserted row.
      SELECT
        *
      FROM
        singers
      WHERE
        singerid=1;
      
    5. [実行] をクリックします。

      Spanner により、ステートメントが実行されます。完了すると、[結果] タブでは、最初のステートメントで 1 行が挿入されたことと、テーブルのデータを表示するリンクが示されます。

    6. [結果] タブで、[テーブル] をクリックします。Singers テーブルに行が 1 つ追加されました。

      GoogleSQL

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

      PostgreSQL

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

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

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

    8. 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;
      
    9. [実行] をクリックします。

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

    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 テーブルには現在 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. [結果] タブで、[テーブル] をクリックします。

      更新された行に生年月日の値が入りました。

      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 ステートメントを実行することができました。

    クリーンアップする

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

    データベースを削除する

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

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

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

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

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

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

    インスタンスを削除する

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

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

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

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

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

    次のステップ