Abfragen von Apache Iceberg™-Tabellen mit einer externen Engine über Snowflake Horizon Catalog

Diese Vorschau bietet nun Unterstützung für das Abfragen von Snowflake-verwalteten Apache Iceberg™-Tabellen durch Verwendung einer externen Abfrage-Engine über Snowflake Horizon Catalog. Um diese Interoperabilität mit externen Engines sicherzustellen, ist Apache Polaris™ (Incubating) in Horizon Catalog integriert. Darüber hinaus stellt Horizon Catalog Apache Iceberg™ REST APIs zum Lesen von Tabellen mithilfe externer Abfrage-Engines zur Verfügung.

Um von Snowflake verwaltete Iceberg-Tabellen mit einer externen Abfrage-Engine abzufragen, können Sie dieses Feature verwenden, anstatt Snowflake-verwaltete Iceberg-Tabellen mit Snowflake Open Catalog zu synchronisieren. Weitere Informationen zu Open Catalog finden Sie unter Überblick über Snowflake Open Catalog.

Durch die Verbindung einer externen Abfrage-Engine mit Iceberg-Tabellen über Horizon Catalog können Sie die folgenden Aufgaben durchführen:

  • Sie können eine externe Abfrage-Engine verwenden, die das offene Iceberg REST-Protokoll, wie z. B. Apache Spark™, für die Abfrage dieser Tabellen unterstützt.

  • Sie können über einen einzigen Horizon Catalog-Endpunkt alle bestehenden und neuen von Snowflake verwalteten Iceberg-Tabellen in einem neuen oder bestehenden Snowflake-Konto abfragen.

  • Sie können die Tabellen mit Ihren vorhandenen Benutzenden, Rollen, Richtlinien und Authentifizierungsmethoden in Snowflake abfragen.

  • Sie können automatische Anmeldeinformationen verwenden.

Weitere Informationen zum Snowflake Horizon Catalog finden Sie unter Snowflake Horizon Catalog.

Die folgende Abbildung zeigt externe Abfrage-Engines, die von Snowflake verwaltete Iceberg-Tabellen über Horizon Catalog lesen, und Snowflake beim Schreiben und Lesen in diesen Tabellen:

Abbildung mit externen Abfrage-Engines, die von Snowflake verwaltete Iceberg-Tabellen über Horizon Catalog lesen, und mit Snowflake beim Schreiben und  Lesen in diesen Tabellen.

Rechnungsstellung

  • Die Horizon Iceberg REST Catalog-API ist in allen Snowflake-Editionen verfügbar.

  • Die API-Anfragen werden mit 0,5 Credits pro Million Aufrufe abgerechnet und als Cloud-Services berechnet.

  • Für den regionsübergreifenden Datenzugriff gelten regionsübergreifende Standardgebühren für ausgehende Daten, wie in der Snowflake Service Consumption Table angegeben.

Bemerkung

Den Kunden wird das Feature erst in Rechnung gestellt, wenn es allgemein verfügbar ist.

Bevor Sie beginnen

Rufen Sie den Kontobezeichner für Ihr Snowflake-Konto ab, das die abzufragenden Iceberg-Tabellen enthält. Eine Anweisung dazu finden Sie unter Kontobezeichner. Sie geben diesen Bezeichner an, wenn Sie eine externe Abfrage-Engine mit Ihren Iceberg-Tabellen verbinden möchten.

Tipp

Um Ihren Kontobezeichner mit SQL abzurufen, können Sie den folgenden Befehl ausführen:

SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();
Copy

Private Konnektivität (optional)

Für eine sichere Konnektivität sollten Sie die eingehende und ausgehende private Konnektivität für Ihr Snowflake-Konto konfigurieren, während Sie auf den Endpunkt des Horizon Catalog zugreifen.

Bemerkung

Private Konnektivität wird nur für von Snowflake verwaltete Iceberg-Tabellen unterstützt, die auf Amazon S3 oder Azure Storage (ADLS) gespeichert sind.

Workflow für das Abfragen von Iceberg-Tabellen mithilfe einer externen Abfrage-Engine

Um Iceberg-Tabellen mithilfe einer externen Abfrage-Engine abzufragen, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie Iceberg-Tabellen.

  2. Konfigurieren Sie die Zugriffssteuerung.

  3. Besorgen Sie sich ein Zugriffstoken für die Authentifizierung.

  4. Verbinden Sie eine externe Abfrage-Engine mit Iceberg-Tabellen über Horizon Catalog.

  5. Fragen Sie Iceberg-Tabellen ab.

