Aktivera extern dataåtkomst till strömmande tabeller och materialiserade vyer

Om du har aktiverat extern dataåtkomst till Unity Catalog kan du lägga till extern dataåtkomst till pipeline-hanterade och fristående materialiserade vyer och strömningstabeller. Detta gör det möjligt för externa Delta- och Iceberg-klienter att komma åt dina datauppsättningar via REST-API:erna för Unity Catalog och Iceberg-katalogen, utan att kräva en fullständig datakopia.

Extern dataåtkomst fungerar för dataset som hanteras av Lakeflow-pipelines och för fristående materialiserade vyer och strömningstabeller.

Capabilities

Att använda extern dataåtkomst ger åtkomst till samma data som är tillgängliga i Azure Databricks för pipelinehanterade och fristående materialiserade vyer och streamingtabeller, utan att skapa en kopia av data. Detta ger följande egenskaper för prestanda och funktioner:

  • Ingen datakopiering krävs: Extern åtkomst aktiveras utan att den fullständiga datamängden dupliceras.
  • Extern åtkomst via API:er: Läs materialiserade vyer och strömmande tabeller med hjälp av Delta Lake- eller Iceberg-API:er.
  • Läs-efter-skrivning-konsistens: Externa läsare kan få åtkomst till uppdaterade data efter en uppdatering av datauppsättningen, vilket säkerställer att inga inaktuella data förekommer. Uppdateringar är tillgängliga omedelbart vid uppdatering.
  • Objekt med en tabell: Datauppsättningar visas externt som hanterade tabeller med samma namn som källdatauppsättningen i API:erna för Unity Catalog.
  • Låg kostnad: Eftersom den fullständiga datamängden inte kopieras är kostnaden för att tillhandahålla extern åtkomst låg.

Requirements

Kraven för dina datauppsättningar är:

  • Unity-katalog: Dina strömmande tabeller och materialiserade vyer måste använda Unity Catalog.
  • Databricks Runtime-version: Du måste använda Databricks Runtime 17.3 och senare.
  • Standardpubliceringsläge: Extern läsbarhet stöds endast i standardpubliceringsläge. För att använda extern läsbarhet, migrera till standardpubliceringsläget. Funktioner som är beroende av externa metadata, till exempel CDF för materialiserade vyer, kommer att fungera i äldre publiceringsläge.

Kraven för dina klienter är:

  • Delta API-version: Klienten måste ha stöd för Delta Lake API:er 4.0.0 eller senare, inklusive borttagningsvektorer, och måste använda Katalog-API:er för Unity Catalog för åtkomst.
  • Isbergs-API-version: Alternativt kan klienten komma åt med isbergskatalog-API:er som stöder Iceberg v3-specifikationen.
  • Behörigheter för Unity-katalogen: Huvudkontot som läser datauppsättningarna externt måste ha USE SCHEMA extern behörighet för schemat och SELECT behörighet i tabellen.

Note

Om klienten inte stöder dessa krav kan du också använda kompatibilitetsläget, som stöder alla Delta- och Iceberg-klienter, men som kräver att du skapar en fullständig kopia av datamängden.

Så här aktiverar du åtkomst för en datauppsättning

