

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Beispiel für Abfragen von Metadatentabellen
<a name="metadata-tables-example-queries"></a>

Die folgenden Beispiele zeigen, wie Sie mithilfe von Standard-SQL-Abfragen Informationen verschiedener Typen aus Ihren S3-Metadata-Tabellen abrufen können.

Denken Sie an Folgendes, wenn Sie diese Beispiele verwenden:
+ Die Beispiele wurden für die Verwendung mit Amazon Athena geschrieben. Möglicherweise müssen Sie die Beispiele ändern, damit sie mit einer anderen Abfrage-Engine funktionieren.
+ Stellen Sie sicher, dass Sie wissen, wie Sie [Ihre Abfragen optimieren können](metadata-tables-optimizing-query-performance.md).
+ Ersetzen Sie `b_general-purpose-bucket-name` durch den Namen Ihres Namespaces. 
+ Eine vollständige Liste der unterstützten Spalten finden Sie unter [Schema der S3-Metadaten-Journal-Tabellen](metadata-tables-schema.md) und [Schema der S3-Metadaten-Live-Inventartabellen](metadata-tables-inventory-schema.md). 

**Contents**
+ [Beispielabfragen für Journaltabellen](#metadata-tables-example-queries-journal-tables)
  + [Suchen von Objekten anhand der Dateierweiterung](#metadata-tables-example-query-object-pattern)
  + [Auflisten von Objektlöschungen](#metadata-tables-example-query-delete-events)
  + [Listet die von Ihren Objekten verwendeten AWS KMS Verschlüsselungsschlüssel auf](#metadata-tables-example-query-objects-using-kms-key)
  + [Auflisten von Objekten, die keine KMS-Schlüssel verwenden](#metadata-tables-example-query-objects-not-using-kms-key)
  + [Listet die AWS KMS Verschlüsselungsschlüssel auf, die in den letzten 7 Tagen für `PUT` Operationen verwendet wurden](#metadata-tables-example-query-objects-using-kms-key-puts)
  + [Auflistung der in den letzten 24 Stunden durch S3 Lifecycle gelöschten Objekte](#metadata-tables-example-query-objects-deleted-lifecycle)
  + [Anzeigen von Metadaten, die von Amazon Bedrock bereitgestellt wurden](#metadata-tables-example-query-bedrock)
  + [Verstehen des derzeitigen Status Ihrer Objekte](#metadata-tables-example-query-current-state)
+ [Beispielabfragen zur Inventartabelle](#metadata-tables-example-queries-inventory-tables)
  + [Auffinden von Datensätzen, die bestimmte Tags verwenden](#metadata-tables-example-query-datasets-specific-tags)
  + [Auflistung von nicht mit SSE-KMS verschlüsselten Objekten](#metadata-tables-example-query-objects-not-kms-encrypted)
  + [Auflistung unverschlüsselter Objekte](#metadata-tables-example-query-objects-not-encrypted)
  + [Von Amazon Bedrock generierte Listing-Objekte](#metadata-tables-example-query-objects-generated-bedrock)
  + [Abgleich der Bestandstabelle mit der Journaltabelle](#metadata-tables-example-query-generate-latest-inventory)
  + [Erkenntnisse über die aktuellen Versionen Ihrer Objekte](#metadata-tables-example-query-latest-version)
+ [Verknüpfen benutzerdefinierter Metadaten mit S3-Metadatentabellen](metadata-tables-join-custom-metadata.md)
+ [Visualisieren von Metadatentabellendaten mit Amazon Quick](metadata-tables-quicksight-dashboards.md)

## Beispielabfragen für Journaltabellen
<a name="metadata-tables-example-queries-journal-tables"></a>

Sie können die folgenden Beispielabfragen verwenden, um Ihre Journaltabellen abzufragen.

### Suchen von Objekten anhand der Dateierweiterung
<a name="metadata-tables-example-query-object-pattern"></a>

Die folgende Abfrage gibt Objekte mit einer bestimmten Dateierweiterung zurück (in diesem Fall `.jpg`):

```
SELECT key FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
WHERE key LIKE '%.jpg'
AND record_type = 'CREATE'
```

### Auflisten von Objektlöschungen
<a name="metadata-tables-example-query-delete-events"></a>

Die folgende Abfrage gibt Ereignisse zum Löschen von Objekten zurück, einschließlich der AWS-Konto ID oder des AWS Dienstprinzipals, der die Anfrage gestellt hat:

```
SELECT DISTINCT bucket, key, sequence_number, record_type, record_timestamp, requester, source_ip_address, version_id
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
WHERE record_type = 'DELETE';
```

### Listet die von Ihren Objekten verwendeten AWS KMS Verschlüsselungsschlüssel auf
<a name="metadata-tables-example-query-objects-using-kms-key"></a>

Die folgende Abfrage gibt die ARNs AWS Key Management Service (AWS KMS) -Schlüssel zurück, mit denen Ihre Objekte verschlüsselt wurden:

```
SELECT DISTINCT kms_key_arn
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal";
```

### Auflisten von Objekten, die keine KMS-Schlüssel verwenden
<a name="metadata-tables-example-query-objects-not-using-kms-key"></a>

Die folgende Abfrage gibt Objekte zurück, die nicht mit AWS KMS Schlüsseln verschlüsselt sind:

```
SELECT DISTINCT kms_key_arn
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
WHERE encryption_status NOT IN ('SSE-KMS', 'DSSE-KMS')
AND record_type = 'CREATE';
```

### Listet die AWS KMS Verschlüsselungsschlüssel auf, die in den letzten 7 Tagen für `PUT` Operationen verwendet wurden
<a name="metadata-tables-example-query-objects-using-kms-key-puts"></a>

Die folgende Abfrage gibt die ARNs Schlüssel AWS Key Management Service (AWS KMS) zurück, mit denen Ihre Objekte verschlüsselt wurden:

```
SELECT DISTINCT kms_key_arn 
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
WHERE record_timestamp > (current_date - interval '7' day)
AND kms_key_arn is NOT NULL;
```

### Auflistung der in den letzten 24 Stunden durch S3 Lifecycle gelöschten Objekte
<a name="metadata-tables-example-query-objects-deleted-lifecycle"></a>

Die folgende Abfrage gibt eine Liste der Objekte zurück, die am letzten Tag durch S3 Lifecycle abgelaufen sind:

```
SELECT bucket, key, version_id, last_modified_date, record_timestamp, requester
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
WHERE requester = 's3.amazonaws.com'
AND record_type = 'DELETE' 
AND record_timestamp > (current_date - interval '1' day)
```

### Anzeigen von Metadaten, die von Amazon Bedrock bereitgestellt wurden
<a name="metadata-tables-example-query-bedrock"></a>

Einige AWS Dienste (wie [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html)) laden Objekte auf Amazon S3 hoch. Sie können die von diesen Diensten bereitgestellten Objektmetadaten abfragen. Die folgende Abfrage enthält beispielsweise die Spalte `user_metadata`, um festzustellen, ob es Objekte gibt, die von Amazon Bedrock in einen Allzweck-Bucket hochgeladen wurden:

```
SELECT DISTINCT bucket, key, sequence_number, record_type, record_timestamp, user_metadata
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
WHERE record_type = 'CREATE'
AND user_metadata['content-source'] = 'AmazonBedrock';
```

Wenn Amazon Bedrock ein Objekt in Ihren Bucket hochgeladen hat, werden in der `user_metadata`-Spalte die folgenden Metadaten angezeigt, die mit dem Objekt im Abfrageergebnis verknüpft sind:

```
user_metadata
{content-additional-params -> requestid="CVK8FWYRW0M9JW65", signedContentSHA384="38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b", content-model-id -> bedrock-model-arn, content-source -> AmazonBedrock}
```

### Verstehen des derzeitigen Status Ihrer Objekte
<a name="metadata-tables-example-query-current-state"></a>

Die folgende Abfrage kann Ihnen helfen, den aktuellen Status Ihrer Objekte zu bestimmen. Die Abfrage identifiziert die neueste Version jedes Objekts, filtert gelöschte Objekte heraus und markiert die neueste Version jedes Objekts anhand von Sequenznummern. Die Ergebnisse sind nach den Spalten `bucket`, `key` und `sequence_number` sortiert.

```
WITH records_of_interest as (
   -- Start with a query that can narrow down the records of interest.
    SELECT * from "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."journal"
),

version_stacks as (
   SELECT *,
          -- Introduce a column called 'next_sequence_number', which is the next larger
          -- sequence_number for the same key version_id in sorted order.
          LEAD(sequence_number, 1) over (partition by (bucket, key, coalesce(version_id, '')) order by sequence_number ASC) as next_sequence_number
   from records_of_interest
),

-- Pick the 'tip' of each version stack triple: (bucket, key, version_id).
-- The tip of the version stack is the row of that triple with the largest sequencer.
-- Selecting only the tip filters out any row duplicates.
-- This isn't typical, but some events can be delivered more than once to the table
-- and include rows that might no longer exist in the bucket (since the
-- table contains rows for both extant and extinct objects).
-- In the next subquery, eliminate the rows that contain deleted objects.
current_versions as (
    SELECT * from version_stacks where next_sequence_number is NULL
),

-- Eliminate the rows that are extinct from the bucket by filtering with
-- record_type. An object version has been deleted from the bucket if its tip is
-- record_type==DELETE.
existing_current_versions as (
    SELECT * from current_versions where not (record_type = 'DELETE' and is_delete_marker = FALSE)
),

-- Optionally, to determine which of several object versions is the 'latest',
-- you can compare their sequence numbers. A version_id is the latest if its
-- tip's sequencer is the largest among all other tips in the same key.
with_is_latest as (
    SELECT *,
           -- Determine if the sequence_number of this row is the same as the largest sequencer for the key that still exists.
           sequence_number = (MAX(sequence_number) over (partition by (bucket, key))) as is_latest_version
    FROM existing_current_versions
)

SELECT * from with_is_latest
ORDER BY bucket, key, sequence_number;
```

## Beispielabfragen zur Inventartabelle
<a name="metadata-tables-example-queries-inventory-tables"></a>

Sie können die folgenden Beispielabfragen verwenden, um Ihre Bestandstabellen abzufragen.

### Auffinden von Datensätzen, die bestimmte Tags verwenden
<a name="metadata-tables-example-query-datasets-specific-tags"></a>

Die folgende Abfrage gibt den Datensatz zurück, der die angegebenen Tags verwendet:

```
SELECT * 
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."inventory"
WHERE object_tags['key1'] = 'value1'
AND object_tags['key2'] = 'value2';
```

### Auflistung von nicht mit SSE-KMS verschlüsselten Objekten
<a name="metadata-tables-example-query-objects-not-kms-encrypted"></a>

Die folgende Abfrage gibt Objekte zurück, die nicht mit SSE-KMS verschlüsselt sind:

```
SELECT key, encryption_status 
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."inventory"
WHERE encryption_status != 'SSE-KMS';
```

### Auflistung unverschlüsselter Objekte
<a name="metadata-tables-example-query-objects-not-encrypted"></a>

Die folgende Abfrage gibt Objekte zurück, die nicht verschlüsselt sind:

```
SELECT bucket, key, version_id  
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."inventory"
WHERE encryption_status IS NULL;
```

### Von Amazon Bedrock generierte Listing-Objekte
<a name="metadata-tables-example-query-objects-generated-bedrock"></a>

Die folgende Abfrage listet Objekte auf, die von Amazon Bedrock generiert wurden:

```
SELECT DISTINCT bucket, key, sequence_number, user_metadata
FROM "s3tablescatalog/aws-s3"."b_general-purpose-bucket-name"."inventory"
WHERE user_metadata['content-source'] = 'AmazonBedrock';
```

### Abgleich der Bestandstabelle mit der Journaltabelle
<a name="metadata-tables-example-query-generate-latest-inventory"></a>

Die folgende Abfrage generiert eine inventory-table-like Liste, die mit dem aktuellen Inhalt des Buckets auf dem neuesten Stand ist. Genauer gesagt, kombiniert die resultierende Liste den letzten Schnappschuss der Bestandstabelle mit den letzten Ereignissen in der Journaltabelle. 

Damit diese Abfrage möglichst genaue Ergebnisse liefert, müssen sowohl die Journal- als auch die Bestandstabelle den Status Aktiv haben.

Wir empfehlen, diese Abfrage für allgemeine Buckets zu verwenden, die weniger als eine Milliarde (10^9) Objekte enthalten.

Diese Beispielabfrage wendet die folgenden Vereinfachungen auf die Listenergebnisse an (im Vergleich zur Bestandstabelle):
+ **Ausgelassene Spalten** – Die Spalten `bucket`, `is_multipart`, `encryption_status`, `is_bucket_key_enabled`, `kms_key_arn` und `checksum_algorithm` sind nicht Teil der Endergebnisse. Wenn die Anzahl der optionalen Spalten auf ein Minimum beschränkt wird, verbessert sich die Leistung.
+ **Inklusion aller Datensätze** – Die Abfrage gibt alle Objektschlüssel und Versionen zurück, einschließlich der Nullversion (in Buckets ohne Version oder in Buckets, für die Versionsverwaltung gesperrt wurde) und Löschmarkierungen. Beispiele dafür, wie Sie die Ergebnisse filtern können, um nur die Schlüssel anzuzeigen, die Sie interessieren, finden Sie in der Klausel `WHERE` am Ende der Abfrage.
+ **Beschleunigter Abgleich** – In seltenen Fällen könnte die Abfrage vorübergehend Objekte melden, die sich nicht mehr im Bucket befinden. Diese Diskrepanzen werden beseitigt, sobald der nächste Schnappschuss der Bestandstabelle verfügbar ist. Dieses Verhalten ist ein Kompromiss zwischen Leistung und Genauigkeit.

Um diese Abfrage in Amazon Athena auszuführen, stellen Sie sicher, dass Sie den `s3tablescatalog/aws-s3` Katalog und die `b_general-purpose-bucket-name` Datenbank für die allgemeine Bucket-Metadatenkonfiguration auswählen, die Ihre Journal- und Inventartabellen enthält.

```
WITH inventory_time_cte AS (
    SELECT COALESCE(inventory_time_from_property, inventory_time_default) AS inventory_time FROM
    (
      SELECT * FROM
        (VALUES (TIMESTAMP '2024-12-01 00:00')) AS T (inventory_time_default)
      LEFT OUTER JOIN
        (
         SELECT from_unixtime(CAST(value AS BIGINT) / 1000.0) AS inventory_time_from_property FROM "journal$properties"
         WHERE key = 'aws.s3metadata.oldest-uncoalesced-record-timestamp' LIMIT 1
        )
      ON TRUE
    )
),

working_set AS (
    SELECT
        key,
        sequence_number,
        version_id,
        is_delete_marker,
        size,
        COALESCE(last_modified_date, record_timestamp) AS last_modified_date,
        e_tag,
        storage_class,
        object_tags,
        user_metadata,
        (record_type = 'DELETE' AND NOT COALESCE(is_delete_marker, FALSE)) AS _is_perm_delete
    FROM journal j
    CROSS JOIN inventory_time_cte t
    WHERE j.record_timestamp > (t.inventory_time - interval '15' minute)

    UNION ALL

    SELECT
        key,
        sequence_number,
        version_id,
        is_delete_marker,
        size,
        last_modified_date,
        e_tag,
        storage_class,
        object_tags,
        user_metadata,
        FALSE AS _is_perm_delete
    FROM inventory i
),

updated_inventory AS (
    SELECT * FROM (
        SELECT *,
            MAX(sequence_number) OVER (PARTITION BY key, version_id) AS _supremum_sn
        FROM working_set
    )
    WHERE sequence_number = _supremum_sn
)

SELECT
    key,
    sequence_number,
    version_id,
    is_delete_marker,
    size,
    last_modified_date,
    e_tag,
    storage_class,
    object_tags,
    user_metadata
FROM updated_inventory
-- This filter omits only permanent deletes from the results. Delete markers will still be shown.
WHERE NOT _is_perm_delete
-- You can add additional filters here. Examples:
--    AND object_tags['department'] = 'billing'
--    AND starts_with(key, 'reports/')
ORDER BY key ASC, sequence_number DESC;
```

### Erkenntnisse über die aktuellen Versionen Ihrer Objekte
<a name="metadata-tables-example-query-latest-version"></a>

Die folgende Abfrage verwendet die Inventartabelle, um eine neue Ausgabetabelle zu erstellen, die die aktuellen Objektversionen anzeigt. Die Ausgabetabelle ähnelt absichtlich einem S3-Bestandsbericht. Die Ausgabetabelle enthält ein Feld `is_latest`, das angibt, ob ein Objekt die aktuelle Version ist. Das `is_latest` Feld entspricht dem **IsLatest**Feld in einem [S3-Inventarbericht](storage-inventory.md#storage-inventory-contents). 

Diese Abfrage funktioniert für allgemeine Buckets mit [S3 Versioning](Versioning.md) in einem Zustand mit aktivierter oder suspendierter Versionsverwaltung. 

**Voraussetzungen**  
Die Abfrage gibt die Ergebnisse in eine neue S3-Tabelle aus, um weitere Abfragen zu unterstützen und die Leistung gegenüber der Ausgabe von Zeilen auf dem Bildschirm zu erhöhen. Vergewissern Sie sich daher vor der Ausführung dieser Abfrage, dass die folgenden Bedingungen erfüllt sind. Wenn Sie die Ergebnisse nicht in eine neue Tabelle ausgeben möchten, können Sie diese Schritte überspringen. 
+ Sie müssen einen bestehenden kundenverwalteten Tabellen Bucket mit einem bestehenden Namespace haben, um die neue Tabelle auszugeben. Weitere Informationen erhalten Sie unter [Erstellen eines Tabellen-Buckets](s3-tables-buckets-create.md) und [Erstellen eines Namensraums](s3-tables-namespace-create.md). 
+ Um Ihre neue Ausgabetabelle abzufragen, müssen Sie eine Zugriffsmethode für die Abfrage der Tabelle einrichten. Weitere Informationen finden Sie unter [Zugreifen auf Tabellendaten](s3-tables-access.md). Wenn Sie die Ausgabetabelle mit AWS Analysediensten wie Amazon Athena abfragen möchten, muss Ihr vom Kunden verwalteter Tabellen-Bucket in AWS Analysedienste integriert sein. Weitere Informationen finden Sie unter [Überblick über die Integration von Amazon S3 S3-Tabellen mit AWS Analysediensten](s3-tables-integration-overview.md). 

Um diese Abfrage zu verwenden, ersetzen Sie `amzn-s3-demo-table-bucket` durch den Namen des vorhandenen kundenverwalteten Tabellen-Buckets, in dem die neue Ausgabetabelle erstellt werden soll. Ersetzen Sie *`existing_namespace`* durch den Namen des Namespaces, in dem die Ausgabetabelle in Ihrem Tabellen-Bucket erstellt werden soll. Ersetzen Sie *`new_table`* durch den Namen, den Sie für die Ausgabetabelle verwenden wollen. Achten Sie darauf, dass der Name Ihrer Ausgabetabelle den [Tabellennamensregeln](s3-tables-buckets-naming.md#naming-rules-table)entspricht.

Um diese Abfrage in Amazon Athena auszuführen, stellen Sie sicher, dass Sie den `s3tablescatalog/aws-s3`-Katalog und die `b_general-purpose-bucket-name`-Datenbank für die Allzweck-Bucket-Metadatenkonfiguration auswählen, die Ihre Bestandstabelle enthält. 

```
-- If you don't want to output the results to a new table, remove the following two lines 
-- (everything before the WITH clause). 
CREATE TABLE "s3tablescatalog/amzn-s3-demo-table-bucket"."existing_namespace"."new_table" 
as (
WITH 
my_inventory AS (
  SELECT 
        bucket,
        key,
        version_id,
        sequence_number,
        is_delete_marker,
        size,
        last_modified_date,
        storage_class
  FROM inventory
-- For prefix filtering, use a WHERE clause with % at the end.
--     WHERE key LIKE 'prefix%'
  ),
 
inventory_with_is_latest as (
SELECT *,
       ROW_NUMBER() OVER (
         PARTITION BY key 
         ORDER BY sequence_number DESC
       ) = 1 AS is_latest
FROM my_inventory
    )

SELECT
        bucket,
        key,
        version_id,
        sequence_number,
        is_delete_marker,
        size,
        last_modified_date,
        storage_class,
        is_latest

FROM inventory_with_is_latest

-- If you want only the current version of each key, uncomment the following WHERE clause.
-- WHERE is_latest = TRUE
-- If you aren't outputting the results to a new table, remove the next line: 
);
```