Importing and migrating Iceberg table format v2
Importing or migrating Hive tables Iceberg table formats v2 are supported only on existing external Hive tables. When you import a table to Iceberg, the source and destination remain intact and independent. When you migrate a table, the existing Hive table is converted into an Iceberg table. You can use Spark SQL to import or migrate a Hive table to Iceberg.
Importing
spark.sql("CALL <catalog>.system.snapshot(source_table => '<src>', table => '<dest>', properties => map('format-version', '2', 'write.delete.mode', '<delete-mode>', 'write.update.mode', '<update-mode>', 'write.merge.mode', '<merge-mode>'))")
-
<src>
is the qualified name of the Hive table -
<dest>
is the qualified name of the Iceberg table to be created -
<catalog>
is the name of the catalog, which you pass in a configuration file. For more information, see Configuring Catalog linked below. -
<delete-mode>
<update-mode>
and<merge-mode>
are the modes that shall be used to perform the respective operation. If unspecified, they default to'merge-on-read'
For example:
spark.sql("CALL spark_catalog.system.snapshot('hive_db.hive_tbl',
'iceberg_db.iceberg_tbl')")
Migrating
spark.sql("CALL <catalog>.system.migrate('<src>', map('format-version', '2', 'write.delete.mode', '<delete-mode>', 'write.update.mode', '<update-mode>', 'write.merge.mode', '<merge-mode>'))")
-
<src>
is the qualified name of the Hive table -
<catalog>
is the name of the catalog, which you pass in a configuration file. For more information, see Configuring Catalog linked below. -
<delete-mode>
<update-mode>
and<merge-mode>
are the modes that shall be used to perform the respective operation. If unspecified, they default to'merge-on-read'
For example:
spark.sql("CALL spark_catalog.system.migrate('hive_db.hive_tbl', map('format-version', '2', 'write.delete.mode', 'merge-on-read', 'write.update.mode', 'merge-on-read', 'write.merge.mode', 'merge-on-read'))")
Upgrading Iceberg table format v1 to v2
To upgrade an Iceberg table format from v1 to v2, run an ALTER TABLE command as follows:
spark.sql("ALTER TABLE <table_name> SET TBLPROPERTIES('merge-on-read', '2')")
<delete-mode>,<update-mode>,
and
<merge-mode>
can be specified as the modes that shall be used to
perform the respective operation. If unspecified, they default to
‘merge-on-read'