Registrieren Sie Bucket-Kataloge von S3-Tabellen und fragen Sie Tabellen von Athena ab - Amazon Athena

Registrieren Sie Bucket-Kataloge von S3-Tabellen und fragen Sie Tabellen von Athena ab

Tabellen-Buckets für Amazon S3 sind ein Bucket-Typ in Amazon S3, der speziell zum Speichern von Tabellendaten in Apache-Iceberg-Tabellen entwickelt wurde. Tabellen-Buckets automatisieren Tabellenverwaltungsaufgaben wie Komprimierung, Snapshot-Verwaltung und Garbage Collection, um die Abfrageleistung kontinuierlich zu optimieren und die Kosten zu minimieren. Egal, ob Sie gerade erst anfangen oder Tausende von Tabellen in Ihrer Iceberg-Umgebung haben, Tabellen-Buckets vereinfachen Data Lakes in jeder Größenordnung. Weitere Informationen finden Sie unter Tabellen-Buckets.

Überlegungen und Einschränkungen

  • Alle DDL-Operationen, die für Iceberg-Tabellen unterstützt werden, werden für S3-Tabellen unterstützt, mit den folgenden Ausnahmen:

    • ALTER TABLE RENAME, CREATE VIEW und ALTER DATABASE werden nicht unterstützt.

    • OPTIMIZE und VACUUM – Sie können die Komprimierung und die Snapshot-Verwaltung in S3 verwalten. Weitere Informationen finden Sie unter Wartungsdokumentation für S3-Tabellen.

  • DDL-Abfragen auf S3-Tabellen, die als Athena-Datenquellen registriert sind, werden nicht unterstützt.

  • Die Wiederverwendung von Abfrageergebnissen wird nicht unterstützt.

  • In Arbeitsgruppen mit aktivierter SSE-KMS- und CSE-KMS-Verschlüsselung können Sie keine Schreibvorgänge wie INSERT, UPDATE, DELETE oder MERGE für S3-Tabellen ausführen.

  • In Arbeitsgruppen, in denen die Option „Zahlung durch den S3-Anforderer“ aktiviert ist, können Sie keine DML-Operationen für S3-Tabellen ausführen.

S3-Tabellen von Athena abfragen

Diese erforderlichen Schritte vor der Arbfrage von S3-Tabellen in Athena ausführen
  1. Erstellen eines S3-Tabellen-Buckets. Weitere Informationen erhalten Sie unter Erstellen eines Buckets im Benutzerhandbuch für Amazon Simple Storage Service.

  2. Stellen Sie sicher, dass die Integration Ihrer Tabellen-Buckets mit AWS Glue Data Catalog und AWS Lake Formation erfolgreich ist, indem Sie die Voraussetzungen für die Integration und Integration von Tabellen-Buckets mit AWS-Analytik im Benutzerhandbuch für Amazon Simple Storage Service befolgen.

    Anmerkung

    Wenn Sie die Integration beim Erstellen eines S3-Tabellen-Buckets über die S3-Konsole in Schritt 1 aktiviert haben, können Sie diesen Schritt überspringen.

  3. Für den Prinzipal, den Sie zum Ausführen von Abfragen mit Athena verwenden, gewähren Sie Lake-Formation-Berechtigungen für den S3-Tabellenkatalog, entweder über die Lake-Formation-Konsole oder AWS CLI.

    AWS-Managementkonsole
    1. Öffnen Sie die AWS Lake Formation-Konsole unter https://console.aws.amazon.com/lakeformation/ und melden Sie sich als Data-Lake-Administrator an. Weitere Informationen zum Erstellen eines Data-Lake-Administrators finden Sie unter Create a data lake administrator (Data-Lake-Administrator erstellen).

    2. Wählen Sie im Navigationsbereich Data permissions (Datenberechtigungen) und dann Grant (Erteilen) aus.

    3. Wählen Sie auf der Seite Berechtigungen erteilen unter Princizale den Prinzipal aus, den Sie verwenden möchten, um eine Anfrage von Athena einzureichen.

    4. Wählen Sie unter LF-Tags or catalog resources (LF-Tags oder Katalogressourcen) die Option Named Data Catalog resources (Benannte Datenkatalogressourcen).

    5. Wählen Sie für Catalogs (Kataloge) einen Glue-Datenkatalog, den Sie im Rahmen der Integration Ihres Tabellen-Buckets erstellt haben. Z.B., <accoundID>:s3tablescatalog/amzn-s3-demo-bucket.

    6. Wählen Sie für Katalogberechtigungen die Option Super aus.

    7. Wählen Sie Grant (Erteilen).

    AWS CLI

    Führen Sie den folgenden Befehl mit der Data Lake-Administratorrolle für Lake Formation aus, um Zugriff auf den Prinzipal zu gewähren, den Sie zum Einreichen von Abfragen von Athena verwenden.

    aws lakeformation grant-permissions \ --region <region (Example,us-east-1)> \ --cli-input-json \ '{ "Principal": { "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>" }, "Resource": { "Catalog": { "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket" } }, "Permissions": ["ALL"] }'
