מוחק

במאמר הזה מוסבר איך למחוק נתונים שמאוחסנים בטבלאות של Bigtable, מפורט מתי כדאי להשתמש בכל אחת מהשיטות, ומוצגות דוגמאות. לפני שקוראים את הדף הזה, כדאי לעיין בסקירה הכללית על Bigtable ולהבין את המושגים שקשורים לתכנון סכימה.

כדי לשמור על עקביות, התיאורים בדף הזה מתייחסים לשיטות ה-API שמשמשות לכל סוג של בקשה. עם זאת, מומלץ מאוד להשתמש תמיד באחת מספריות הלקוח של Bigtable כדי לגשת לממשקי ה-API של Bigtable, במקום להשתמש ב-REST או ב-RPC.

הדוגמאות בדף הזה מבוססות על נתונים לדוגמה שדומים לנתונים שאולי מאוחסנים ב-Bigtable.

כדי לדעת כמה פעמים אפשר להשתמש בפעולות שמתוארות בדף הזה בכל יום, אפשר לעיין במאמר בנושא מכסות ומגבלות.

איך Bigtable מוחק נתונים

כששולחים בקשת מחיקה, התאים מסומנים למחיקה ואי אפשר לקרוא אותם. הנתונים מוסרים עד שבוע לאחר מכן במהלך דחיסה, תהליך שמתבצע ברקע ומבצע אופטימיזציה רציפה של הטבלה. מטא-נתונים של מחיקה יכולים לגרום לנתונים לתפוס קצת יותר נפח אחסון (כמה קילובייט לכל שורה) למשך כמה ימים אחרי ששולחים בקשת מחיקה, עד לביצוע הדחיסה הבאה.

תמיד אפשר לשלוח בקשת מחיקה, גם אם נפח האחסון של האשכול חרג מהמגבלה והגישה לקריאה ולכתיבה חסומה.

מחיקת טווח של שורות

אם רוצים למחוק כמות גדולה של נתונים שמאוחסנים בשורות סמוכות, משתמשים ב-dropRowRange. הפעולה הזו מוחקת את כל השורות בטווח שורות שמזוהה על ידי שורת התחלה וסיום או על ידי קידומת של מפתח שורה.

ערכי מפתח השורה שאתם מספקים כשאתם מוחקים טווח של שורות נחשבים לנתוני שירות. למידע על אופן הטיפול בנתוני השירות, אפשר לעיין בהודעת הפרטיות שלGoogle Cloud .

אחרי שהמחיקה מסתיימת בהצלחה ומקבלים תגובה, אפשר לכתוב נתונים בבטחה לאותו טווח שורות.

הפעולה dropRowRange כפופה להגבלות הבאות:

  • אי אפשר להשמיט טווח של שורות מתצוגה מורשית.
  • אי אפשר להפעיל את השיטה dropRowRange באופן אסינכרוני. אם שולחים בקשת dropRowRange לטבלה בזמן שמתבצעת בקשה אחרת, Bigtable מחזיר שגיאת UNAVAILABLE עם ההודעה A DropRowRange operation is already ongoing. כדי לפתור את השגיאה, צריך לשלוח שוב את הבקשה.
  • במקרים של מופעים שמשתמשים בשכפול, יכול להיות שייקח ל-Bigtable הרבה זמן להשלים את הפעולה בגלל השהיית שכפול מוגברת ושימוש מוגבר במעבד. כדי למחוק נתונים ממופע שמשתמש בשכפול, משתמשים ב-Data API כדי לקרוא ואז למחוק את הנתונים.

בדוגמאות הקוד הבאות אפשר לראות איך להשמיט טווח של שורות שמתחילות בקידומת של מפתח השורה phone#5c10102:

Java

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.bigtable.admin.v2.DropRowRangeRequest;
import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2;
import com.google.protobuf.ByteString;
import java.io.IOException;

public class DropRowRangeExample {
  public void dropRowRange(String projectId, String instanceId, String tableId) throws IOException {
    try (BigtableTableAdminClientV2 tableAdminClient = BigtableTableAdminClientV2.create()) {
      DropRowRangeRequest request =
          DropRowRangeRequest.newBuilder()
              .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId)
              .setRowKeyPrefix(ByteString.copyFromUtf8("phone#4c410523"))
              .build();
      tableAdminClient.dropRowRange(request);
    }
  }
}

Python

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