Det finns två steg för att möjliggöra extern åtkomst för en datamängd.

  1. Aktivera externa metadata genom att använda antingen pipelinekonfigurationen eller en tabellegenskap. Inställningen på tabellnivå har företräde framför pipelinekonfigurationen när båda är angivna och stöds för både pipelinehanterade och fristående streamingtabeller och materialiserade vyer.

    • Pipelinekonfiguration: Ställ pipelines.externalMetadata.enabled in på true för att aktivera extern metadata för alla dataset i pipelinen. Fristående materialiserade vyer och strömningstabeller skapade med Databricks SQL har ingen pipeline-konfiguration; Använd istället en tabellegenskap.

      Användargränssnitt för pipelineinställningar

      I pipelineinställningarna utför du följande steg:

      1. Öppna pipelinen och klicka på Inställningar.
      2. Under Konfiguration lägger du till ett nyckel/värde-par: Nyckelpipelines.externalMetadata.enabled, Värdetrue.
      3. Klicka på Spara.

      JSON för pipelinekonfiguration

      I avsnittet configuration i din pipeline-JSON lägger du till:

      {
        "configuration": {
          "pipelines.externalMetadata.enabled": "true"
        }
      }
      
    • Tabellegenskap: Lägg till följande egenskap i streamingtabellen eller materialiserade vydefinitionen. För Lakeflow Connect Pipelines, se Set Delta table properties.

      CREATE OR REFRESH [MATERIALIZED VIEW | STREAMING TABLE] tbl_name
      TBLPROPERTIES('pipelines.externalMetadata.enabled' = 'true')
      

    När du har sparat konfigurationen kör eller startar du om pipelinen för att tillämpa ändringarna:

    • Utlösta pipelines: Kör pipelinen en gång.
    • Kontinuerliga pipelines: Stoppa och starta om pipelinen.

    För fristående Databricks SQL-objekt, använd CREATE OR REPLACE MATERIALIZED VIEW eller CREATE OR REFRESH STREAMING TABLE med tabellegenskapen. Create- eller refresh-satsen tillämpar egenskapen.

  2. Om du planerar att läsa datasetet med en modern Iceberg-klient, lägg till följande UniForm Iceberg V3-egenskaper utöver den externa metadata-egenskapen. För Lakeflow Connect Pipelines, se Set Delta table properties.

    Property Användning
    'pipelines.externalMetadata.enabled' = 'true' Aktivera extern åtkomst för tabellen. Denna tabellnivåinställning går före pipeline-konfigurationen när båda är satta.
    'delta.columnMapping.mode' = 'name' Kolumnmappning krävs för Iceberg.
    'delta.enableRowTracking' = 'true' Aktivera radspårning för Iceberg-läsningar.
    'delta.universalFormat.enabledFormats' = 'iceberg' Aktivera Iceberg-läsning.
    'delta.enableIcebergCompatV3' = 'true' Använd Iceberg V3 för läsning från Iceberg.
    CREATE OR REFRESH [MATERIALIZED VIEW | STREAMING TABLE] tbl_name
    TBLPROPERTIES(
      'delta.columnMapping.mode' = 'name',
      'delta.enableRowTracking' = 'true',
      'delta.enableIcebergCompatV3' = 'true',
      'delta.universalFormat.enabledFormats' = 'iceberg',
      'pipelines.externalMetadata.enabled' = 'true')
    

    För materialiserade vyer kan du använda motsvarande USING ICEBERG syntax istället.

    CREATE OR REFRESH MATERIALIZED VIEW tbl_name USING ICEBERG
    

    För datauppsättningar som hanteras via pipeline använder du instruktionerna ovan för att uppdatera pipelinen och tillämpa Iceberg-egenskaperna. För fristående Databricks SQL-objekt, kör objektdefinitionen igen med de uppdaterade egenskaperna. Använd CREATE OR REPLACE MATERIALIZED VIEW för en materialiserad vy eller CREATE OR REFRESH STREAMING TABLE för en strömningstabell. För att se egenskaperna för din datamängd använder du SQL-satserna DESCRIBE DETAIL eller DESCRIBE EXTENDED.

Felsökning av extern dataåtkomst

Om du tycker att den externa metadatan är föråldrad kan en principal med MODIFY privilegiet i tabellen manuellt trigga metadatauppdateringen på delad klusterberäkning med Databricks Runtime 17.3 eller högre:

REPAIR TABLE <catalog>.<schema>.<table-name> SYNC METADATA;

Du kan kontrollera förekomsten av Iceberg-metadata i Catalog Explorer-gränssnittet på tabellens detaljsida. Alternativt, kör följande kommandon i SQL-editorn eller en Azure Databricks-notebook:

DESCRIBE DETAIL <catalog>.<schema>.<table-name>;
DESCRIBE EXTENDED <catalog>.<schema>.<table-name>;

För en streamingtabell, jämför Iceberg-metadataversionen med den senaste versionen av streamingtabellen. Versionsjämförelse för materialiserade vyer är ännu inte tillgänglig.

Läsa data från externa klienter

Följande avsnitt ger exempel på hur du läser din datamängd från olika klienter och miljöer.

För installationsdetaljer, se Delta-klientåtkomst och Iceberg-klientåtkomst.

Använda Unity REST API med Spark Delta Reader

