INTEGRITY Dokumentace

Mazání dat

Mazání dat z R2 Data Catalog nebo jakéhokoli katalogu Apache Iceberg vyžaduje, aby operace probíhaly formou transakce přímo přes katalog. Ruční mazání metadat nebo datových souborů přímo v úložišti může vést k poškození datového katalogu.

Automatická údržba tabulky

R2 Data Catalog dokáže automaticky spravovat operace údržby tabulek, jako je vypršení platnosti snímků a kompaktace. Tyto průběžné operace pomáhají udržovat nízkou latenci a náklady na úložiště.

Pokud nepovolíte automatickou údržbu, musíte tyto operace provádět ručně.

Další informace najdete v údržba tabulek dokumentace.

Příklady zapnutí automatické údržby tabulek v R2 Data Catalog

# Enable automatic snapshot expiration for entire catalog
npx wrangler r2 bucket catalog snapshot-expiration enable my-bucket \
	--older-than-days 30 \
	--retain-last 5

# Enable automatic compaction for entire catalog
npx wrangler r2 bucket catalog compaction enable my-bucket \
	--target-size 256

Další příklady najdete v správa katalogů dokumentace.

Ruční mazání a odstraňování dat

Data je nutné ručně smazat pro:

Následují základní příklady s použitím PySpark, obdobné operace však lze provádět i pomocí jiných enginů kompatibilních s Iceberg. Konfiguraci PySpark najdete v naší příklad nebo oficiální Dokumentace PySpark ↗.

Mazání řádků z tabulky

# Creates new snapshots and marks old files for cleanup
spark.sql("""
	DELETE FROM r2dc.namespace.table_name
	WHERE column_name = 'value'
""")

# The following is effectively a TRUNCATE operation
spark.sql("DELETE FROM r2dc.namespace.table_name")

# For large deletes, use partitioned tables and delete entire partitions for faster performance:
spark.sql("""
    DELETE FROM r2dc.namespace.table_name
    WHERE date_partition < '2024-01-01'
""")

Odstraňování tabulek a oborů názvů

# Removes table from catalog but keeps data files in R2 storage
spark.sql("DROP TABLE r2dc.namespace.table_name")

# ⚠️  DANGER: Permanently deletes all data files from R2
# This operation cannot be undone
spark.sql("DROP TABLE r2dc.namespace.table_name PURGE")

# Use CASCADE to drop all tables within the namespace
spark.sql("DROP NAMESPACE r2dc.namespace_name CASCADE")

# You will need to PURGE the tables before running CASCADE to permanently delete data files
# This can be done with a loop over all tables in the namespace
tables = spark.sql("SHOW TABLES IN r2dc.namespace_name").collect()
for row in tables:
	table_name = row['tableName']
  spark.sql(f"DROP TABLE r2dc.namespace_name.{table_name} PURGE")
spark.sql("DROP NAMESPACE r2dc.namespace_name CASCADE")

Ruční operace údržby

# Remove old metadata and data files marked for deletion
# The following retains the last 5 snapshots and deletes files older than Nov 28, 2024
spark.sql("""
	CALL r2dc.system.expire_snapshots(
    table => 'r2dc.namespace_name.table_name',
    older_than => TIMESTAMP '2024-11-28 00:00:00',
     retain_last => 5
  )
""")

# Removes unreferenced data files from R2 storage (orphan files)
spark.sql("""
  CALL r2dc.system.remove_orphan_files(
    table => 'namespace.table_name'
  )
""")

# Rewrite data files with a target file size (e.g., 512 MB)
spark.sql("""
  CALL r2dc.system.rewrite_data_files(
    table => 'r2dc.namespace_name.table_name',
    options => map('target-file-size-bytes', '536870912')
  )
""")

O metadatech Apache Iceberg

Apache Iceberg používá vrstvenou strukturu metadat pro efektivní správu dat tabulky. Zde jsou klíčové komponenty a struktura souborů:

Co se stane během mazání

Apache Iceberg podporuje dva režimy mazání: Kopírování při zápisu (COW) a Merge-on-Read (MOR). Oba vytvoří nový snímek a označí staré soubory k vyčištění, ale s mazáním nakládají odlišně:

Aspekt Kopírování při zápisu (COW) Merge-on-Read (MOR)
Jak funguje mazání Přepíše datové soubory bez smazaných řádků Vytváří soubory pro mazání, které označují řádky k přeskočení
Výkon dotazů Rychlé (slučování není potřeba) Pomalejší (vyžaduje sloučení za běhu čtení)
Výkon zápisu Pomalejší (přepisuje datové soubory) Rychlé (zapisují se pouze značky mazání)
Dopad na úložiště Okamžitě vytváří nové datové soubory Postupem času hromadí soubory mazání
Potřeby údržby Vypršení platnosti snímků Vypršení platnosti snímků + kompaktace (rewrite_data_files)
Vhodné pro Úlohy náročné na čtení Zátěže náročné na zápis s častými drobnými změnami

Běžné operace mazání

Tyto operace fungují stejně pro tabulky COW i MOR:

Operace Co dělá Data smazána? Vratné?
DELETE FROM Odstraní řádky odpovídající podmínce Ne (označeno k vyčištění) Pomocí časového cestování1
DROP TABLE Odstraní tabulku z katalogu Ne Ano (pokud existují data files)
DROP TABLE ... PURGE Odstraní tabulku a smaže data Ano Ne
expire_snapshots Odstraňuje staré snímky a soubory Ano Ne
remove_orphan_files Odstraní soubory bez odkazů Ano Ne

Operace specifické pro MOR

U tabulek typu Merge-on-Read může být kvůli výkonu nutné mazání aplikovat ručně:

Operace Co dělá Kdy použít
rewrite_data_files (kompaktace) Uplatňuje mazání a slučuje soubory Když výkon dotazů klesá kvůli velkému množství delete files

Poznámky pod čarou

  1. Časové cestování dostupné do expire_snapshots se nazývá ↩