{"library":"pyiceberg","title":"PyIceberg","description":"PyIceberg is the official Python client for Apache Iceberg, an open table format designed for huge analytic datasets. It provides a pure Pythonic experience, enabling DML operations and queries on Iceberg tables without a JVM, and integrates seamlessly with popular Python data tools like Polars, Pandas, and DuckDB. Currently at version 0.11.1, the library maintains a regular release cadence with minor feature releases and necessary patch updates.","language":"python","status":"active","last_verified":"Tue May 19","install":{"commands":["pip install pyiceberg","pip install \"pyiceberg[s3fs,pyarrow]\""],"cli":null},"imports":["from pyiceberg.catalog import load_catalog","from pyiceberg.schema import Schema","from pyiceberg.table import Table"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom pyiceberg.catalog import load_catalog\nfrom pyiceberg.schema import Schema, NestedField, PrimitiveType\nimport pyarrow as pa\nimport datetime\n\n# Configure a local SQL catalog using environment variables or direct properties\n# For simplicity, we'll use a temporary local directory.\nwarehouse_path = '/tmp/pyiceberg_warehouse'\nos.makedirs(warehouse_path, exist_ok=True)\n\ncatalog = load_catalog(\n    \"default\",\n    type=\"sql\",\n    uri=f\"sqlite:///{warehouse_path}/pyiceberg_catalog.db\",\n    warehouse=f\"file://{warehouse_path}\"\n)\n\nprint(f\"✓ Successfully loaded catalog: {catalog.name}\")\n\n# Define a simple schema\nschema = Schema(\n    NestedField(1, \"id\", PrimitiveType.long(), required=True),\n    NestedField(2, \"name\", PrimitiveType.string(), required=False),\n    NestedField(3, \"event_time\", PrimitiveType.timestamp_ntz(), required=False)\n)\n\nnamespace = \"default\"\ntable_name = \"my_sample_table\"\n\n# Create a namespace if it doesn't exist\ncatalog.create_namespace_if_not_exists(namespace)\nprint(f\"✓ Ensured namespace '{namespace}' exists.\")\n\n# Create a table\ntry:\n    table = catalog.create_table(f\"{namespace}.{table_name}\", schema)\n    print(f\"✓ Successfully created table: {table.identifier}\")\nexcept Exception as e:\n    print(f\"Table {namespace}.{table_name} might already exist. Loading it instead. Error: {e}\")\n    table = catalog.load_table(f\"{namespace}.{table_name}\")\n\n# Prepare some data using PyArrow\ndata = pa.table({\n    \"id\": [1, 2, 3],\n    \"name\": [\"Alice\", \"Bob\", \"Charlie\"],\n    \"event_time\": [datetime.datetime.now() - datetime.timedelta(days=i) for i in range(3)]\n})\n\n# Append data to the table\ntable.append(data)\nprint(f\"✓ Appended {len(data)} rows to the table.\")\n\n# Read data from the table\nscan_result = table.scan().to_arrow()\nprint(f\"\\nTotal rows read: {len(scan_result)}\")\nprint(\"Sample data:\")\nprint(scan_result.to_pandas())\n\n# Clean up (optional: uncomment to drop the table and namespace)\n# catalog.drop_table(f\"{namespace}.{table_name}\")\n# catalog.drop_namespace(namespace)\n# print(f\"Cleaned up table {table_name} and namespace {namespace}.\")","lang":"python","description":"This quickstart demonstrates how to initialize a local SQL catalog, define an Iceberg schema, create a new table, append PyArrow data to it, and then read the data back. It uses local file system for both catalog metadata and data storage.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-19","installed_version":"0.10.0","pypi_latest":"0.11.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":75,"avg_install_s":10.5,"avg_import_s":1.37,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.27,"mem_mb":24.1,"disk_size":"81.9M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.33,"mem_mb":24.1,"disk_size":"81.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":15.6,"import_time_s":0.96,"mem_mb":24.1,"disk_size":"321M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.94,"mem_mb":24.1,"disk_size":"316M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.8,"import_time_s":0.92,"mem_mb":24.1,"disk_size":"89M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.94,"mem_mb":24.1,"disk_size":"88M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.75,"mem_mb":25.8,"disk_size":"91.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2,"mem_mb":25.9,"disk_size":"90.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":13.2,"import_time_s":1.58,"mem_mb":25.8,"disk_size":"334M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.54,"mem_mb":25.9,"disk_size":"330M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7,"import_time_s":1.59,"mem_mb":25.8,"disk_size":"98M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.53,"mem_mb":25.9,"disk_size":"98M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.72,"mem_mb":25.4,"disk_size":"81.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.86,"mem_mb":25.4,"disk_size":"81.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":11,"import_time_s":1.72,"mem_mb":25.4,"disk_size":"324M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.84,"mem_mb":25.4,"disk_size":"320M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":6,"import_time_s":1.72,"mem_mb":25.4,"disk_size":"88M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.76,"mem_mb":25.4,"disk_size":"88M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.3,"mem_mb":23,"disk_size":"81.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.4,"mem_mb":23,"disk_size":"81.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":12,"import_time_s":1.32,"mem_mb":23,"disk_size":"386M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.43,"mem_mb":23,"disk_size":"382M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":6.3,"import_time_s":1.31,"mem_mb":23,"disk_size":"88M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.45,"mem_mb":23,"disk_size":"88M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"s3fs,pyarrow","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.06,"mem_mb":23.5,"disk_size":"66.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.13,"mem_mb":23.6,"disk_size":"66.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":17.6,"import_time_s":0.98,"mem_mb":23.4,"disk_size":"345M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"s3fs,pyarrow","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.97,"mem_mb":23.5,"disk_size":"344M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":8.6,"import_time_s":0.93,"mem_mb":23.5,"disk_size":"65M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pyiceberg","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.96,"mem_mb":23.5,"disk_size":"65M"}]}}