Abfragen für S3-Tabellen einreichen
  1. Reichen Sie eine CREATE DATABASE-Anfrage von Athena mit dem oben gewährten Benutzer/der oben gewährten Rolle ein. In diesem Beispiel ist s3tablescatalog der übergeordnete Glue-Datenkatalog erstellt aus der Integration und s3tablescatalog/amzn-s3-demo-bucket ist der untergeordnete Glue-Datenkatalog, der für jeden S3-Tabellen-Bucket erstellt wurde. Es gibt zwei Möglichkeiten, Abfragen durchzuführen.

    Option 1

    Geben Sie den untergeordneten Glue-Datenkatalog (s3tablescatalog/amzn-s3-demo-bucket) direkt von der Konsole an oder AWS CLI.

    Verwenden von AWS-Managementkonsole

    1. Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/.

    2. Wählen Sie in der linken Navigationsleiste für Datenquellenname die Option AWSDataCatalog aus.

    3. Wählen Sie für Katalog s3tablescatalog/amzn-s3-demo-bucket aus.

    4. Geben Sie im Abfrage-Editor eine Abfrage ein wie CREATE DATABASE test_namespace.

    Verwenden von AWS CLI

    Führen Sie den folgenden Befehl aus.

    aws athena start-query-execution \ --query-string 'CREATE DATABASE `test_namespace`' \ --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \ --work-group "primary"
    Option 2

    Erstellen Sie den Athena-Datenkatalog aus dem untergeordneten Glue-Datenkatalog in der Athena-Konsole und geben Sie ihn als Katalog in der Abfrage an. Weitere Informationen finden Sie unter S3-Tabellen-Bucket-Kataloge als Athena-Datenquellen registrieren.

  2. Verwenden Sie die Datenbank, die Sie im vorherigen Schritt erstellt haben, und erstellen Sie mit CREATE TABLE eine Tabelle. Das folgende Beispiel erstellt eine Tabelle in der test_namespace-Datenbank, die Sie zuvor im s3tablescatalog/amzn-s3-demo-bucket-Glue-Katalog erstellt haben.

    AWS-Managementkonsole
    1. Wählen Sie in der linken Navigationsleiste für Datenquellenname die Option AWSDataCatalog aus.

    2. Wählen Sie für Katalog s3tablescatalog/amzn-s3-demo-bucket aus.

    3. Wählen Sie für Datenbank die Option test_namespace aus.

    4. Führen Sie im Abfrage-Editor die folgende Abfrage aus.

      CREATE TABLE daily_sales ( sale_date date, product_category string, sales_amount double) PARTITIONED BY (month(sale_date)) TBLPROPERTIES ('table_type' = 'iceberg')
    AWS CLI

    Führen Sie den folgenden Befehl aus.

    aws athena start-query-execution \ --query-string "CREATE TABLE daily_sales ( sale_date date, product_category string, sales_amount double) PARTITIONED BY (month(sale_date)) TBLPROPERTIES ('table_type' = 'iceberg')" \ --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \ --work-group "primary"
  3. Fügen Sie Daten in die Tabelle ein, die Sie im vorherigen Schritt erstellt haben.

    AWS-Managementkonsole
    1. Wählen Sie in der linken Navigationsleiste für Datenquellenname die Option AWSDataCatalog aus.

    2. Wählen Sie für Katalog s3tablescatalog/amzn-s3-demo-bucket aus.

    3. Wählen Sie für Datenbank die Option test_namespace aus.

    4. Führen Sie im Abfrage-Editor die folgende Abfrage aus.

      INSERT INTO daily_sales VALUES (DATE '2024-01-15', 'Laptop', 900.00), (DATE '2024-01-15', 'Monitor', 250.00), (DATE '2024-01-16', 'Laptop', 1350.00), (DATE '2024-02-01', 'Monitor', 300.00);
    AWS CLI

    Führen Sie den folgenden Befehl aus.

    aws athena start-query-execution \ --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales VALUES (DATE '2024-01-15', 'Laptop', 900.00), (DATE '2024-01-15', 'Monitor', 250.00), (DATE '2024-01-16', 'Laptop', 1350.00), (DATE '2024-02-01', 'Monitor', 300.00)"\ --work-group "primary"
  4. Nachdem Sie Daten in die Tabelle eingefügt haben, können Sie sie abfragen.

    AWS-Managementkonsole
    1. Wählen Sie in der linken Navigationsleiste für Datenquellenname die Option AWSDataCatalog aus.

    2. Wählen Sie für Katalog s3tablescatalog/amzn-s3-demo-bucket aus.

    3. Wählen Sie für Datenbank die Option test_namespace aus.

    4. Führen Sie im Abfrage-Editor die folgende Abfrage aus.

      SELECT product_category, COUNT(*) AS units_sold, SUM(sales_amount) AS total_revenue, AVG(sales_amount) AS average_price FROM daily_sales WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29' GROUP BY product_category ORDER BY total_revenue DESC
    AWS CLI

    Führen Sie den folgenden Befehl aus.

    aws athena start-query-execution \ --query-string "SELECT product_category, COUNT(*) AS units_sold, SUM(sales_amount) AS total_revenue, AVG(sales_amount) AS average_price FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29' GROUP BY product_category ORDER BY total_revenue DESC"\ --work-group "primary"