Schritt 1: Iceberg-Tabellen erstellen

Wichtig

Wenn Sie bereits über abzufragende Snowflake-verwaltete Iceberg-Tabellen verfügen, können Sie diesen Schritt überspringen.

In diesem Schritt erstellen Sie von Snowflake verwaltete Iceberg-Tabellen, die Snowflake als Katalog verwenden, sodass Sie sie mit einer externen Abfrage-Engine abfragen können. Anleitungen finden Sie unter den folgenden Themen:

Schritt 2: Zugriffssteuerung konfigurieren

Wichtig

  • Snowflake-Rollen, die einen Bindestrich (-) im Rollennamen enthalten, werden nicht unterstützt, wenn Sie über den Horizon Catalog-Endpunkt auf Iceberg-Tabellen zugreifen.

  • Wenn Sie bereits Rollen haben, die mit Zugriff auf die Iceberg-Tabellen konfiguriert sind, die Sie abfragen möchten, können Sie diesen Schritt überspringen.

In diesem Schritt konfigurieren Sie die Zugriffssteuerung für die von Snowflake verwalteten Iceberg-Tabellen, die Sie mit einer externen Abfrage-Engine abfragen möchten. Sie können zum Beispiel die folgenden Rollen in Snowflake einrichten:

  • Die DATA_ENGINEER-Rolle, die Zugriff auf alle Schemas und alle von Snowflake verwalteten Iceberg-Tabellen in einer Datenbank hat.

  • Die DATA_ANALYST-Rolle, die Zugriff auf ein Schema in der Datenbank und innerhalb dieses Schemas nur Zugriff auf zwei von Snowflake verwaltete Iceberg-Tabellen hat.

Eine Anweisung dazu finden Sie unter Konfigurieren der Zugriffssteuerung. Weitere Informationen zur Zugriffssteuerung in Snowflake finden Sie unter Übersicht zur Zugriffssteuerung.

Schritt 3: Zugriffstoken für die Authentifizierung besorgen

In diesem Schritt erhalten Sie ein Zugriffstoken, das Sie beim Authentifizieren des Horizon Catalog-Endpunkts für Ihr Snowflake-Konto benötigen. Sie benötigen ein Zugriffstoken für jeden Benutzenden –Service oder Mensch – und für jede Rolle, die mit Zugriff auf von Snowflake verwaltete Iceberg-Tabellen konfiguriert ist. Sie benötigen zum Beispiel ein Zugriffstoken für einen Benutzer mit DATA_ENGINEER-Rolle und einen anderen Benutzer mit einer DATA_ANALYST-Rolle.

You specify this access token later when you connect an external query engine to Iceberg tables through Horizon Catalog.

Sie können ein Zugriffstoken erhalten, indem Sie eine der folgenden Authentifizierungsoptionen verwenden:

External OAuth

If you’re using External OAuth, generate an access token for your identity provider. For instructions, see Übersicht zu External OAuth.

Bemerkung

Für External OAuth können Sie auch Ihre Verbindung zur Engine mit automatischer Tokenaktualisierung konfigurieren, anstatt ein Zugriffstoken anzugeben.

Schlüsselpaar-Authentifizierung

If you use key-pair authentication, to obtain an access token, you sign a JSON web token (JWT) with your private key.

The following steps cover how to generate an access token for key-pair authentication:

  1. Configure key-pair authentication

  2. Grant a role to the user

  3. Generate a JSON Web Token (JWT)

  4. Generate an access token

Schritt 1: Schlüsselpaar-Authentifizierung konfigurieren

In diesem Schritt werden Sie die folgenden Aufgaben ausführen:

  • Privaten Schlüssel generieren

  • Öffentlichen Schlüssel generieren

  • Private und öffentliche Schlüssel sicher speichern

  • Erteilen Sie die Berechtigung, einem Snowflake Benutzer einen öffentlichen Schlüssel zuzuweisen.

  • Snowflake-Benutzern einen öffentlichen Schlüssel zuweisen

  • Fingerabdruck des öffentlichen Schlüssels des Benutzers überprüfen

Eine Anweisung dazu finden Sie unter Konfigurieren der Schlüsselpaar-Authentifizierung.

Schritt 2: Den Benutzenden eine Rolle zuweisen

Führen Sie den Befehl GRANT ROLE aus, um den Benutzenden der Schlüsselpaar-Authentifizierung die Snowflake-Rolle zuzuweisen, die über Berechtigungen für die Tabellen verfügt, die Sie abfragen möchten. Um beispielsweise dem Benutzer my_service_user die Rolle ENGINEER zuzuweisen, führen Sie die folgenden Befehle aus:

GRANT ROLE ENGINEER to user my_service_user;
Copy

Schritt 3: Ein JSON-Web-Token (JWT) generieren

In diesem Schritt verwenden Sie SnowSQL, um ein JSON-Web-Token (JWT) für die Schlüsselpaar-Authentifizierung zu generieren.

Bemerkung

Verwenden Sie SnowSQL, um ein JWT zu generieren:

snowsql --private-key-path "<private_key_file>" \
  --generate-jwt \
  -h "<account_identifier>.snowflakecomputing.com" \
  -a "<account_locator>" \
  -u "<user_name>"
Copy

Wobei:

  • <private_key_file> is the path to your private key file that corresponds to the public key assigned to your Snowflake user. For example: /Users/jsmith/.ssh/rsa_key.p8.

  • <account_identifier> is the account identifier for your Snowflake account, in the format <organization_name>-<account_name>. To find the account identifier, see Bevor Sie beginnen. An example of an account identifier is myorg-myaccount.

  • <account_locator> ist der Konto-Locator Ihres Snowflake-Kontos.

    Informationen zum Suchen des Konto-Locators finden Sie unter Snowflake-Kontoinformationen in Snowsight suchen. Sehen Sie sich den Konto-Locator im Dialogfeld Account Details an.

  • <user_name> ist der Benutzername für eine(n) Snowflake-Benutzende(n), wobei dieser/diesem Benutzenden der öffentliche Schlüssel zugewiesen ist.

Step 4: Generate an access token

Wichtig

Um ein Zugriffstoken zu generieren, müssen Sie zuerst ein JWT generieren. Sie müssen zunächst ein JWT generieren, weil Sie das JWT zum Generieren des Zugriffstoken benötigen.

Verwenden Sie einen curl-Befehl zum Generieren eines Zugriffstoken:

curl -i --fail -X POST "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
 --header 'Content-Type: application/x-www-form-urlencoded' \
 --data-urlencode 'grant_type=client_credentials' \
 --data-urlencode 'scope=session:role:<role>' \
 --data-urlencode 'client_secret=<JWT_token>'
Copy

Wobei:

  • <account_identifier> is the account identifier for your Snowflake account, in the format <organization_name>-<account_name>. To find the account identifier, see Bevor Sie beginnen. An example of an account identifier is myorg-myaccount.

  • <role> is the Snowflake role that is granted access to Iceberg tables, such as ENGINEER.

  • <JWT_token> ist das JWT, das Sie im vorherigen Schritt generiert haben.

Programmatic access token (PAT)

If you use PATs, generate a PAT for authentication.

First, you generate a PAT, which you use to connect an external query engine to Iceberg tables. Then, you generate an access token, which you only use to verify the permissions for your PAT.

Schritt 1: PAT generieren

Eine Anleitung zum Konfigurieren und Generieren einer PAT finden Sie unter Verwenden von programmatische Zugriffstoken für die Authentifizierung.

Step 2: Generate an access token for your PAT

In diesem Schritt generieren Sie ein Zugriffstoken für Ihr PAT.

Achtung

Sie geben das Zugriffstoken, das Sie in diesem Schritt generieren, nur an, wenn Sie die Berechtigungen für Ihr PAT überprüfen. Wenn Sie eine externe Abfrage-Engine mit Iceberg-Tabellen verbinden, müssen Sie Ihr PAT angeben, den Sie im vorherigen Schritt generiert haben, nicht das Zugriffstoken, das Sie in diesem Schritt generieren.

Verwenden Sie einen curl-Befehl, um ein Zugriffstoken für Ihr PAT zu generieren:

curl -i --fail -X POST "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
 --header 'Content-Type: application/x-www-form-urlencoded' \
 --data-urlencode 'grant_type=client_credentials' \
 --data-urlencode 'scope=session:role:<role>' \
 --data-urlencode 'client_secret=<PAT_token>'
Copy

Wobei:

  • <account_identifier> is the account identifier for your Snowflake account, in the format <organization_name>-<account_name>. To find the account identifier, see Bevor Sie beginnen. An example of an account identifier is myorg-myaccount.

  • <role> is the Snowflake role that is granted to your PAT and has access to the Iceberg tables you want to query, such as ENGINEER.

  • <PAT_token> ist der Wert für das PAT-Token, das Sie im vorherigen Schritt generiert haben.

