Aktivieren Sie den externen Datenzugriff für Streamingtabellen und materialisierte Ansichten.

Wichtig

Dieses Feature befindet sich in der Public Preview.

Wenn Sie den Zugriff auf externe Daten auf den Unity-Katalog aktiviert haben, können Sie ihren Pipeline-Datasets auch externen Datenzugriff hinzufügen. Dadurch können externe Delta- und Iceberg-Clients über die Unity-Katalog- und Iceberg-Katalog-REST-APIs auf Ihre Datasets zugreifen, ohne dass eine vollständige Datenkopie erforderlich ist.

Externer Datenzugriff für Pipeline-Datasets funktioniert für Lakeflow Spark Declarative Pipelines.

Fähigkeiten

Die Verwendung des externen Datenzugriffs für Pipeline-Datasets macht dieselben Daten verfügbar, die in Azure Databricks verfügbar sind, ohne ein Duplikat der Daten zu erstellen. Dies bietet die folgenden Merkmale für Leistung und Funktionalität:

  • Es ist keine Datenkopie erforderlich: Externer Zugriff ist aktiviert, ohne das vollständige Dataset zu duplizieren.
  • Externer Zugriff über APIs: Lesen Sie materialisierte Ansichten und Streamingtabellen mithilfe von Delta Lake- oder Iceberg-APIs.
  • Read-after-write-Konsistenz: Externe Leser können nach einer Aktualisierung des Datensatzes auf aktuelle Daten zugreifen, wodurch sichergestellt wird, dass keine veralteten Daten vorliegen. Updates sind sofort nach der Aktualisierung verfügbar.
  • Einzelnes Tabellenobjekt: Datasets werden extern als verwaltete Tabellen mit demselben Namen wie das Quelldatenset in Unity-Katalog-APIs angezeigt.
  • Niedrige Kosten: Da das vollständige Dataset nicht kopiert wird, ist der Aufwand für die Bereitstellung externer Zugriffe gering.

Requirements

Die Anforderungen für Ihre Datasets sind:

  • Der externe Zugriff muss im Schema aktiviert sein: Ihr Arbeitsbereich muss für den zugriff auf externe Daten für Pipeline-Datasets public preview registriert sein, und er muss für das Schema mit Ihren Datasets aktiviert sein. Siehe Aktivieren des Zugriffs auf externe Daten im Unity Catalog.
  • Unity-Katalog: Ihre Streamingtabellen und materialisierten Ansichten müssen Unity-Katalog verwenden.
  • Databricks Runtime-Version: Sie müssen Databricks Runtime 17.3 und höher verwenden.

Die Anforderungen für Ihre Clients sind:

  • Delta-API-Version: Der Client muss Delta Lake-APIs 4.0.0 oder höher unterstützen, einschließlich Löschvektoren, und muss die Unity-Katalogkatalog-APIs für den Zugriff verwenden.
  • Iceberg-API-Version: Alternativ kann der Client mithilfe von Iceberg-Katalog-APIs zugreifen, die die Iceberg v3-Spezifikation unterstützen.
  • Unity-Katalogberechtigungen: Der Prinzipal, der extern auf die Datensätze zugreift, muss über die EXTERNAL-USE SCHEMABerechtigung für das Schema und über die SELECT Berechtigung für die Tabelle verfügen.

Note

Wenn Ihr Client diese Anforderungen nicht unterstützt, können Sie auch den Kompatibilitätsmodus verwenden, der alle Delta- und Iceberg-Clients unterstützt, aber eine vollständige Kopie des Datasets erstellt.

So aktivieren Sie den Zugriff für ein Dataset

Es gibt drei Schritte zum Aktivieren des externen Zugriffs für ein Dataset.

  1. Fügen Sie in Ihrer Datasetdefinition Folgendes TBLPROPERTIEShinzu. Dies ist nur für Iceberg v3-Leser erforderlich. Wenn Sie nur über Delta-Leser verfügen, können Sie diesen Schritt überspringen.

    Eigentum Verwendung
    'delta.columnMapping.mode' = 'name' Für Iceberg ist die Spaltenzuordnung erforderlich.
    'delta.universalFormat.enabledFormats' = 'iceberg' Aktivieren Sie UniForm für Iceberg.
    'delta.enableIcebergCompatV3' = 'true' Verwenden Sie Iceberg V3 für UniForm.
    'delta.enableChangeDataFeed' = 'false' Der Änderungsdatenfeed ist nicht mit externem Zugriff kompatibel, daher muss dies false sein.

    Sie können beispielsweise die Definition einer materialisierten Ansicht in Lakeflow Spark Declarative Pipelines aktualisieren, indem Sie Ihrer Abfrage Folgendes TBLPROPERTIES hinzufügen:

    CREATE OR REFRESH MATERIALIZED VIEW view_name
      TBLPROPERTIES(
       ...
       'delta.columnMapping.mode' = 'name',
       'delta.enableIcebergCompatV3' = 'true',
       'delta.universalFormat.enabledFormats' = 'iceberg',
       'delta.enableChangeDataFeed' = 'false')
    ...
    

    Um die Eigenschaften Ihres Datasets anzuzeigen, können Sie die DESCRIBE EXTENDED SQL-Anweisung verwenden.

  2. Wenden Sie die Iceberg-Eigenschaften auf die Pipeline an. Dies ist nur für Iceberg v3-Leser erforderlich. Wenn Sie nur über Delta-Leser verfügen, können Sie diesen Schritt überspringen.

    • Ausgelöste Pipelines: Die Pipeline einmal ausführen.
    • Kontinuierliche Pipelines: Beenden Sie die Pipeline und starten Sie sie neu.
  3. Setzen Sie in der Pipelinekonfiguration pipelines.externalMetadata.enabled auf true.

    Benutzeroberfläche für Pipelineeinstellungen

    1. Öffnen Sie Ihre Pipeline, und klicken Sie auf "Einstellungen".
    2. Fügen Sie unter "Konfiguration" ein Schlüssel-Wert-Paar hinzu: Schlüsselpipelines.externalMetadata.enabled, Werttrue.
    3. Klicke auf Speichern.

    JSON der Pipelinekonfiguration

    Fügen Sie im configuration Abschnitt Ihrer Pipeline-JSON Folgendes hinzu:

    {
      "configuration": {
        "pipelines.externalMetadata.enabled": "true"
      }
    }
    

    Führen Sie nach dem Speichern der Konfiguration die Pipeline aus, oder starten Sie sie neu, um die Änderungen anzuwenden:

    • Ausgelöste Pipelines: Führen Sie die Pipeline einmal aus.
    • Kontinuierliche Pipelines: Halten Sie die Pipeline an und starten Sie sie neu.