Använd Apache Spark™ version 4.0 eller senare. Du kan ladda ned från https://spark.apache.org/downloads.html.

  1. Kör följande kommando baserat på molnleverantören för att starta ett Spark SQL-gränssnitt med Delta 4.0 och Unity Catalog.

    AWS

    bin/spark-sql \
        --packages org.apache.spark:spark-hadoop-cloud_2.13:4.0.0,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
        --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
        --conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
        --conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
        --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
        --conf spark.sql.defaultCatalog=<uc-catalog-name>
    

    Azure

    bin/spark-sql \
        --packages org.apache.hadoop:hadoop-azure:3.3.6,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
        --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
        --conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
        --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
        --conf spark.sql.defaultCatalog=<uc-catalog-name>
    

    GCP

    bin/spark-sql \
        --packages io.unitycatalog:unitycatalog-spark_2.13:0.3.1  \
        --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
        --conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
        --conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
        --conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
        --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
        --conf spark.sql.defaultCatalog=<uc-catalog-name>
    
  2. Från SQL-gränssnittet kan du nu komma åt din datauppsättning med Spark SQL. Ett exempel:

    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
    

Använd den Snowflake Iceberg Reader

I Snowflake kan du använda Isbergsläsaren. Detta kräver stöd för Iceberg v3 i Snowflake.

  1. Konfigurera Iceberg REST-katalogen i Snowflake.

    CREATE OR REPLACE CATALOG INTEGRATION my_uc_int
      CATALOG_SOURCE = ICEBERG_REST
      TABLE_FORMAT = ICEBERG
      CATALOG_NAMESPACE = '<uc-schema-name>'
      REST_CONFIG = (
        CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
        CATALOG_NAME = '<uc-catalog-name>'
        ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
      )
      REST_AUTHENTICATION = (
        TYPE = BEARER
        BEARER_TOKEN = '<PAT>'
      )
      ENABLED = TRUE;
    
    CREATE OR REPLACE ICEBERG TABLE my_table
      CATALOG = 'my_uc_int'
      CATALOG_TABLE_NAME = '<uc-table-name>';
    
  2. Åtkomst till din datamängd från Snowflake SQL.

    ALTER ICEBERG TABLE my_table REFRESH;
    SELECT * FROM my_table;
    

Använda Iceberg REST-katalogen med Spark Iceberg-läsare

Använd Apache Spark™ version 4.0 eller senare. Du kan ladda ned från https://spark.apache.org/downloads.html.

  1. I AWS kör du följande kommando för att starta ett Spark SQL-gränssnitt med Iceberg v3.

    bin/spark-sql \
      --packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 \
      --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
      --conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
      --conf spark.sql.catalog.<uc-catalog-name>.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
      --conf spark.sql.catalog.<uc-catalog-name>.type=rest \
      --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url>/api/2.1/unity-catalog/iceberg-rest \
      --conf spark.sql.catalog.<uc-catalog-name>.token='<PAT>' \
      --conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> \
      --conf spark.sql.iceberg.vectorization.enabled=false
    
  2. Få åtkomst till din datauppsättning från Spark SQL.

    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
    

Migrera från kompatibilitetsläge

Om du för närvarande delar en datauppsättning med kompatibilitetsläge kan du migrera till att använda extern dataåtkomst.

  1. Aktivera den här funktionen genom att följa stegen i Så här aktiverar du åtkomst för en datauppsättning.
  2. Inaktivera kompatibilitetsläge. Se Inaktivera kompatibilitetsläge

Limitations

Följande är kända begränsningar med extern dataåtkomst för strömmande tabeller och materialiserade vyer.

  • Externa skrivningar: Externa skrivningar till pipelinedatauppsättningar stöds inte.
  • Path-Based Access: Externa läsare som kräver sökvägsbaserad åtkomst (läser direkt via en lagringsplats i stället för UC API-gränssnittet) stöds inte. För att stödja sökvägsbaserad åtkomst kan du använda kompatibilitetsläge, som stöder sökvägsbaserad åtkomst, men kräver en fullständig kopia av datamängden.
  • Säkerhetsfunktioner: Stöd för säkerhet på radnivå eller maskering på kolumnnivå från externa läsningar stöds inte.
  • Tidsresor:Tidsresor via denna funktion stöds inte.
  • Katalogincheckningar (beta):Katalogincheckningar är inte kompatibla med extern dataåtkomst. För att använda åtkomst till externa data för en strömmande tabell eller en materialiserad vy måste du först inaktivera katalogincheckningar.
  • Fabric: Läsning från Microsoft Fabric stöds inte.