Step 4: Verify access token permissions

In diesem Schritt überprüfen Sie die Berechtigungen für das Zugriffstoken, die Sie im vorherigen Schritt erhalten haben.

Überprüfen des Zugriffs auf den Horizon IRC-Endpunkt

Verwenden Sie einen curl-Befehl, um zu überprüfen, ob Sie die Berechtigung haben, auf Ihren Horizon IRC-Endpunkt zuzugreifen:

curl -i --fail -X GET "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/config?warehouse=<database_name>" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json"
Copy

Wobei:

  • <account_identifier> is the account identifier for your Snowflake account, in the format <organization_name>-<account_name>. To find the account identifier, see Bevor Sie beginnen. An example of an account identifier is myorg-myaccount.

  • <access_token> is your access token that you generated. If you’re using a PAT, this value is the access token you generated, not the personal access token (PAT) you generated.

  • <database_name> ist der Name der Datenbank, die Sie abfragen möchten.

    Wichtig

    Sie müssen den Datenbanknamen in Großbuchstaben angeben, auch wenn er mit Kleinbuchstaben erstellt wurde.

Beispiel Rückgabewert:

{
  "defaults": {
    "default-base-location": ""
  },
  "overrides": {
    "prefix": "MY-DATABASE"
  }
}

Abrufen der Metadaten für eine Tabelle

Sie können auch eine GET-Anforderung erstellen, um die Metadaten für eine Tabelle abzurufen. Snowflake verwendet den Vorgang loadTable, um Tabellendaten aus Ihrem REST-Katalog zu laden.

curl -i --fail -X GET "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/<database_name>/namespaces/<namespace_name>/tables/<table_name>" \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json"
Copy

Wobei:

  • <account_identifier> is the account identifier for your Snowflake account, in the format <organization_name>-<account_name>. To find the account identifier, see Bevor Sie beginnen. An example of an account identifier is myorg-myaccount.

  • <database_name> ist die Datenbank der Tabelle, deren Metadaten Sie abrufen möchten.

  • <namespace_name> ist der Namespace der Tabelle, deren Metadaten Sie abrufen möchten.

  • <table_name> ist die Tabelle, deren Metadaten Sie abrufen möchten.

  • <access_token> is your access token that you generated. If you’re using a PAT, this value is the access token you generated, not the personal access token (PAT) you generated.

Wichtig

Sie müssen die Namen von Datenbank, Namespaces und Tabellen in Großbuchstaben angeben, auch wenn das Objekt mit Kleinbuchstaben erstellt wurde.

Step 5: Connect an external query engine to Iceberg tables through Horizon Catalog

In diesem Schritt verbinden Sie eine externe Abfrage-Engine mit Iceberg-Tabellen über Horizon Catalog. Diese Verbindung ermöglicht es Ihnen, die Tabellen mithilfe der externen Abfrage-Engine abzufragen.

Die externen Engines verwenden den Apache Iceberg™ REST-Endpunkt, der von Snowflake bereitgestellt wird. Für Ihr Snowflake-Konto hat dieser Endpunkt das folgende Format:

https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog
Copy

Der Beispielcode in diesem Schritt zeigt, wie eine Verbindung in Spark eingerichtet wird, und der Beispielcode ist in PySpark. Weitere Informationen dazu finden Sie unter folgenden Themen:

Verbindung mit External OAuth oder Schlüsselpaar-Authentifizierung herstellen

Verwenden Sie den folgenden Beispielcode, um die externe Abfrage-Engine mit Iceberg-Tabellen zu verbinden, indem Sie External OAuth oder die Schlüsselpaar-Authentifizierung verwenden:

# Snowflake Horizon Catalog Configuration, change as per your environment

CATALOG_URI = "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog"
HORIZON_SESSION_ROLE = f"session:role:<role>"
CATALOG_NAME = "<database_name>" #provide in UPPER CASE

# Cloud Service Provider Region Configuration (where the Iceberg data is stored)
REGION = "eastus2"

# Paste the External Oauth Access token that you generated in Snowflake here
ACCESS_TOKEN = "<your_access_token>"

# Iceberg Version
ICEBERG_VERSION = "1.9.1"

