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

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-Managementkonsole 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://amzn-s3-demo-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.