Lesen von Daten aus externen Clients

In den folgenden Abschnitten wird beschrieben, wie Sie Ihr Dataset aus verschiedenen Clients und Umgebungen lesen.

Verwenden der Unity-REST-API mit dem Spark Delta Reader

Verwenden Sie Apache Spark™, Version 4.0 oder höher. Sie können es von https://spark.apache.org/downloads.html herunterladen.

  1. Führen Sie basierend auf Ihrem Cloudanbieter den folgenden Befehl aus, um eine Spark SQL-Shell mit Delta 4.0 und Unity Catalog zu starten.

    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. Über die SQL-Shell können Sie jetzt mit Spark SQL auf Ihr Dataset zugreifen. Beispiel:

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

Verwenden des Snowflake Iceberg Reader

Innerhalb von Snowflake können Sie den Iceberg Reader verwenden. Dies erfordert Iceberg v3-Unterstützung in Snowflake.

  1. Richten Sie den Iceberg REST-Katalog in Apache Spark ein.

    bin/spark-shell \
      --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-aws-bundle:1.8.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>.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>
    
  2. Richten Sie den Iceberg REST-Katalog in Snowflake ein.

    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>';
    
  3. Greifen Sie über Spark SQL auf Ihr Dataset zu.

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

Verwenden des Iceberg REST-Katalogs mit Spark Iceberg Reader

Verwenden Sie Apache Spark™, Version 4.0 oder höher. Sie können es von https://spark.apache.org/downloads.html herunterladen.

  1. Führen Sie in AWS den folgenden Befehl aus, um eine Spark SQL-Shell mit Iceberg v3 zu starten.

    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. Greifen Sie über Spark SQL auf Ihr Dataset zu.

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

Migrieren aus dem Kompatibilitätsmodus

Wenn Sie derzeit einen Datensatz im Kompatibilitätsmodus freigeben, können Sie zur Verwendung von externem Datenzugriff migrieren.

  1. Aktivieren Sie diese Funktion, indem Sie die Schritte unter So aktivieren Sie den Zugriff für ein Dataset befolgen.
  2. Kompatibilitätsmodus deaktivieren. Siehe "Kompatibilitätsmodus deaktivieren"

Einschränkungen

Im Folgenden finden Sie bekannte Einschränkungen beim Zugriff auf externe Daten für Streamingtabellen und materialisierte Ansichten.

  • Externe Schreibvorgänge: Externe Schreibvorgänge in Pipeline-Datasets werden nicht unterstützt.
  • Path-Based Access: Externe Leser, die pfadbasierten Zugriff erfordern (direktes Lesen über einen Speicherort anstelle der UC-API-Schnittstelle) werden nicht unterstützt. Um den pfadbasierten Zugriff zu unterstützen, können Sie den Kompatibilitätsmodus verwenden, der pfadbasierten Zugriff unterstützt, erfordert jedoch eine vollständige Kopie des Datasets.
  • Sicherheitsfunktionen:Sicherheit auf Zeilenebene oder Maskierung auf Spaltenebene werden bei externen Lesevorgängen nicht unterstützt.
  • Zeitreise oder CDF: Die Unterstützung von Zeitreisen oder Ändern von Datenfeeds (CDF) über dieses Feature wird nicht unterstützt. CDF muss deaktiviert werden, wenn UniForm Iceberg aktiviert ist.
  • Katalog-Commits (Beta):Katalog-Commits sind nicht mit externem Datenzugriff kompatibel. Um den externen Datenzugriff in einer Streamingtabelle zu verwenden, müssen Sie zuerst Katalog-Commits deaktivieren. Catalog-Commits werden für materialisierte Ansichten nicht unterstützt.
  • Aufnahmepipelinen: Streamingtabellen, die mit Lakeflow Connect erstellt wurden, unterstützen die Aktivierung von Iceberg-Tabelleneigenschaften nicht und sind nur für Delta-Leser verfügbar.
  • Fabric: Das Lesen von Microsoft Fabric wird nicht unterstützt.
  • Schneeflake Eisbergleser: Sie müssen den Iceberg v3-Reader in Snowflake verwenden, um Pipeline-Datasets zu lesen.
  • Eigenständige MVs und STs: Dieses Feature wird nur für materialisierte Ansichten und Streamingtabellen unterstützt, die von einer Pipeline verwaltet werden. Eigenständige materialisierte Ansichten und Streamingtabellen werden nicht unterstützt. Wenden Sie sich an Ihr Databricks-Kontoteam, wenn Sie externen Zugriff für eigenständige materialisierte Ansichten und Streamingtabellen benötigen.