Externe gegevenstoegang tot streamingtabellen en gerealiseerde weergaven inschakelen

Als je toegang tot externe gegevens voor Unity Catalog hebt ingeschakeld, kun je toegang tot externe gegevens toevoegen aan door pipelines beheerde en zelfstandige gematerialiseerde weergaven en streamingtabellen. Hierdoor hebben externe Delta- en Iceberg-clients toegang tot uw gegevenssets via de REST API's van de Unity-catalogus en icebergcatalogus, zonder dat hiervoor een volledige gegevenskopie is vereist.

Externe data-toegang werkt voor datasets die worden beheerd door Lakeflow-pijplijnen en voor zelfstandige gematerialiseerde weergaven en streamingtabellen.

Capabilities

Door externe data-toegang te gebruiken, worden dezelfde data beschikbaar gesteld die in Azure Databricks beschikbaar zijn voor pipeline-managed en standalone gematerialiseerde weergaven en streamingtabellen, zonder een duplicaat van de data te creëren. Dit biedt de volgende kenmerken voor prestaties en functionaliteit:

  • Er zijn geen gegevenskopie vereist: Externe toegang is ingeschakeld zonder de volledige gegevensset te dupliceren.
  • Externe toegang via API's: Lees gerealiseerde weergaven en streamingtabellen met behulp van Delta Lake- of Iceberg-API's.
  • Consistentie lezen na schrijven: Externe lezers hebben toegang tot up-to-datumgegevens na een update van de gegevensset, waardoor er geen veroudering mogelijk is. Updates zijn direct beschikbaar na het vernieuwen.
  • Eén tabelobject: Gegevenssets worden extern weergegeven als beheerde tabellen met dezelfde naam als de brongegevensset in Unity Catalog-API's.
  • Lage kosten: Omdat de volledige gegevensset niet wordt gekopieerd, is de overhead voor het leveren van externe toegang laag.

Requirements

De vereisten voor uw gegevenssets zijn:

  • Unity Catalog: Uw streamingtabellen en gerealiseerde weergaven moeten Unity Catalog gebruiken.
  • Databricks Runtime-versie: U moet Databricks Runtime 17.3 en hoger gebruiken.
  • Standaard publicatiemodus: Externe leesbaarheid wordt alleen ondersteund in de standaard publicatiemodus. Om externe leesbaarheid te gebruiken, migrer naar de standaard publicatiemodus. Functies die afhankelijk zijn van externe metadata, zoals gematerialiseerde weergave-CDF, zullen werken in de verouderde publicatiemodus.

De vereisten voor uw klanten zijn:

  • Delta API-versie: De client moet Delta Lake-API's 4.0.0 of hoger ondersteunen, inclusief verwijderingsvectoren, en moet de Catalogus-API's van Unity Catalog gebruiken voor toegang.
  • Iceberg-API-versie: De client kan ook toegang krijgen met behulp van Iceberg-catalogus-API's die ondersteuning bieden voor de Iceberg v3-specificatie.
  • Unity Catalog-bevoegdheden: De principal die de gegevenssets extern leest, moet de externe USE SCHEMA bevoegdheid voor het schema en SELECT de bevoegdheid voor de tabel hebben.

Note

Als uw client deze vereisten niet ondersteunt, kunt u ook de compatibiliteitsmodus gebruiken, die ondersteuning biedt voor alle Delta- en Iceberg-clients, maar u moet wel een volledige kopie van de gegevensset maken.

Toegang inschakelen voor een gegevensset

Er zijn twee stappen om externe toegang voor een dataset mogelijk te maken.

  1. Schakel externe metadata in via de pijplijnconfiguratie of een tabeleigenschap. De tabelniveau-instelling heeft voorrang boven de pipelineconfiguratie wanneer beide zijn ingesteld en wordt ondersteund voor zowel pipeline-managed als standalone streaming-tabel en gematerialiseerde weergave.

    • Pijplijnconfiguratie: Stel in pipelines.externalMetadata.enabled op true om externe metadata voor alle datasets in de pijplijn in te schakelen. Zelfstandige gematerialiseerde weergaven en streamingtabellen gemaakt met Databricks SQL hebben geen pipelineconfiguratie; Gebruik in plaats daarvan een tabeleigenschap.

      Gebruikersinterface voor pijplijninstellingen

      Voltooi in de pijplijninstellingen de volgende stappen:

      1. Open uw pijplijn en klik op Instellingen.
      2. Voeg onder Configuratie een sleutel-waardepaar toe: Sleutelpipelines.externalMetadata.enabled, Waardetrue.
      3. Klik op Opslaan.

      JSON voor pijplijnconfiguratie

      Voeg in de configuration sectie van uw pijplijn-JSON het volgende toe:

      {
        "configuration": {
          "pipelines.externalMetadata.enabled": "true"
        }
      }
      
    • Tabeleigenschap: Voeg de volgende eigenschap toe aan de streamingtabel of gematerialiseerde weergavedefinitie. Voor Lakeflow Connect Pipelines, zie Set Delta table properties.

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

    Nadat u de configuratie hebt opgeslagen, voert u de pijplijn uit of start u deze opnieuw om de wijzigingen toe te passen:

    • Getriggerde pijplijnen: voer de pijplijn één keer uit.
    • Continue pijplijnen: Stop en start de pijplijn opnieuw.

    Gebruik voor zelfstandige Databricks SQL-objecten CREATE OR REPLACE MATERIALIZED VIEW of CREATE OR REFRESH STREAMING TABLE met de tabeleigenschap. De create- of refresh-instructie past de eigenschap toe.

  2. Als je van plan bent de dataset te lezen met een moderne Iceberg-client, voeg dan de volgende UniForm Iceberg V3-eigenschappen toe naast de externe metadata-eigenschap. Voor Lakeflow Connect Pipelines, zie Set Delta table properties.

    Property Gebruik
    'pipelines.externalMetadata.enabled' = 'true' Schakel externe toegang voor de tabel in. Deze instelling op tabelniveau heeft voorrang op de pipelineconfiguratie wanneer beide zijn ingesteld.
    'delta.columnMapping.mode' = 'name' Kolomtoewijzing is vereist voor Iceberg.
    'delta.enableRowTracking' = 'true' Schakel rijtracering in voor leesbewerkingen van Iceberg.
    'delta.universalFormat.enabledFormats' = 'iceberg' Activeer Iceberg-reads.
    'delta.enableIcebergCompatV3' = 'true' Gebruik Iceberg V3 voor leesbewerkingen in 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')
    

    Voor gematerialiseerde weergaven kun je in plaats daarvan de equivalente USING ICEBERG syntaxis gebruiken.

    CREATE OR REFRESH MATERIALIZED VIEW tbl_name USING ICEBERG
    

    Voor pipeline-beheerde datasets gebruik je de bovenstaande pipeline-update-instructies om de Iceberg-eigenschappen toe te passen. Voor standalone Databricks SQL-objecten voer je de objectdefinitie opnieuw uit met de bijgewerkte eigenschappen. Gebruik CREATE OR REPLACE MATERIALIZED VIEW voor een gematerialiseerde weergave of CREATE OR REFRESH STREAMING TABLE voor een streamingtabel. Om de eigenschappen van je dataset te zien, gebruik de DESCRIBE DETAIL of DESCRIBE EXTENDED SQL-instructies.