def drop_row_range(project_id, instance_id, table_id):
    from google.cloud.bigtable import Client

    client = Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row_key_prefix = "phone#4c410523"
    table.drop_by_prefix(row_key_prefix, timeout=200)

Node.js

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

await table.deleteRows('phone#5c10102');
await printRows();

מחיקת נתונים באמצעות שיטות Data API

אם אתם צריכים למחוק כמויות קטנות של נתונים לא רציפים, לעיתים קרובות האפשרות הכי טובה היא למחוק את הנתונים באמצעות שיטה שמפעילה את Cloud Bigtable API (Data API). משתמשים בשיטות האלה אם רוצים למחוק נתונים בנפח של MB ולא GB בבקשה. הדרך היחידה למחוק נתונים מעמודה (לא ממשפחת עמודות) היא באמצעות Data API.

שיטות של Data API שולחות קריאה ל-MutateRows עם אחד משלושת סוגי השינויים הבאים:

  • DeleteFromColumn
  • DeleteFromFamily
  • DeleteFromRow

בקשת מחיקה באמצעות Data API היא אטומית: או שהבקשה מצליחה וכל הנתונים נמחקים, או שהבקשה נכשלת ולא מוסרים נתונים.

ברוב המקרים, מומלץ להימנע משימוש בשיטות CheckAndMutate למחיקת נתונים. במקרים נדירים שבהם נדרש מודל עקביות חזק, כדאי להשתמש בגישה הזו, אבל חשוב לזכור שהיא דורשת הרבה משאבים ועלולה להשפיע על הביצועים.

כדי להשתמש ב-MutateRows למחיקת נתונים, שולחים בקשת readRows עם מסנן כדי לקבוע מה רוצים למחוק, ואז שולחים את בקשת המחיקה. רשימת המסננים הזמינים מופיעה במאמר מסננים.

בדוגמאות שבקטע הזה מניחים שכבר קבעתם אילו נתונים למחוק.

מחיקה מעמודה

בדוגמאות הקוד הבאות אפשר לראות איך מוחקים את כל התאים בעמודה בשורה:

Java

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.Mutation;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class DeleteFromColumnExample {
  public void deleteFromColumnCells(String projectId, String instanceId, String tableId)
      throws IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      Mutation mutation = Mutation.create().deleteCells("cell_plan", "data_plan_01gb");
      dataClient.mutateRow(
          RowMutation.create(TableId.of(tableId), "phone#4c410523#20190501", mutation));
    }
  }
}

Python

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

def delete_from_column(project_id, instance_id, table_id):
    from google.cloud.bigtable import Client

    client = Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row = table.row("phone#4c410523#20190501")
    row.delete_cell(column_family_id="cell_plan", column="data_plan_01gb")
    row.commit()

‫Python asyncio

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

async def delete_from_column(project_id, instance_id, table_id):
    from google.cloud.bigtable.data import BigtableDataClientAsync
    from google.cloud.bigtable.data import DeleteRangeFromColumn

    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    await table.mutate_row(
        "phone#4c410523#20190501",
        DeleteRangeFromColumn(family="cell_plan", qualifier=b"data_plan_01gb"),
    )

    await table.close()
    await client.close()

Node.js

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

await table.mutate({
  key: 'phone#4c410523#20190501',
  method: 'delete',
  data: {
    column: 'cell_plan:data_plan_05gb',
  },
});
await printRows();

מחיקה מקבוצת עמודות

בדוגמאות הקוד הבאות אפשר לראות איך מוחקים תאים מקבוצת עמודות בשורה:

Java

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class DeleteFromColumnFamilyExample {
  public void deleteFromColumnFamily(String projectId, String instanceId, String tableId)
      throws IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      dataClient.mutateRow(
          RowMutation.create(TableId.of(tableId), "phone#5c10102#20190501")
              .deleteFamily("stats_summary"));
    }
  }
}

Python

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

def delete_from_column_family(project_id, instance_id, table_id):
    from google.cloud.bigtable import Client

    client = Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row = table.row("phone#4c410523#20190501")
    row.delete_cells(column_family_id="cell_plan", columns=row.ALL_COLUMNS)
    row.commit()

‫Python asyncio

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

async def delete_from_column_family(project_id, instance_id, table_id):
    from google.cloud.bigtable.data import BigtableDataClientAsync
    from google.cloud.bigtable.data import DeleteAllFromFamily

    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    await table.mutate_row("phone#4c410523#20190501", DeleteAllFromFamily("cell_plan"))

    await table.close()
    await client.close()

Node.js

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

