Informationen zur Azure Storage-Erweiterung

Abgeschlossen

Die Woodgrove Bank hat beschlossen, Azure Blob Storage zu verwenden, um Verlaufsdatendateien sicher in der Cloud zu speichern. Die Bank möchte Verlaufsdaten per Massenladevorgang aus den in einem privaten Container gespeicherten CSV-Dateien in das Speicherkonto laden.

Microsoft hat die pg_azure_storage-Erweiterung entwickelt, um die Arbeit mit Daten zu ermöglichen, die in Dateien gespeichert sind, die wiederum in Azure Blob Storage gehostet werden. Mithilfe der Erweiterung können Sie direkt über eine Azure Cosmos DB for PostgreSQL-Datenbank an Dateien in einem Azure Blob Storage-Konto arbeiten. Die Erweiterung ermöglicht Folgendes:

  • Sicheres Herstellen einer Verbindung mit einem Azure Blob Storage-Konto direkt über Ihre Datenbank
  • Abrufen von Daten aus öffentlich freigegebenen Blob Storage-Ressourcen
  • Auflisten von Dateien im Blob Storage-Container
  • Abrufen von Daten aus Dateien
  • Direktes Importieren von CSV-Dateidaten in eine Tabelle mithilfe des PostgreSQL-Befehls „COPY“

Migrieren von Dateien in ein Speicherkonto

Bevor Sie die Features dieser Erweiterung nutzen können, müssen Dateien hinzugefügt oder zu einem Azure Storage-Konto migriert werden. Durch das Verschieben von Dateien in Azure Blob Storage können Sie einen cloudnativen, sicheren Speicherdienst verwenden.

Laden der Erweiterung „pg_azure_storage“

Zunächst müssen Sie die Erweiterung entweder mithilfe von CREATE EXTENSION oder mit der Funktion create_extension() laden:

-- Install the extension in the database
SELECT create_extension('azure_storage');

Beim Erstellen von und Arbeiten mit der Erweiterung in Ihrer Datenbank wird pg_ aus dem Namen der Erweiterung entfernt, sodass lediglich die Abkürzung azure_storage angezeigt wird.

Gewähren des Zugriffs auf ein Blob Storage-Konto

Ein*e Azure-Cloudengineer*in bei der Woodgrove Bank hat ein Speicherkonto namens stlearnpostgresql für Sie erstellt und in einem privaten Container namens historical-data einige Beispieldateien hinzugefügt. Die pg_azure_storage-Erweiterung umfasst die account_add()-Methode zum Herstellen einer Verbindung zwischen einem Speicherkonto und Ihrer Datenbank. Das Hinzufügen eines Kontos ermöglicht den Zugriff auf die Dateien in sicheren oder privaten Containern. Um eine Verbindung mit einem privaten Container herzustellen, müssen Sie den Namen des Speicherkontos und den Zugriffsschlüssel angeben, dessen Syntax folgt:

SELECT azure_storage.account_add('{STORAGE_ACCOUNT_NAME}', '{STORAGE_ACCOUNT_ACCESS_KEY}');

Um den Zugriff auf das Speicherkonto der Woodgrove Bank über die der Datenbank zu gewähren, müssen Sie den Namen und den Zugriffsschlüssel abrufen. Sie erhalten diese Informationen auf der Seite Zugriffsschlüssel, die mit dem Speicherkonto im Azure-Portal verknüpft ist.

Screenshot of the access keys option highlighted in the left-hand menu of the Storage account page.

Geben Sie beim Ausführen der folgenden Abfrage den Speicherkontonamen an, woraufhin der Zugriffsschlüssel der pg_azure_storage-Erweiterung Zugriff auf das Konto gewährt.

SELECT azure_storage.account_add('stlearnpostgresql', '4zzZGx4sUk8TBVnHnoPYt0G7A3w9/DJJBCfdxeeb+VDrR8P3bSwWA3lYsTvO1HwYzrt4XQ37iIEL+AStWuQ/uA==');

Das Angeben eines Zugriffsschlüssels ist nur bei der Arbeit mit Daten in Containern mit der Zugriffsebene „Privat (kein anonymer Zugriff)“ erforderlich. Angenommen, Sie möchten einen Pull für Daten aus einem Container mit der Zugriffsebene „Container (anonymer Lesezugriff für Container und Blobs)“ ausführen. In diesem Fall können Sie Dateien mithilfe der öffentlichen URLs aus Azure Blob Storage erfassen und Containerinhalte ohne das Konfigurieren des Kontoschlüssels in der pg_azure_storage-Erweiterung enumerieren.

Auflisten von Dateien im Blobspeicher

Nachdem Sie nun mit dem Speicherkonto verbunden sind, können Sie mehrere Aktionen für das Speicherkonto ausführen, einschließlich der Auflistung der Blobs in einem benannten Container. Um eine bessere Vorstellung davon zu erhalten, welche Beispieldateien in den Container historical-data hochgeladen wurden, können Sie die folgende Abfrage ausführen:

SELECT path, content_type, pg_size_pretty(bytes)
FROM azure_storage.blob_list('stlearnpostgresql', 'historical-data');

Die Funktion blob_list() verwendet das Speicherkonto und die Containernamen als Eingabe und gibt eine Liste von Blobs im Container aus:

    path    | content_type | pg_size_pretty 
------------+--------------+----------------
 events.csv | text/csv     | 17 MB
 users.csv  | text/csv     | 29 MB

Neben dem Pfad, dem Inhaltstyp und der Größe (in Bytes) der jeweiligen Datei können Sie mithilfe der Funktion blob_list() auch das Datum der letzten Änderung, die Inhaltscodierung und den Inhaltshash anzeigen.

Massenladen von Daten aus Blobs

Woodgrove hat den Wunsch geäußert, die in CSV-Dateien gespeicherten Verlaufsdaten im Azure Blob Storage-Konto speichern zu können. Die Daten sollten dann direkt in verteilte Tabellen in der Azure Cosmos DB for PostgreSQL-Datenbank geladen werden. Um Daten per Massenladevorgang aus Dateien in Blob Storage zu laden, erweitert pg_azure_storage den nativen PostgreSQL-Befehl COPY, damit Azure Blob Storage-Ressourcen-URLs verarbeitet werden können. Dieses Feature ist standardmäßig aktiviert und kann mithilfe der Einstellung pg_azure_storage.enable_copy_command verwaltet werden.

Mit dem Befehl COPY können Sie Folgendes ausführen, um Benutzerdaten in die Tabelle payment_users einzufügen:

-- Bulk load data from the user.csv file in Blob Storage into the payment_users table
COPY payment_users FROM 'https://stlearnpostgresql.blob.core.windows.net/historical-data/users.csv';

Ein wichtiger Unterschied beim Ausführen des COPY-Befehls mit pg_azure_storage besteht darin, dass Sie vor COPY nicht über \ verfügen können, und Sie müssen die Zeile mit einem Semikolon beenden. Diese Anforderung liegt vor, da der COPY-Befehl bei Verwendung der pg_azure_storage-Erweiterung im Koordinatorknoten ausgeführt wird. Die \COPY-Version wird verwendet, wenn der Befehl im psql-Client ausgeführt wird.

Die Ausgabe des COPY-Befehls gibt die Anzahl der Zeilen an, die in die Tabelle kopiert werden (z. B. COPY 264197).