Tutorial: Erstellen Sie Ihre erste Apache Iceberg™-Tabelle¶
Einführung¶
In diesem Tutorial erfahren Sie, wie Sie Apache Iceberg™-Tabellen erstellen, die Snowflake als Katalog verwendet und Lese- und Schreiboperationen unterstützen. Iceberg-Tabellen für Snowflake kombinieren die Leistung und Abfragesemantik regulärer Snowflake-Tabellen mit dem von Ihnen verwalteten externen Cloudspeicher.
Führen Sie dieses Tutorial mit einem Arbeitsblatt in Snowsight oder mit einem Snowflake-Client wie SnowSQL durch. Sie können die Codebeispiele kopieren und einfügen und sie dann ausführen.
Lerninhalte¶
In diesem Tutorial lernen Sie Folgendes:
Eine externes Volume für Snowflake-verwaltete Iceberg-Tabellen erstellen und konfigurieren. Zu Demonstrationszwecken erstellt das Tutorial ein externes Volume für Amazon S3.
Erstellen Sie zwei Iceberg-Tabellen, die Snowflake als Iceberg-Katalog verwenden (Snowflake-verwaltete Tabellen).
Daten in die Iceberg-Tabellen einfügen.
Iceberg-Tabellen abfragen.
Löschen Sie Zeilen aus einer Iceberg-Tabelle.
Voraussetzungen¶
Bevor Sie beginnen, sollten Sie mit den folgenden Punkten vertraut sein:
Objektbezeichner in Snowflake und deren Anforderungen.
Apache Iceberg und Iceberg-Tabellen in Snowflake. Weitere Informationen dazu finden Sie unter Apache Iceberg™-Tabellen.
Cloud-Objektspeicher.
Wenn Sie S3 verwenden, sollten Sie mit AWS Identity and Access Management (IAM) und IAM-Richtlinienelemente vertraut sein.
Sie benötigen:
Snowflake-Benutzer mit einer Rolle, die die Berechtigungen hat, die folgenden Aktionen auszuführen:
Bei Verwendung eines 30-Tage-Testkontos können Sie sich als der Benutzer anmelden, der für das Konto erstellt wurde. Dieser Benutzer hat die Rolle mit den Berechtigungen, die zum Erstellen der Objekte erforderlich sind.
Wenn Sie keinen Benutzer mit den erforderlichen Berechtigungen haben, bitten Sie jemanden, der über die erforderlichen Berechtigungen verfügt, einen Benutzer für Sie zu erstellen. Benutzer mit der Rolle ACCOUNTADMIN können neue Benutzer erstellen und ihnen die erforderlichen Berechtigungen erteilen.
Administrator-Zugriff für Ihren Cloudspeicher-Anbieter, um ein externes Volume zu konfigurieren.
Speicher-Bucket (oder Container) bei demselben Cloudanbieter (in derselben Region), der Ihr Snowflake-Konto hostet.
Zugriff auf die Datenbank SNOWFLAKE_SAMPLE_DATA in Ihrem Konto. Snowflake erstellt die Beispieldatenbank standardmäßig in neuen Konten. Wenn die Datenbank nicht in Ihrem Konto erstellt wurde, finden Sie weitere Informationen unter Verwenden der Beispieldatenbank.
Ein Warehouse und eine Datenbank einrichten¶
Richten Sie Ihre Umgebung ein, indem Sie ein Warehouse und eine Datenbank für dieses Tutorial erstellen.
CREATE WAREHOUSE iceberg_tutorial_wh
WAREHOUSE_TYPE = STANDARD
WAREHOUSE_SIZE = XSMALL;
USE WAREHOUSE iceberg_tutorial_wh;
CREATE OR REPLACE DATABASE iceberg_tutorial_db;
USE DATABASE iceberg_tutorial_db;
Externes Volume erstellen¶
Bevor Sie eine Apache Iceberg™-Tabelle für Snowflake erstellen können, müssen Sie über ein externes Volume verfügen. Ein externes Volume ist ein benanntes Snowflake-Objekt auf Kontoebene, das eine Identitäts- und Zugriffsverwaltungsentität (IAM) für Ihren externen Cloudspeicher speichert.
Snowflake verwendet das externe Volume, um eine sichere Verbindung zu Ihrem Cloudspeicher herzustellen und auf Tabellendaten und Metadaten zuzugreifen.
Zu Demonstrationszwecken wird in diesem Schritt beschrieben, wie Sie ein externes Volume für Amazon S3 erstellen. Um ein externes Volume für einen anderen Cloudspeicherdienst zu erstellen, finden Sie weitere Informationen unter:
IAM-Richtlinie erstellen, die Zugriff auf den S3-Speicherort gewährt¶
Um die Zugriffsberechtigungen für Snowflake in der AWS-Managementkonsole zu konfigurieren, gehen Sie wie folgt vor:
Melden Sie sich bei der AWS Management Console an.
Suchen Sie auf dem Home-Dashboard nach IAM, und wählen Sie es aus.
Wählen Sie im linken Navigationsbereich Account settings aus.
Unter Security Token Service (STS) in der Liste Endpoints finden Sie die Snowflake-Region, in der sich Ihr Konto befindet. Wenn STS status inaktiv ist, stellen Sie den Umschalter auf Active.
Wählen Sie im linken Navigationsbereich Policies aus.
Wählen Sie Create Policy aus.
Wählen Sie unter Policy editor die Option JSON aus.
Fügen Sie eine Richtlinie hinzu, um Snowflake mit den erforderlichen Berechtigungen zum Lesen und Schreiben von Daten an Ihrem S3-Speicherort auszustatten.
Die folgende Beispielrichtlinie gewährt Zugriff auf alle Speicherorte im angegebenen Bucket.
Bemerkung
Ersetzen Sie
my_bucket
durch den tatsächlichen Namen Ihres Buckets. Sie können auch einen Pfad im Bucket angeben, zum Beispielmy_bucket/path
.Wenn Sie die Bedingung
"s3:prefix":
auf["*"]
setzen, erhalten Sie Zugriff auf alle Präfixe im angegebenen Bucket, und wenn Sie die Bedingung auf["path/*"]
setzen, erhalten Sie Zugriff auf einen bestimmten Pfad im Bucket.Für Buckets in Regionen für Regierungsbehörden wird für die Bucket-ARNs das Präfix
arn:aws-us-gov:s3:::
verwendet.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::<my_bucket>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<my_bucket>", "Condition": { "StringLike": { "s3:prefix": [ "*" ] } } } ] }
Wählen Sie Next aus.
Geben Sie unter Policy name den Namen der Richtlinie (z. B.
snowflake_access
) und unter Description eine optionale Beschreibung ein.Wählen Sie Create policy aus.
-IAM Rolle erstellen¶
Erstellen Sie eine AWS-IAM-Rolle, um Berechtigungen für den S3-Bucket mit Ihren Datendateien zu vergeben.
Wählen Sie im linken Navigationsbereich des Identity and Access Management (IAM)-Dashboards die Option Roles aus.
Wählen Sie Create role aus.
Wählen Sie für den Typ der vertrauenswürdigen Entität AWS account.
Wählen Sie unter An AWS account die Option This account aus. In einem späteren Schritt ändern Sie die Vertrauensstellung und gewähren Snowflake Zugriff.
Wählen Sie die Option Require external ID aus. Geben Sie eine externe ID Ihrer Wahl ein. Beispiel:
iceberg_table_external_id
.Eine externe ID wird verwendet, um einer dritten Partei wie Snowflake Zugriff auf Ihre AWS-Ressourcen (wie S3-Buckets) zu gewähren.
Wählen Sie Next aus.
Wählen Sie die Richtlinie, die Sie für das externe Volume erstellt haben, und wählen Sie dann Next.
Geben Sie unter Role name einen Namen und eine Beschreibung für die Rolle ein, und wählen Sie zum Erstellen Create role aus.
Sie haben nun eine IAM-Richtlinie für einen S3-Speicherort erstellt, eine IAM-Rolle erstellt und die Richtlinie an die Rolle angehängt.
Wählen Sie View role, um die Rollenübersichtsseite anzuzeigen. Suchen Sie den ARN (Amazon Resource Name) für die Rolle, und notieren Sie sich den Wert.
Externes Volume in Snowflake erstellen¶
Erstellen Sie mit dem Befehl CREATE EXTERNAL VOLUME ein externes Volume. Im folgenden Beispiel wird ein externes Volume namens iceberg_external_volume
erstellt, das einen Amazon S3-Speicherort mit Verschlüsselung definiert:
CREATE OR REPLACE EXTERNAL VOLUME iceberg_external_volume
STORAGE_LOCATIONS =
(
(
NAME = 'my-s3-us-west-2'
STORAGE_PROVIDER = 'S3'
STORAGE_BASE_URL = 's3://<my_bucket>/'
STORAGE_AWS_ROLE_ARN = '<arn:aws:iam::123456789012:role/myrole>'
STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'
)
);
Das Beispiel gibt die externe ID (iceberg_table_external_id
) an, die mit der IAM-Rolle verbunden ist, die Sie für das externe Volume erstellt haben. Durch das Angeben einer externen ID können Sie dieselbe IAM-Rolle (und externe ID) für mehrere externe Volumes verwenden.
Bemerkung
Geben Sie ARNs genau so an, wie von AWS bereitgestellt. Bei ARNs wird die Groß-/Kleinschreibung unterschieden.
AWS-IAM-Benutzer für Ihr Snowflake-Konto abrufen¶
Um den ARN für den AWS-IAM-Benutzer abzurufen, der automatisch für Ihr Snowflake-Konto erstellt wurde, verwenden Sie den Befehl DESCRIBE EXTERNAL VOLUME. Geben Sie den Namen Ihres externen Volumes an.
Im folgenden Beispiel wird ein externes Volume namens
iceberg_external_volume
beschrieben:DESC EXTERNAL VOLUME iceberg_external_volume;
Notieren Sie sich den Wert der Eigenschaft
STORAGE_AWS_IAM_USER_ARN
, der dem für Ihr Snowflake-Konto erstellten AWS-IAM-Benutzer entspricht, z. B.arn:aws:iam::123456789001:user/abc1-b-self1234
.Snowflake stellt genau einen IAM-Benutzer für Ihr gesamtes Snowflake-Konto bereit. Dieser IAM-Benutzer wird von allen externen S3-Volumes in Ihrem Konto verwendet.
Bemerkung
Wenn Sie beim Erstellen eines externen Volumes keine externe ID (
STORAGE_AWS_EXTERNAL_ID
) angegeben haben, generiert Snowflake eine ID, die Sie verwenden können. Notieren Sie sich den Wert, damit Sie Ihre IAM-Rollen-Vertrauensrichtlinie mit der generierten externen ID aktualisieren können.
IAM-Benutzerberechtigungen für den Zugriff auf Bucket-Objekte erteilen¶
In diesem Schritt konfigurieren Sie Berechtigungen, die dem IAM-Benutzer Ihres Snowflake-Kontos den Zugriff auf Objekte in Ihrem S3-Bucket ermöglichen.
Melden Sie sich bei der AWS Management Console an.
Suchen Sie auf dem Home-Dashboard nach IAM, und wählen Sie es aus.
Wählen Sie im linken Navigationsbereich Roles aus.
Wählen Sie die IAM-Rolle aus, die Sie für Ihr externes Volume erstellt haben.
Wählen Sie die Registerkarte Trust relationships aus.
Wählen Sie Edit trust policy aus.
Ändern Sie das Richtliniendokument mit den DESC EXTERNAL VOLUME-Ausgabewerten, die Sie sich notiert haben.
Richtliniendokument für die IAM-Rolle
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<snowflake_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<iceberg_table_external_id>" } } } ] }
Wobei:
snowflake_user_arn
ist der von Ihnen notierte STORAGE_AWS_IAM_USER_ARN-Wert.iceberg_table_external_id
ist Ihre externe ID. Wenn Sie bereits beim Erstellen der Rolle eine externe ID angegeben haben und dieselbe ID zum Erstellen Ihres externen Volumes verwendet haben, lassen Sie den Wert unverändert. Andernfalls aktualisieren Siests:ExternalId
mit dem Wert, den Sie sich notiert haben.
Bemerkung
Sie müssen dieses Richtliniendokument aktualisieren, wenn Sie ein neues externes Volume erstellen (oder ein vorhandenes externes Volume mit der CREATE OR REPLACE EXTERNAL VOLUME-Syntax erneut erstellen) und keine eigene externe ID bereitstellen. Aus Sicherheitsgründen hat ein neues oder neu erstelltes externes Volume eine andere externe ID und kann die Vertrauensstellung nur auflösen, wenn Sie diese Vertrauensrichtlinie aktualisieren.
Wählen Sie Update policy aus, um Ihre Änderungen zu speichern.
Tabelle erstellen¶
In diesem Schritt erstellen Sie zwei Apache Iceberg™-Tabellen: eine mit der Standardsyntax CREATE ICEBERG TABLE und eine mit der Variante CREATE ICEBERG TABLE … AS SELECT. Beide Tabellen verwenden das im vorherigen Schritt konfigurierte externe Volume.
Sie erfahren auch, wie Sie den Iceberg-Katalog und das externe Volume auf Datenbankebene einstellen.
Erstellen Sie eine Tabelle mit der Standardsyntax¶
Erstellen Sie zunächst eine Iceberg-Tabelle mit der Standard-Syntax CREATE ICEBERG TABLE.
Geben Sie CATALOG = 'SNOWFLAKE'
an, damit die Tabelle Snowflake als Iceberg-Katalog verwendet.
Um Snowflake mitzuteilen, wohin Tabellendaten und Metadaten geschrieben werden sollen, geben Sie einen Wert für den Parameter BASE_LOCATION
an. Das Beispiel legt den Tabellennamen (customer_iceberg
) als BASE_LOCATION
fest. Auf diese Weise schreibt Snowflake Daten und Metadaten in ein Verzeichnis, das denselben Namen wie die Tabelle am Speicherort des externen Volumes hat.
CREATE OR REPLACE ICEBERG TABLE customer_iceberg (
c_custkey INTEGER,
c_name STRING,
c_address STRING,
c_nationkey INTEGER,
c_phone STRING,
c_acctbal INTEGER,
c_mktsegment STRING,
c_comment STRING
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'iceberg_external_volume'
BASE_LOCATION = 'customer_iceberg';
Im weiteren Verlauf des Tutorials laden Sie Daten aus der Tabelle snowflake_sample_data.tpch_sf1.customer
der Datenbank SNOWFLAKE_SAMPLE_DATA in diese Tabelle. Die Spaltendefinitionen in der CREATE ICEBERG TABLE-Anweisung stimmen mit der Beispieltabelle überein.
Bemerkung
Wenn Sie Ihren Cloudspeicherort überprüfen, sollten Sie jetzt ein Verzeichnis mit dem Namen metadata/
sehen, das Snowflake während der Tabellenerstellung unter BASE_LOCATION
erstellt hat. In diesem Verzeichnis werden die Metadaten-Dateien für Ihre Tabelle gespeichert.
Legen Sie die Katalogintegration und das externe Volume für die Datenbank fest¶
Legen Sie als Nächstes die Parameter CATALOG
und EXTERNAL_VOLUME
für die Datenbank iceberg_tutorial_db
fest, die Sie in diesem Tutorial erstellt haben. Durch das Einstellen der Parameter wird Snowflake angewiesen, den von Ihnen gewählten Katalog und das externe Volume für alle Iceberg-Tabellen zu verwenden, die nach der Änderung erstellt werden.
ALTER DATABASE iceberg_tutorial_db SET CATALOG = 'SNOWFLAKE';
ALTER DATABASE iceberg_tutorial_db SET EXTERNAL_VOLUME = 'iceberg_external_volume';
Überprüfen Sie dazu die Parameter für die aktuelle Datenbank (iceberg_tutorial_db
):
SHOW PARAMETERS IN DATABASE ;
Erstellen Sie eine Tabelle mit CTAS¶
Erstellen Sie schließlich eine zweite Iceberg-Tabelle namens nation_iceberg
unter Verwendung der CREATE ICEBERG TABLE … AS SELECT-Syntax. Als Grundlage für die neue Tabelle dient die Tabelle snowflake_sample_data.tpch_sf1.nation
der Snowflake-Beispieldatenbank.
Bemerkung
Da Sie gerade die Parameter CATALOG
und EXTERNAL_VOLUME
für die Datenbank iceberg_tutorial_db
festgelegt haben, können Sie beide Parameter in der CREATE ICEBERG TABLE-Anweisung weglassen. Die Tabelle nation_iceberg
erbt die Werte von der Datenbank.
CREATE OR REPLACE ICEBERG TABLE nation_iceberg (
n_nationkey INTEGER,
n_name STRING
)
BASE_LOCATION = 'nation_iceberg'
AS SELECT
N_NATIONKEY,
N_NAME
FROM snowflake_sample_data.tpch_sf1.nation;
Daten laden und Tabellen abfragen¶
In diesem Schritt beginnen Sie mit dem Laden von Daten aus der Snowflake-Beispieldatenbank in die Tabelle customer_iceberg
mittels INSERT INTO <table>
:
INSERT INTO customer_iceberg
SELECT * FROM snowflake_sample_data.tpch_sf1.customer;
Bemerkung
Wenn Sie Ihren Cloudspeicherort überprüfen, sollten Sie nun ein Verzeichnis sehen, das Ihre Tabellendatendateien unter folgendem Pfad enthält: STORAGE_BASE_URL/BASE_LOCATION/customer_iceberg/data/
.
Da nun Daten in der Tabelle vorhanden sind, können Sie die Tabelle abfragen. Die folgende Abfrage verknüpft die Tabelle customer_iceberg
mit der Tabelle nation_iceberg
(die bereits Daten enthält).
SELECT
c.c_name AS customer_name,
c.c_mktsegment AS market_segment,
n.n_name AS nation
FROM customer_iceberg c
INNER JOIN nation_iceberg n
ON c.c_nationkey = n.n_nationkey
LIMIT 15;
Ausgabe:
+--------------------+----------------+----------------+
| CUSTOMER_NAME | MARKET_SEGMENT | NATION |
|--------------------+----------------+----------------|
| Customer#000015001 | HOUSEHOLD | MOROCCO |
| Customer#000015002 | BUILDING | VIETNAM |
| Customer#000015003 | BUILDING | INDONESIA |
| Customer#000015004 | FURNITURE | SAUDI ARABIA |
| Customer#000015005 | HOUSEHOLD | KENYA |
| Customer#000015006 | BUILDING | UNITED KINGDOM |
| Customer#000015007 | MACHINERY | FRANCE |
| Customer#000015008 | HOUSEHOLD | INDIA |
| Customer#000015009 | FURNITURE | EGYPT |
| Customer#000015010 | HOUSEHOLD | ETHIOPIA |
| Customer#000015011 | FURNITURE | UNITED KINGDOM |
| Customer#000015012 | BUILDING | FRANCE |
| Customer#000015013 | FURNITURE | SAUDI ARABIA |
| Customer#000015014 | HOUSEHOLD | KENYA |
| Customer#000015015 | MACHINERY | ROMANIA |
+--------------------+----------------+----------------+
Zeilen löschen¶
In diesem Schritt verwenden Sie eine DELETE-Anweisung, um bestimmte Zeilen aus der Tabelle customer_iceberg
zu entfernen.
Beginnen Sie mit der Abfrage der ersten 10 Zeilen der Tabelle und stellen Sie fest, dass vier Zeilen zum Marktsegment AUTOMOBILE
gehören:
SELECT
c_name AS customer_name,
c_mktsegment AS market_segment
FROM customer_iceberg
LIMIT 10;
Ausgabe:
+--------------------+----------------+
| CUSTOMER_NAME | MARKET_SEGMENT |
|--------------------+----------------|
| Customer#000000001 | BUILDING |
| Customer#000000002 | AUTOMOBILE |
| Customer#000000003 | AUTOMOBILE |
| Customer#000000004 | MACHINERY |
| Customer#000000005 | HOUSEHOLD |
| Customer#000000006 | AUTOMOBILE |
| Customer#000000007 | AUTOMOBILE |
| Customer#000000008 | BUILDING |
| Customer#000000009 | FURNITURE |
| Customer#000000010 | HOUSEHOLD |
+--------------------+----------------+
Als Nächstes verwenden wir eine DELETE-Anweisung, um alle Zeilen aus der Tabelle zu entfernen, in denen das Marktsegment AUTOMOBILE
lautet:
DELETE FROM customer_iceberg WHERE c_mktsegment = 'AUTOMOBILE';
Ausgabe:
+------------------------+
| number of rows deleted |
|------------------------|
| 29752 |
+------------------------+
Schließlich können Sie noch einmal überprüfen, ob die Zeilen entfernt wurden:
SELECT
c_name AS customer_name,
c_mktsegment AS market_segment
FROM customer_iceberg
WHERE c_mktsegment = 'AUTOMOBILE';
Ausgabe:
+---------------+----------------+
| CUSTOMER_NAME | MARKET_SEGMENT |
|---------------+----------------|
+---------------+----------------+
0 Row(s) produced. Time Elapsed: 1.426s
Herzlichen Glückwunsch!
Sie haben gerade in Ihre ersten Snowflake-verwalteten Iceberg-Tabellen geschrieben, daraus gelesen und sie verändert. Sie haben auch gelernt, wie Sie ein externes Volume für die Speicherung von Iceberg-Tabellen konfigurieren und den Iceberg-Katalog und das externe Volume für alle Iceberg-Tabellen in einer Datenbank festlegen.
Bereinigen¶
Um alle für dieses Tutorial erstellten Objekte zu löschen, führen Sie die folgenden DROP-Anweisungen aus.
Ersetzen Sie die folgenden Werte:
my_other_database
mit dem Namen der zu verwendenden Datenbank, sodass Sie die für dieses Tutorial erstellte Datenbank löschen können.my_other_warehouse
mit dem Namen des externen Volumes, das Sie erstellt haben.
DROP ICEBERG TABLE customer_iceberg;
DROP ICEBERG TABLE nation_iceberg;
DROP EXTERNAL VOLUME iceberg_external_volume;
USE DATABASE <my_other_database>;
DROP DATABASE iceberg_tutorial_db;
USE WAREHOUSE <my_other_warehouse>;
DROP WAREHOUSE iceberg_tutorial_wh;
Zusammenfassung und zusätzliche Ressourcen¶
In diesem Tutorial haben Sie einen durchgängigen Workflow zum Erstellen und Verwenden von Snowflake-verwalteten Apache Iceberg™-Tabellen durchlaufen.
Dabei haben Sie die folgenden Aufgaben erledigt:
Ein externes Volume für Iceberg-Tabellen erstellt. Weitere Informationen zu externe Volumes und Iceberg-Tabellenspeichern finden Sie unter Externes Volume konfigurieren.
Von Snowflake verwaltete Iceberg-Tabelle erstellt unter Verwendung von Beispieldaten aus der Snowflake-Beispieldatenbank. Weitere Informationen dazu finden Sie unter den folgenden Themen:
Weitere Informationen zum Laden von Daten in Tabellen finden Sie unter Daten in Snowflake laden.
Iceberg-Katalog und externes Volume für eine Datenbank festgelegt Weitere Informationen zum Einstellen dieser Parameter finden Sie unter den folgenden Themen:
In Iceberg-Tabellen geladene und abgefragte Daten und daraus gelöschte Daten. Weitere Informationen zur Verwaltung einer Iceberg-Tabelle und ihrer Daten finden Sie unter Apache Iceberg™-Tabellen verwalten.
Weitere Informationen zu Iceberg-Tabellen für Snowflake finden Sie in der Dokumentation zu Iceberg-Tabellen. Weitere Iceberg-Tutorials und Quickstarts finden Sie auf der Seite Snowflake-Tutorials.