await table.mutate({
  key: 'phone#4c410523#20190501',
  method: 'delete',
  data: {
    column: 'cell_plan',
  },
});
await printRows();

מחיקה משורה

בדוגמאות הקוד הבאות אפשר לראות איך מוחקים את כל התאים משורה:

Java

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.Mutation;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class DeleteFromRowExample {
  public void deleteFromRow(String projectId, String instanceId, String tableId)
      throws IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      Mutation mutation = Mutation.create().deleteRow();
      dataClient.mutateRow(
          RowMutation.create(TableId.of(tableId), "phone#4c410523#20190501", mutation));
    }
  }
}

Python

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

def delete_from_row(project_id, instance_id, table_id):
    from google.cloud.bigtable import Client

    client = Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    row = table.row("phone#4c410523#20190501")
    row.delete()
    row.commit()

‫Python asyncio

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

async def delete_from_row(project_id, instance_id, table_id):
    from google.cloud.bigtable.data import BigtableDataClientAsync
    from google.cloud.bigtable.data import DeleteAllFromRow

    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    await table.mutate_row("phone#4c410523#20190501", DeleteAllFromRow())

    await table.close()
    await client.close()

Node.js

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

const row = table.row('phone#4c410523#20190501');
await row.delete();
await printRows();

מחיקה באמצעות סטרימינג ועיבוד באצווה

בדרך כלל, הדרך הכי טובה למחוק כמויות גדולות של נתונים היא לשלוח בקשות מחיקה בסטרימינג ובאצווה. האסטרטגיה הזו יכולה להיות שימושית אם יש לכם דרישות לשמירת נתונים ברמת פירוט גבוהה יותר מאלה שמדיניות איסוף האשפה מאפשרת.

אם האפליקציה שלכם כתובה ב-Java, אתם יכולים להפעיל את בקרת זרימת הכתיבה של פעולות בכמות גדולה כשאתם שולחים מחיקות בכמות גדולה ל-Bigtable. מידע נוסף זמין במאמרים בקרה על זרימת נתונים בכתיבה של נתונים בכמות גדולה והפעלת בקרה על זרימת נתונים בכתיבה של נתונים בכמות גדולה.

בדוגמאות הקוד הבאות מתחילים להזרים נתונים (קריאת שורות), יוצרים מהם חבילה, ואז עוברים על החבילה ומוחקים את כל התאים בעמודה data_plan_01gb1 במשפחת העמודות cell_plan:

המשך

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package deletes


import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigtable"
)

// streamingAndBatching starts a stream of data (reading rows), batches them, and then goes through the batch and deletes all the cells in column
func streamingAndBatching(w io.Writer, projectID, instanceID string, tableName string) error {
	// projectID := "my-project-id"
	// instanceID := "my-instance-id"
	// tableName := "mobile-time-series"

	ctx := context.Background()
	client, err := bigtable.NewClient(ctx, projectID, instanceID)
	if err != nil {
		return fmt.Errorf("bigtable.NewClient: %w", err)
	}
	defer client.Close()
	tbl := client.Open(tableName)

	// Slices to hold the row keys and the corresponding mutations.
	var rowKeys []string
	var mutations []*bigtable.Mutation

	// Read all rows from the table.
	err = tbl.ReadRows(ctx, bigtable.InfiniteRange(""), func(row bigtable.Row) bool {
		// For each row, create a mutation to delete the specified cell.
		mut := bigtable.NewMutation()
		mut.DeleteCellsInColumn("cell_plan", "data_plan_01gb")

		// Append the row key and mutation to the slices.
		rowKeys = append(rowKeys, row.Key())
		mutations = append(mutations, mut)

		// Continue processing rows.
		return true
	})
	if err != nil {
		return fmt.Errorf("tbl.ReadRows: %w", err)
	}

	if len(mutations) == 0 {
		return nil
	}
	// If there are mutations to apply, apply them in a single bulk request.
	// ApplyBulk returns a slice of errors, one for each mutation.
	var errs []error
	if errs, err = tbl.ApplyBulk(ctx, rowKeys, mutations); err != nil {
		return fmt.Errorf("tbl.ApplyBulk: %w", err)
	}
	if errs != nil {
		// Log any individual errors that occurred during the bulk operation.
		var errorCount int
		for _, individualErr := range errs {
			if individualErr != nil {
				fmt.Fprintf(w, "Error applying mutation: %v\n", individualErr)
				errorCount++
			}
		}
		if errorCount > 0 {
			return fmt.Errorf("encountered %d error(s) out of %d mutations", errorCount, len(errs))
		}
	}

	fmt.Fprintf(w, "Successfully deleted cells from all rows")
	return nil
}