Probleemoplossing voor externe gegevenstoegang

Als je denkt dat de externe metadata verouderd is, kan een principal met het MODIFY privilege op de tabel handmatig de metadata-update op gedeelde clusterberekening activeren met Databricks Runtime 17.3 of hoger:

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

Je kunt de aanwezigheid van de Iceberg-metadata controleren in de Catalog Explorer UI op de pagina met tabeldetails. Alternatief kun je de volgende commando's uitvoeren in de SQL-editor of een Azure Databricks-notebook:

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

Voor een streamingtabel kun je de Iceberg-metadataversie vergelijken met de nieuwste streamingtabelversie. Versievergelijking voor gematerialiseerde weergaven is nog niet beschikbaar.

Gegevens van externe clients lezen

De volgende secties geven voorbeelden van hoe je je dataset kunt lezen vanuit verschillende clients en omgevingen.

Voor installatiedetails, zie Delta clienttoegang en Iceberg clienttoegang.

Unity REST API gebruiken met de Spark Delta Reader

Gebruik Apache Spark™ versie 4.0 of hoger. U kunt downloaden van https://spark.apache.org/downloads.html.

  1. Voer op basis van uw cloudprovider de volgende opdracht uit om een Spark SQL-shell te starten met Delta 4.0 en 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>
    

    Azuur

    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. Vanuit de SQL-shell hebt u nu toegang tot uw gegevensset met Spark SQL. Voorbeeld:

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

De Snowflake Iceberg Reader gebruiken

In Snowflake kunt u de Iceberg Reader gebruiken. Hiervoor is ondersteuning voor Iceberg v3 in Snowflake vereist.

  1. Stel de Iceberg REST-catalogus in Snowflake in.

    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. Toegang tot je dataset via Snowflake SQL.

    ALTER ICEBERG TABLE my_table REFRESH;
    SELECT * FROM my_table;
    

De Iceberg REST-catalogus gebruiken met Spark Iceberg-lezer

Gebruik Apache Spark™ versie 4.0 of hoger. U kunt downloaden van https://spark.apache.org/downloads.html.

  1. Voer in AWS de volgende opdracht uit om een Spark SQL-shell te starten met 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. Open uw gegevensset vanuit Spark SQL.

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

Migreren vanuit de compatibiliteitsmodus

Als u momenteel een gegevensset deelt met behulp van de compatibiliteitsmodus, kunt u migreren naar het gebruik van externe gegevenstoegang.

  1. Schakel deze functie in volgens de stappen in Het inschakelen van toegang voor een gegevensset.
  2. Schakel de compatibiliteitsmodus uit. Zie Compatibiliteitsmodus uitschakelen

Beperkingen

De volgende zijn de bekende beperkingen van externe gegevenstoegang voor streamingtabellen en gematerialiseerde weergaven.

  • Externe schrijfbewerkingen: Externe schrijfbewerkingen naar pijplijngegevenssets worden niet ondersteund.
  • Path-Based Access: Externe lezers waarvoor padgebaseerde toegang is vereist (rechtstreeks lezen via een opslaglocatie in plaats van de UC API-interface) worden niet ondersteund. Ter ondersteuning van padgebaseerde toegang kunt u de compatibiliteitsmodus gebruiken, die wel padgebaseerde toegang ondersteunt, maar hiervoor is een volledige kopie van de gegevensset vereist.
  • Beveiligingsfuncties: Het ondersteunen van beveiliging op rijniveau of maskering op kolomniveau van externe leesbewerkingen wordt niet ondersteund.
  • Tijdreizen:Tijdreizen via deze functie wordt niet ondersteund.
  • Catalogus-commits (bèta):Catalogus-commits zijn niet compatibel met toegang tot externe gegevens. Als je toegang tot externe gegevens wilt gebruiken voor een streamingtabel of een gematerialiseerde weergave, moet je eerst catalogus-commits uitschakelen.
  • Fabric: lezen vanuit Microsoft Fabric wordt niet ondersteund.