Konvertieren leerer Versions-ID-Strings in Amazon-S3-Inventory-Berichten in Null-Zeichenfolgen - Amazon Simple Storage Service

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.

Konvertieren leerer Versions-ID-Strings in Amazon-S3-Inventory-Berichten in Null-Zeichenfolgen

Anmerkung

Das folgende Verfahren gilt nur für Amazon S3-Lagerbestandsberichte, die alle Versionen enthalten, und nur, wenn die Berichte „Alle Versionen“ als Manifeste für S3-Batch-Operationen bei Buckets verwendet werden, bei denen S3-Versionierung aktiviert ist. Sie müssen keine Zeichenfolgen für S3-Inventory-Berichte konvertieren, die nur die aktuelle Version angeben.

Sie können S3-Inventory-Berichte als Manifeste für S3-Batchvorgänge verwenden. Wenn jedoch die S3-Versionsverwaltung für einen Bucket aktiviert ist, markieren S3-Inventory-Berichte, die alle Versionen enthalten, alle nullversionierten Objekte mit leeren Zeichenfolgen im Versions-ID-Feld. Wenn ein Inventarbericht alle Objektversionen enthältIDs, erkennt Batch Operations null Zeichenfolgen als VersionIDs, aber keine leeren Zeichenfolgen.

Wenn ein S3-Batchvorgangauftrag einen S3-Inventory-Bericht „alle Versionen“ als Manifest verwendet, schlägt er alle Aufgaben für Objekte fehl, die eine leere Zeichenfolge im Feld Versions-ID haben. Gehen Sie wie folgt vor, um leere Zeichenfolgen im Versions-ID-Feld des S3-Inventory-Berichts in null-Zeichenfolgen für Batchvorgänge zu konvertieren.

Aktualisieren eines Amazon-S3-Inventory-Berichts zur Verwendung mit Batchvorgängen
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Navigieren Sie zu Ihrem S3-Inventory-Bericht. Der Inventory-Bericht befindet sich im Ziel-Bucket, den Sie beim Konfigurieren Ihres Inventory-Berichts angegeben haben. Weitere Informationen zum Auffinden von Inventory-Berichten finden Sie unter Lokalisieren Ihrer Bestandsliste.

    1. Wählen Sie den Ziel-Bucket aus.

    2. Wählen Sie den Ordner aus. Der Ordner ist nach dem ursprünglichen Quell-Bucket benannt.

    3. Wählen Sie den nach der Inventory-Konfiguration benannten Ordner aus.

    4. Aktivieren Sie das Kontrollkästchen neben dem Ordner namens Hive aus. Wählen Sie oben auf der Seite Copy S3 aus, URI um das S3 URI für den Ordner zu kopieren.

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

  4. Wählen Sie im Abfrage-Editor Einstellungen und anschließend Verwalten aus. Wählen Sie auf der Seite Einstellungen verwalten für Standort des Abfrageergebnisses einen S3-Bucket aus, um Ihre Abfrageergebnisse zu speichern.

  5. Erstellen Sie im Abfrage-Editor eine Athena-Tabelle, um die Daten mit dem folgenden Befehl im Inventory-Bericht zu speichern. table_nameErsetzen Sie es durch einen Namen Ihrer Wahl und fügen Sie in die LOCATION Klausel das S3 ein, URI das Sie zuvor kopiert haben. Wählen Sie dann Ausführen aus, um die Abfrage auszuführen.

    CREATE EXTERNAL TABLE table_name(bucket string, key string, version_id string) PARTITIONED BY (dt string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 'Copied S3 URI';
  6. Um den Abfrage-Editor zu löschen, wählen Sie Löschen. Laden Sie den Inventory-Bericht mit dem folgenden Befehl in die Tabelle. Ersetzen Sie table_name durch denjenigen, den Sie im vorherigen Schritt ausgewählt haben. Wählen Sie dann Ausführen aus, um die Abfrage auszuführen.

    MSCK REPAIR TABLE table_name;
  7. Um den Abfrage-Editor zu löschen, wählen Sie Löschen. Führen Sie die folgende SELECT Abfrage aus, um alle Einträge im ursprünglichen Inventarbericht abzurufen und alle leeren Versionen IDs durch null Zeichenfolgen zu ersetzen. Ersetzen Sie table_name durch das zuvor gewählte, und ersetzen Sie YYYY-MM-DD-HH-MM in der WHERE-Klausel durch das Datum des Inventory-Berichts, auf dem dieses Tool ausgeführt werden soll. Wählen Sie dann Ausführen aus, um die Abfrage auszuführen.

    SELECT bucket as Bucket, key as Key, CASE WHEN version_id = '' THEN 'null' ELSE version_id END as VersionId FROM table_name WHERE dt = 'YYYY-MM-DD-HH-MM';
  8. Kehren Sie zur Amazon S3 S3-Konsole (https://console.aws.amazon.com/s3/) zurück und navigieren Sie zu dem S3-Bucket, den Sie zuvor für Speicherort des Abfrageergebnisses ausgewählt haben. Im Inneren sollte es eine Reihe von Ordnern geben, die mit dem Datum enden.

    Sie sollten beispielsweise so etwas wie s3://sehenamzn-s3-demo-bucket/query-result-location/Nicht gespeichert/2021/10/07/. Sie sollten .csv-Dateien sehen, die die Ergebnisse der ausgeführten SELECT-Abfrage enthalten.

    Wählen Sie die Datei mit dem letzten Änderungsdatum aus. CSV Laden Sie diese Datei für den nächsten Schritt auf Ihren lokalen Computer herunter.

  9. Die generierte CSV Datei enthält eine Kopfzeile. Um diese CSV Datei als Eingabe für einen S3 Batch Operations-Job zu verwenden, müssen Sie die Kopfzeile entfernen, da Batch Operations keine Kopfzeilen in CSV Manifesten unterstützt.

    Um den Header zu entfernen, können Sie einen der folgenden Befehle für die Datei ausführen. Ersetzen file.csv mit dem Namen Ihrer CSV Datei.

    Führen Sie auf macOS- und Linux-Computern den tail-Befehl in einem Terminalfenster aus.

    tail -n +2 file.csv > tmp.csv && mv tmp.csv file.csv

    Führen Sie für Windows-Computer das folgende Skript in einem PowerShell Windows-Fenster aus. Ersetzen Sie File-location durch den Dateipfad und file.csv durch den Namen Ihrer Datei.

    $ins = New-Object System.IO.StreamReader File-location\file.csv $outs = New-Object System.IO.StreamWriter File-location\temp.csv try { $skip = 0 while ( !$ins.EndOfStream ) { $line = $ins.ReadLine(); if ( $skip -ne 0 ) { $outs.WriteLine($line); } else { $skip = 1 } } } finally { $outs.Close(); $ins.Close(); } Move-Item File-location\temp.csv File-location\file.csv -Force
  10. Nachdem Sie die Kopfzeile aus der CSV Datei entfernt haben, können Sie sie als Manifest in einem S3-Batch Operations-Job verwenden. Laden Sie die CSV Datei in einen S3-Bucket oder an einen Speicherort Ihrer Wahl hoch und erstellen Sie dann einen Batch Operations-Job, der die CSV Datei als Manifest verwendet.

    Weitere Informationen zum Erstellen eines S3-Batchvorgang-Auftrags finden Sie unter Erstellen eines S3-Batch-Vorgangsauftrags.