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 Inventory-Bericht alle Objektversions-IDs enthält, erkennen Batchvorgänge null-Zeichenfolgen als Versions-IDs, jedoch 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 AWS Management Console an und öffnen Sie die Amazon-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 S3-URI kopieren aus, um den S3-URI für den Ordner zu kopieren.

  3. Öffnen Sie die Amazon-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. Ersetzen Sie table_name durch einen Namen Ihrer Wahl, und fügen Sie in der LOCATION-Klausel den zuvor kopierten S3-URI ein. 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 Inventory-Bericht abzurufen und alle leeren Versions-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-Konsole (https://console.aws.amazon.com/s3/) zurück und navigieren Sie zu dem S3-Bucket, den Sie zuvor für den Standort des Abfrageergebnisses ausgewählt haben. Im Inneren sollte es eine Reihe von Ordnern geben, die mit dem Datum enden.

    Sie sollten beispielsweise etwas wie s3://DOC-EXAMPLE-BUCKET/query-result-location/Unsaved/2021/10/07/ sehen. Sie sollten .csv-Dateien sehen, die die Ergebnisse der ausgeführten SELECT-Abfrage enthalten.

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

  9. Die generierte CSV-Datei enthält eine Headerzeile. Um diese CSV-Datei als Eingabe für einen S3-Batchvorgangsauftrag zu verwenden, müssen Sie den Header entfernen, da der Batchvorgang keine Header auf CSV-Manifesten unterstützt.

    Um den Header zu entfernen, können Sie einen der folgenden Befehle für die Datei ausführen. Ersetzen Sie file.csv durch den Namen von 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 Windows-PowerShell-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 den Header aus der CSV-Datei entfernt haben, können Sie sie als Manifest in einem S3-Batchvorgangsauftrag verwenden. Laden Sie die CSV-Datei in einen S3-Bucket oder einen Speicherort Ihrer Wahl hoch und erstellen Sie dann einen Batchvorgang-Auftrag mit der CSV-Datei als Manifest.

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