def create_spark_session():
  """Create and configure Spark session for Snowflake Iceberg access."""
  spark = (
      SparkSession.builder
      .appName("SnowflakeIcebergReader")
      .master("local[*]")

# JAR Dependencies for Iceberg and Azure
      .config(
          "spark.jars.packages",
          f"org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{ICEBERG_VERSION},"
          f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"
          # for Azure storage, use the below package and comment above azure bundle
          # f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
      )

      # Iceberg SQL Extensions
      .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
      .config("spark.sql.defaultCatalog", CATALOG_NAME)

      # Horizon REST Catalog Configuration
      .config(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
      .config(f"spark.sql.catalog.{CATALOG_NAME}.type", "rest")
      .config(f"spark.sql.catalog.{CATALOG_NAME}.uri", CATALOG_URI)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", CATALOG_NAME)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.token", ACCESS_TOKEN)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.scope", HORIZON_SESSION_ROLE)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.client.region", REGION)

      # Required for vended credentials
      .config(f"spark.sql.catalog.{CATALOG_NAME}.header.X-Iceberg-Access-Delegation", "vended-credentials")
      .config("spark.sql.iceberg.vectorization.enabled", "false")
      .getOrCreate()
  )
  spark.sparkContext.setLogLevel("ERROR")
  return spark
Copy

Wobei:

  • <account_identifier> is your Snowflake account identifier for the Snowflake account that contains the Iceberg tables that you want to query. To find this identifier, see Bevor Sie beginnen.

  • <your_access_token> ist Ihr -Zugriffstoken, das Sie erhalten haben. Wie Sie es erhalten, erfahren Sie unter Schritt 3: Zugriffstoken für die Authentifizierung besorgen.

    Bemerkung

    Für External OAuth können Sie auch Ihre Verbindung zur Engine mit automatischer Tokenaktualisierung konfigurieren, anstatt ein Zugriffstoken anzugeben.

  • <database_name> ist der Name der Datenbank in Ihrem Snowflake-Konto, die von Snowflake verwaltete Iceberg-Tabellen enthält, die Sie abfragen möchten.

    Bemerkung

    Die Eigenschaft .warehouse in Spark erwartet Ihren Snowflake-*Datenbank*namen, nicht den Namen Ihres Snowflake-Warehouses.

  • <role> ist die Rolle in Snowflake, die mit Zugriff auf die Iceberg-Tabellen konfiguriert ist, die Sie abfragen möchten. Beispiel: DATA_ENGINEER.

Wichtig

Standardmäßig ist das Codebeispiel für Apache Iceberg™-Tabellen eingerichtet, die auf Amazon S3 gespeichert sind. Wenn Ihre Iceberg-Tabellen auf Azure Storage (ADLS) gespeichert sind, führen Sie die folgenden Schritte aus:

  1. Versehen Sie die folgende Zeile mit Kommentarmarkierungen: f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"

  2. Entfernen Sie die Kommentarmarkierungen in der folgenden Zeile: # f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"

Verbinden über ein programmgesteuertes Zugriffstoken (PAT)

Verwenden Sie den folgenden Beispielcode, um die externe Abfrage-Engine mit Iceberg-Tabellen zu verbinden, indem Sie ein programmgesteuertes Zugriffstoken (PAT) verwenden:

# Snowflake Horizon Catalog Configuration, change as per your environment

CATALOG_URI = "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog"
HORIZON_SESSION_ROLE = f"session:role:<role>"
CATALOG_NAME = "<database_name>" #provide in UPPER CASE

# Cloud Service Provider Region Configuration (where the Iceberg data is stored)
REGION = "eastus2"

# Paste the PAT you generated in Snowflake here
PAT_TOKEN = "<your_PAT_token>"

# Iceberg Version
ICEBERG_VERSION = "1.9.1"

def create_spark_session():
  """Create and configure Spark session for Snowflake Iceberg access."""
  spark = (
      SparkSession.builder
      .appName("SnowflakeIcebergReader")
      .master("local[*]")

# JAR Dependencies for Iceberg and Azure
      .config(
          "spark.jars.packages",
          f"org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{ICEBERG_VERSION},"
          f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"
          # for Azure storage, use the below package and comment above azure bundle
          # f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
      )

      # Iceberg SQL Extensions
      .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
      .config("spark.sql.defaultCatalog", CATALOG_NAME)

      # Horizon REST Catalog Configuration
      .config(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
      .config(f"spark.sql.catalog.{CATALOG_NAME}.type", "rest")
      .config(f"spark.sql.catalog.{CATALOG_NAME}.uri", CATALOG_URI)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", CATALOG_NAME)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.credential", PAT_TOKEN)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.scope", HORIZON_SESSION_ROLE)
      .config(f"spark.sql.catalog.{CATALOG_NAME}.client.region", REGION)

      # Required for vended credentials
      .config(f"spark.sql.catalog.{CATALOG_NAME}.header.X-Iceberg-Access-Delegation", "vended-credentials")
      .config("spark.sql.iceberg.vectorization.enabled", "false")
      .getOrCreate()
  )
  spark.sparkContext.setLogLevel("ERROR")
  return spark
