Google Cloud CLI を使用したデータの挿入、更新、削除

このページでは、gcloud コマンドライン ツールを使用して、データを挿入、更新、削除する方法について説明します。

DML を使用してデータを変更する

データ操作言語(DML)ステートメントを実行するには、gcloud spanner databases execute-sql コマンドを使用します。次の例では、Singers テーブルに新しい行を追加します。

gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="INSERT Singers (SingerId, FirstName, LastName) VALUES (1, 'Marc', 'Richards')"

パーティション化 DML ステートメントを実行するには、--enable-partitioned-dml オプションを指定した gcloud spanner databases execute-sql コマンドを使用します。次の例では、Albums テーブル内の行を更新します。

gcloud spanner databases execute-sql example-db \
    --instance=test-instance --enable-partitioned-dml \
    --sql='UPDATE Albums SET MarketingBudget = 0 WHERE MarketingBudget IS NULL'

Spanner DML のリファレンスについては、データ操作言語の構文をご覧ください。

rows コマンド グループを使用して行を変更する

gcloud spanner rows コマンド グループを使用して、データベース内のデータを変更します。

  • 新しい行をテーブルに挿入します。
  • テーブル内の既存の行の列を更新します。
  • テーブルから行を削除します。

rows コマンド グループは、すべての有効な列型のリテラルを認識します。

テーブルへの行の挿入

テーブルに新しい行を挿入するには、キー列の値と、必要となるその他すべての列の値を含める必要があります。

gcloud spanner rows insert --instance=INSTANCE_ID --database=DATABASE_ID \
    --table=TABLE_NAME \
    --data=COL_NAME_1=COL_VALUE_1,COL_NAME_2=COL_VALUE_2,COL_NAME_3=COL_VALUE_3,...,COL_NAME_N=COL_VALUE_N

次の例では、Singers テーブルに新しい行を挿入します。

gcloud spanner rows insert --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,FirstName='Marc',LastName='Richards'

テーブルの行の更新

テーブル内の行を更新するには、キー列の値と更新する列の値を含める必要があります。

gcloud spanner rows update --instance=INSTANCE_ID --database=DATABASE_ID \
    --table=TABLE_NAME \
    --data=COL_NAME_1=COL_VALUE_1,COL_NAME_2=COL_VALUE_2,COL_NAME_3=COL_VALUE_3,...,COL_NAME_N=COL_VALUE_N

次の例では、Singers テーブルの行を更新します。

gcloud spanner rows update --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,FirstName='Marc',LastName='Richards'

update コマンドを使用してキー値を変更することはできません。キー値を更新するには、新しい行を作成して既存の行を削除する必要があります。

テーブルからの行の削除

行を削除するには、主キー列の値を指定する必要があります。

gcloud spanner rows delete --instance=INSTANCE_ID --database=DATABASE_ID  \
    --table=TABLE_NAME \
    --keys=KEY_VALUE_1,KEY_VALUE_2,KEY_VALUE_3
次の例では、「Singers」テーブルから行を削除します。
gcloud spanner rows delete --instance=test-instance --database=example-db \
    --table=Singers \
    --keys=1

ARRAY 値の指定

ARRAYの値を挿入または更新するには、データを YAML ファイルに格納し、--flags-file オプションを使用します。

たとえば、この YAML ファイルは Numbers 列に配列 [1,2,3] を指定します。

# stats.yaml
--data:
    Id: 1
    Locked: True
    Numbers:
        - 1
        - 2
        - 3

YAML データを含む行を挿入するには、--flags-file オプションを使用します。

gcloud spanner rows insert --instance=test-instance --database=example-db \
     --table=Stats \
     --flags-file stats.yaml

NULL 配列の場合、ファイルに Numbers の値を含めないでください。

# stats.yaml
--data:
    Id: 1
    Locked: True

空の配列の場合、配列を [] として定義します。

# stats.yaml
--data:
    Id: 1
    Locked: True
    Numbers: []

commit タイムスタンプの指定

commit タイムスタンプ列に値を自動的に挿入または更新するには、列の値として spanner.commit_timestamp() を渡します。次の例では、行が挿入されたときに、commit タイムスタンプを LastUpdated 列に書き込みます。

gcloud spanner rows insert --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,LastUpdated='spanner.commit_timestamp()'

次の例では、LastUpdated 列に特定のタイムスタンプ値を書き込みます。

gcloud spanner rows update --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,LastUpdated=2017-01-02T12:34:00.45Z