Java

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.api.gax.batching.Batcher;
import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.models.Query;
import com.google.cloud.bigtable.data.v2.models.Row;
import com.google.cloud.bigtable.data.v2.models.RowMutationEntry;
import com.google.cloud.bigtable.data.v2.models.TableId;
import java.io.IOException;

public class BatchDeleteExample {
  public void batchDelete(String projectId, String instanceId, String tableId)
      throws InterruptedException, IOException {
    try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
      try (Batcher<RowMutationEntry, Void> batcher =
          dataClient.newBulkMutationBatcher(TableId.of(tableId))) {
        ServerStream<Row> rows = dataClient.readRows(Query.create(TableId.of(tableId)));
        for (Row row : rows) {
          batcher.add(
              RowMutationEntry.create(row.getKey()).deleteCells("cell_plan", "data_plan_05gb"));
        }
        // Blocks until mutations are applied on all submitted row entries.
        batcher.flush();
      }
    }
  }
}

Python

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

def streaming_and_batching(project_id, instance_id, table_id):
    from google.cloud.bigtable import Client

    client = Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)
    batcher = table.mutations_batcher(flush_count=2)
    rows = table.read_rows()
    for row in rows:
        row = table.row(row.row_key)
        row.delete_cell(column_family_id="cell_plan", column="data_plan_01gb")

    batcher.mutate_rows(rows)

‫Python asyncio

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

async def streaming_and_batching(project_id, instance_id, table_id):
    from google.cloud.bigtable.data import BigtableDataClientAsync
    from google.cloud.bigtable.data import DeleteRangeFromColumn
    from google.cloud.bigtable.data import RowMutationEntry
    from google.cloud.bigtable.data import ReadRowsQuery

    client = BigtableDataClientAsync(project=project_id)
    table = client.get_table(instance_id, table_id)

    async with table.mutations_batcher() as batcher:
        async for row in await table.read_rows_stream(ReadRowsQuery(limit=10)):
            await batcher.append(
                RowMutationEntry(
                    row.row_key,
                    DeleteRangeFromColumn(
                        family="cell_plan", qualifier=b"data_plan_01gb"
                    ),
                )
            )

    await table.close()
    await client.close()

Node.js

מידע על התקנת ספריית הלקוח של Bigtable ושימוש בה מופיע במאמר ספריות הלקוח של Bigtable.

כדי לבצע אימות ב-Bigtable, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

const rows = (await table.getRows({limit: 2}))[0];
const entries = rows.map(row => {
  return {
    key: row.id,
    method: 'delete',
    data: {
      column: 'cell_plan:data_plan_05gb',
    },
  };
});
await table.mutate(entries);
await printRows();

מחיקת נתונים בתצוגה מורשית

אפשר למחוק נתונים מטבלה על ידי שליחת בקשת מחיקה לתצוגה מורשית. צריך להשתמש באחת מהאפשרויות הבאות:

  • ‫CLI של gcloud
  • לקוח Bigtable ל-Java

כשמוחקים נתונים מתצוגה מורשית, צריך לציין את מזהה התצוגה המורשית בנוסף למזהה הטבלה.

הנתונים שאפשר למחוק מתצוגה מפורטת מוגבלים על ידי ההגדרה של התצוגה המפורטת. אפשר למחוק רק נתונים שכלולים בתצוגה המורשית. אם מנסים למחוק נתונים שלא נכללים בהגדרת התצוגה המורשית או שחלים עליהם הכללים הבאים, תוחזר השגיאה PERMISSION_DENIED:

  • אי אפשר למחוק טווח של שורות מתצוגה מורשית באמצעות DropRowRange ב-Admin API.
  • אי אפשר למחוק משורה.
  • מחיקה מעמודה נתמכת כל עוד היא מתבצעת בשורות שמופיעות בתצוגה המורשית.
  • מותר למחוק מעמודה משפחתית רק אם העמודה המשפחתית שצוינה מוגדרת כך שכל הקידומות של מסווגי העמודות (qualifier_prefixes="") מותרות בתצוגה המורשית.

לדוגמה, אם תנסו למחוק משורה מסוימת, והשורה הזו מכילה עמודות בטבלה הבסיסית שלא נמצאות בתצוגה המורשית שלכם, הבקשה תיכשל.

המאמרים הבאים