Copy

Wobei:

  • <account_identifier> is your Snowflake account identifier for the Snowflake account that contains the Iceberg tables that you want to query. To find this identifier, see Bevor Sie beginnen.

  • <your_PAT_token> ist das PAT, das Sie erhalten haben. Wie Sie es erhalten, erfahren Sie unter Schritt 3: Zugriffstoken für die Authentifizierung besorgen.

  • <role> ist die Rolle in Snowflake, die mit Zugriff auf die Iceberg-Tabellen konfiguriert ist, die Sie abfragen möchten. Beispiel: DATA_ENGINEER.

  • <database_name> ist der Name der Datenbank in Ihrem Snowflake-Konto, die von Snowflake verwaltete Iceberg-Tabellen enthält, die Sie abfragen möchten.

    Bemerkung

    Die Eigenschaft .warehouse in Spark erwartet Ihren Snowflake-*Datenbank*namen, nicht den Namen Ihres Snowflake-Warehouses.

Wichtig

Standardmäßig ist das Codebeispiel für Apache Iceberg™-Tabellen eingerichtet, die auf Amazon S3 gespeichert sind. Wenn Ihre Iceberg-Tabellen auf Azure Storage (ADLS) gespeichert sind, führen Sie die folgenden Schritte aus:

  1. Versehen Sie die folgende Zeile mit Kommentarmarkierungen: f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"

  2. Entfernen Sie die Kommentarmarkierungen in der folgenden Zeile: # f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"

Step 6: Query Iceberg tables

Dieser Schritt enthält die folgenden Code-Beispiele für die Verwendung von Apache Spark™ zur Abfrage von Iceberg-Tabellen:

  • Namespaces anzeigen

  • Namespaces verwenden

  • Tabellen anzeigen

  • Eine Tabelle abfragen

Namespaces anzeigen

spark.sql("show namespaces").show()
Copy

Namespace verwenden

spark.sql("use namespace <your_schema_name_in_snowflake>")
Copy

Tabellen anzeigen

spark.sql("show tables").show()
Copy

Eine Tabelle abfragen

spark.sql("use namespace spark_demo")
spark.sql("select * from <your_table_name_in_snowflake>").show()
Copy

Überlegungen zum Abfragen von Iceberg-Tabellen mit einer externen Abfrage-Engine

Beachten Sie die folgenden Punkte, wenn Sie Iceberg-Tabellen mit einer externen Abfrage-Engine abfragen:

  • Für Tabellen in Snowflake:

    • Es werden nur von Snowflake verwaltete Iceberg-Tabellen unterstützt.

    • Abfragen von entfernten oder extern verwalteten Iceberg-Tabellen, einschließlich Delta Direct- und Parquet Direct-Tabellen sowie nativer Snowflake-Tabellen, werden nicht unterstützt.

  • Sie können Iceberg-Tabellen abfragen, aber nicht darin schreiben.

  • Die externen Lesevorgänge werden nur auf Iceberg Version 2 oder früher unterstützt.

  • Diese Funktion wird nur für von Snowflake verwaltete Iceberg-Tabellen unterstützt, die auf Amazon S3, Google Cloud oder Azure für alle öffentlichen Cloudregionen gespeichert sind. S3-kompatibler Speicher, der kein AWS-Speicher ist, wird noch nicht unterstützt.

  • Sie können eine Iceberg-Tabelle nicht über die REST API von Horizon Iceberg abfragen, wenn die folgenden Richtlinien für fein abgestufte Zugriffssteuerung (FGAC) für die Tabelle definiert sind:

    • Zeilenzugriffsrichtlinien

    • Sicherheit auf Spaltenebene

  • Snowflake-Rollen, die einen Bindestrich (-) im Rollennamen enthalten, werden nicht unterstützt, wenn Sie über den Horizon Catalog-Endpunkt auf Iceberg-Tabellen zugreifen.

  • Das explizite Gewähren von Zugriff auf Ihre Speicherkonten für den Horizon Catalog-Endpunkt wird nicht unterstützt. Wir empfehlen die Verwendung von privater Konnektivität für eine sichere Konnektivität von externen Engines zum Horizon Catalog und von Horizon Catalog zum Speicherkonto.