S3-Tabellen in Athena erstellen

Athena unterstützt das Erstellen von Tabellen in vorhandenen S3-Tabellen-Namespaces oder in Athena erstellten Namespaces mit CREATE DATABASE-Anweisungen. Um eine S3-Tabelle aus Athena zu erstellen, ist die Syntax dieselbe wie beim Erstellen einer regulären Iceberg-Tabelle, außer dass Sie LOCATION nicht angeben, wie im folgenden Beispiel gezeigt.

CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] [TBLPROPERTIES ([, property_name=property_value] )]

Sie können S3-Tabellen auch mit Anweisungen CREATE TABLE AS SELECT (CTAS) erstellen. Weitere Informationen finden Sie unter CTAS für S3-Tabellen.

S3-Tabellen-Bucket-Kataloge als Athena-Datenquellen registrieren

Um S3-Tabellen-Bucket-Kataloge in der Athena-Konsole zu registrieren, führen Sie die folgenden Schritte aus.

  1. Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/.

  2. Wählen Sie im Navigationsbereich Datenquellen und Kataloge aus.

  3. Wählen Sie auf der Seite Datenquellen und Kataloge die Option Datenquellen erstellen aus.

  4. Wählen Sie für Eine Datenquelle auswählen die Option Amazon S3 - AWS Glue Data Catalog.

  5. Wählen Sie im AWS Glue Data Catalog-Abschnitt für Datenquellenkonto die Option AWS Glue Data Catalog in diesem Konto.

  6. Wählen Sie für Tabelle erstellen oder Katalog registrieren die Option Neuen AWS Glue-Katalog registrieren.

  7. Geben Sie im Abschnitt Datenquellendetails für Datenquellenname den Namen ein, den Sie verwenden möchten, um die Datenquelle in Ihren SQL-Abfragen anzugeben, oder verwenden Sie den generierten Standardnamen.

  8. Wählen Sie für Katalog die Option Durchsuchen aus, um nach einer Liste von AWS Glue-Katalogen im selben Konto zu suchen. Wenn Ihnen keine Kataloge angezeigt werden, erstellen Sie einen in der AWS Glue-Konsole.

  9. Wählen Sie im Dialogfeld AWS Glue-Kataloge durchsuchen den gewünschten Katalog aus und klicken Sie dann auf Auswählen.

  10. (Optional) Geben Sie für Tags beliebige Schlüssel-Wert-Paare ein, die Sie mit der Datenquelle verknüpfen möchten.

  11. Wählen Sie Weiter aus.

  12. Überprüfen Sie auf der Seite Überprüfen und erstellen die Richtigkeit der eingegebenen Informationen und wählen Sie dann Datenquelle erstellen.

CTAS für S3-Tabellen

Amazon Athena unterstützt jetzt Operationen CREATE TABLE AS SELECT (CTAS) für S3-Tabellen. Mit dieser Feature können Sie neue S3-Tabellen auf der Grundlage der Ergebnisse einer SELECT-Abfrage erstellen.

Bei der Erstellung einer CTAS-Abfrage für eine S3-Tabelle gibt es einige wichtige Unterschiede zu Standard-Athena-Tabellen:

  • Sie müssen die Speicherort-Eigenschaft weglassen, da S3-Tabellen ihre eigenen Speicherorte automatisch verwalten.

  • Die table_type-Eigenschaft ist standardmäßig auf ICEBERG, sodass Sie sie in Ihrer Abfrage nicht explizit angeben müssen.

  • Wenn Sie kein Format angeben, verwendet das System automatisch PARQUET als Standardformat für Ihre Daten.

  • Alle anderen Eigenschaften folgen derselben Syntax wie normale Iceberg-Tabellen.

Bevor Sie S3-Tabellen mit CTAS erstellen, stellen Sie sicher, dass Sie die erforderlichen Berechtigungen in AWS Lake Formation konfiguriert haben. Insbesondere benötigen Sie Berechtigungen, um Tabellen im S3-Taballen-Katalog zu erstellen. Ohne diese Berechtigungen schlagen Ihre CTAS-Operationen fehl.

Anmerkung

Wenn Ihre CTAS-Abfrage fehlschlägt, müssen Sie möglicherweise Ihre Tabelle mithilfe der S3 Tabellen-API löschen, bevor Sie versuchen, Ihre Abfrage erneut auszuführen. Sie können die DROP TABLE-Athena-Anweisungen nicht verwenden, um die Tabelle zu entfernen, die teilweise durch die Abfrage erstellt wurde.

Beispiel

CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name" WITH ( format = 'PARQUET' ) AS SELECT * FROM source_table;