Azure Storage-Erweiterung in Azure Database for PostgreSQL – Flexibler Server

GILT FÜR: Azure Database for PostgreSQL – Flexible Server

Ein häufiger Anwendungsfall von Microsoft-Kunden ist die Möglichkeit, Daten zwischen Azure Blob Storage und einer Instanz von Azure Database for PostgreSQL – Flexibler Server zu importieren und zu exportieren. Die Azure Storage-Erweiterung (azure_storage) in Azure Database for PostgreSQL – Flexibler Server vereinfacht diesen Anwendungsfall.

Azure Blob Storage

Azure Blob Storage ist eine Objektspeicherlösung für die Cloud. Blob Storage ist für die Speicherung großer Mengen unstrukturierter Daten optimiert. Unstrukturierte Daten sind Daten, die keinem bestimmten Datenmodell und keiner bestimmten Definition entsprechen (also beispielsweise Text- oder Binärdaten).

Blob Storage bietet eine Hierarchie von drei Ressourcentypen:

  • Das Speicherkonto ist eine administrative Entität, die Dienste für Elemente wie Blobs, Dateien, Warteschlangen, Tabellen oder Datenträger enthält.

    Wenn Sie ein Speicherkonto in Azure erstellen, erhalten Sie den eindeutigen Namespace für Ihre Speicherressourcen. Dieser eindeutige Namespace bildet einen Teil der URL. Der Name des Speicherkontos sollte für alle vorhandenen Speicherkontonamen in Azure eindeutig sein.

  • Ein Container befindet sich in einem Speicherkonto. Ein Container ähnelt einem Ordner, in dem Blobs gespeichert werden.

    Sie können Sicherheitsrichtlinien definieren und dem Container Richtlinien zuweisen. Diese Richtlinien werden an alle Blobs im Container weitergegeben.

    Ein Speicherkonto kann eine unbegrenzte Anzahl von Containern enthalten. Jeder Container kann eine unbegrenzte Anzahl von Blobs (bis zur maximalen Speicherkontogröße von 500 TB) enthalten.

    Nachdem Sie ein Blob in einem Container platziert haben, der sich in einem Speicherkonto befindet, können Sie mithilfe einer URL in diesem Format auf das Blob verweisen: protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>.

  • Ein Blob ist ein Teil der Daten, die sich im Container befinden.

Im folgenden Diagramm ist die Beziehung zwischen diesen Ressourcen dargestellt.

Diagramm: Beispiel für Speicherressourcen

Wichtige Vorteile des Speicherns von Daten als Blobs in Azure Blob Storage

Azure Blob Storage kann folgende Vorteile bieten:

  • Es handelt sich um eine skalierbare und kostengünstige Cloudspeicherlösung. Sie können sie verwenden, um Daten beliebiger Größe zu speichern und basierend auf Ihren Anforderungen hoch- oder herunterskalieren.
  • Sie bietet verschiedene Sicherheitsebenen zum Schutz Ihrer Daten, z. B. Verschlüsselung im Ruhezustand und während der Übertragung.
  • Sie kommuniziert mit anderen Azure-Diensten und Partneranwendungen. Es handelt sich um eine vielseitige Lösung für eine breite Palette von Anwendungsfällen, z. B. Sicherung und Notfallwiederherstellung, Archivierung und Datenanalyse.
  • Es handelt sich um eine kostengünstige Lösung zum Verwalten und Speichern riesiger Datenmengen in der Cloud, unabhängig davon, ob es sich bei der Organisation um ein kleines oder ein großes Unternehmen handelt. Sie bezahlen nur für den benötigten Speicher.

Importieren von Daten aus Azure Blob Storage aus Azure Database for PostgreSQL – Flexibler Server

Um Daten aus Azure Blob Storage zu laden, müssen Sie die PostgreSQL-Erweiterung azure_storageauf die Positivliste setzen. Anschließend installieren Sie die Erweiterung mithilfe des Befehls CREATE EXTENSION in der Datenbank:

 CREATE EXTENSION azure_storage;

Wenn Sie ein Speicherkonto erstellen, generiert Azure zwei 512-Bit-Speicherkonto-Zugriffsschlüssel für dieses Konto. Mit diesen Schlüsseln können Sie den Zugriff auf Daten in Ihrem Speicherkonto per gemeinsam verwendetem Schlüssel autorisieren.

Bevor Sie die Daten importieren können, müssen Sie das Speicherkonto mithilfe der account_add-Methode zuordnen. Geben Sie den Kontozugriffsschlüssel an, der beim Erstellen des Kontos definiert wurde. Das folgende Codebeispiel ordnet das Speicherkonto mystorageaccount zu und verwendet die Zeichenfolge SECRET_ACCESS_KEY als Parameter für den Zugriffsschlüssel:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Nach dem Zuordnen des Speichers können Sie Speicherkontoinhalte auflisten und Daten für den Import auswählen. Im folgenden Beispiel wird davon ausgegangen, dass Sie ein Speicherkonto mit dem Namen mystorageaccount und einen Blobcontainer mit dem Namen mytestblob erstellt haben:

SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('mystorageaccount','mytestblob'); 

Sie können die Ausgabe dieser Anweisung mithilfe einer regulären SQL WHERE-Klausel oder des prefix-Parameters der blob_list-Methode filtern. Für das Auflisten von Containerinhalten sind ein Konto und ein Zugriffsschlüssel oder Container mit aktiviertem anonymem Zugriff erforderlich.

Schließlich können Sie entweder die COPY-Anweisung oder die Funktion blob_get verwenden, um Daten aus Azure Blob Storage in eine vorhandene Tabelle in Azure Database for PostgreSQL – Flexibler Server zu importieren.

Importieren von Daten mithilfe einer COPY-Anweisung

Das folgende Beispiel zeigt den Import von Daten aus einer Datei vom Typ employee.csv, die sich im Blobcontainer mytestblob im selben Azure-Speicherkonto (mystorageaccount) befindet, über den Befehl COPY:

  1. Erstellen Sie eine Zieltabelle, die dem Quelldateischema entspricht:

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. Verwenden Sie eine COPY-Anweisung, um Daten in die Zieltabelle zu kopieren. Geben Sie an, dass die erste Zeile Kopfzeilen enthält.

    COPY employees
    FROM 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee.csv'
    WITH (FORMAT 'csv', header);
    

Importieren von Daten mithilfe der Funktion „blob_get“

Die Funktion blob_get ruft eine Datei aus Blob Storage ab. Damit blob_get die Daten parsen kann, können Sie entweder einen Wert mit einem Typ übergeben, der den Spalten in der Datei entspricht, oder die Spalten in der FROM-Klausel explizit definieren.

Sie können die Funktion blob_get im folgenden Format verwenden:

azure_storage.blob_get(account_name, container_name, path)

Das nächste Beispiel zeigt die gleiche Aktion von der gleichen Quelle zum gleichen Ziel mithilfe der blob_get-Funktion:

INSERT INTO employees 
SELECT * FROM azure_storage.blob_get('mystorageaccount','mytestblob','employee.csv',options:= azure_storage.options_csv_get(header=>true)) AS res (
  CustomerId int,
  LastName varchar(50),
  FirstName varchar(50))

Der Befehl COPY und die Funktion blob_get unterstützen die folgenden Dateierweiterungen für den Import:

Dateiformat Beschreibung
.csv Format mit durch Trennzeichen getrennten Werten, das von PostgreSQL COPY verwendet wird
.tsv Durch Tabstopp getrennte Werte – das Standardformat für PostgreSQL COPY
binary Binäres Format für PostgreSQL COPY
Text Datei mit einem einzelnen Textwert (z. B. große JSON- oder XML-Datei)

Exportieren von Daten aus der Azure Database for PostgreSQL – Flexible Server in Azure Blob Storage

Zum Exportieren von Daten aus der Azure Database for PostgreSQL – Flexibler Server in Azure Blob Storage müssen Sie die Erweiterung azure_storageauf die Positivliste setzen. Anschließend installieren Sie die PostgreSQL-Erweiterung azure_storage mithilfe des Befehls CREATE EXTENSION in der Datenbank:

CREATE EXTENSION azure_storage;

Wenn Sie ein Speicherkonto erstellen, generiert Azure zwei 512-Bit-Speicherkonto-Zugriffsschlüssel für dieses Konto. Sie können diese Schlüssel verwenden, um den Zugriff auf Daten in Ihrem Speicherkonto über die Autorisierung mit gemeinsam genutztem Schlüssel oder über SAS-Token (Shared Access Signature) zu autorisieren, die mit dem gemeinsam genutzten Schlüssel signiert sind.

Bevor Sie die Daten importieren können, müssen Sie das Speicherkonto mithilfe der account_add-Methode zuordnen. Geben Sie den Kontozugriffsschlüssel an, der beim Erstellen des Kontos definiert wurde. Das folgende Codebeispiel ordnet das Speicherkonto mystorageaccount zu und verwendet die Zeichenfolge SECRET_ACCESS_KEY als Parameter für den Zugriffsschlüssel:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Sie können entweder die Anweisung COPY oder die Funktion blob_put verwenden, um Daten aus einer Azure Database for PostgreSQL-Tabelle in Azure Blob Storage zu exportieren. Das folgende Beispiel zeigt den Export von Daten aus einer Mitarbeitertabelle in eine neue Datei mit dem Namen employee2.csv über den Befehl COPY. Die Datei befindet sich im Blobcontainer mytestblob im selben Azure-Speicherkonto namens mystorageaccount.

COPY employees 
TO 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee2.csv'
WITH (FORMAT 'csv');

Ebenso können Sie Daten aus einer Mitarbeitertabelle über die blob_put-Funktion exportieren, wodurch Sie noch bessere Kontrolle über die exportierten Daten erhalten. Im folgenden Beispiel werden nur zwei Spalten der Tabelle exportiert: EmployeeId und LastName. Die Spalte FirstName wird übersprungen.

SELECT azure_storage.blob_put('mystorageaccount', 'mytestblob', 'employee2.csv', res) FROM (SELECT EmployeeId,LastName FROM employees) res;

Der Befehl COPY und die Funktion blob_put unterstützen die folgenden Dateierweiterungen für den Export:

Dateiformat Beschreibung
.csv Format mit durch Trennzeichen getrennten Werten, das von PostgreSQL COPY verwendet wird
.tsv Durch Tabstopp getrennte Werte – das Standardformat für PostgreSQL COPY
binary Binäres Format für PostgreSQL COPY
Text Eine Datei mit einem einzelnen Textwert (z. B. große JSON- oder XML-Datei)

Auflisten von Objekten in Azure Storage

Um Objekte in Azure Blob Storage auflisten zu können, müssen Sie die Erweiterung auf die Positivliste setzenazure_storage. Anschließend installieren Sie die PostgreSQL-Erweiterung azure_storage mithilfe des Befehls CREATE EXTENSION in der Datenbank:

CREATE EXTENSION azure_storage;

Wenn Sie ein Speicherkonto erstellen, generiert Azure zwei 512-Bit-Speicherkonto-Zugriffsschlüssel für dieses Konto. Sie können diese Schlüssel verwenden, um den Zugriff auf Daten in Ihrem Speicherkonto über die Autorisierung mit gemeinsam genutztem Schlüssel oder über SAS-Token zu autorisieren, die mit dem gemeinsam genutzten Schlüssel signiert sind.

Bevor Sie die Daten importieren können, müssen Sie das Speicherkonto mithilfe der account_add-Methode zuordnen. Geben Sie den Kontozugriffsschlüssel an, der beim Erstellen des Kontos definiert wurde. Das folgende Codebeispiel ordnet das Speicherkonto mystorageaccount zu und verwendet die Zeichenfolge SECRET_ACCESS_KEY als Parameter für den Zugriffsschlüssel:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Die Azure Storage-Erweiterung stellt eine blob_list-Methode bereit. Mit dieser Methode können Sie Objekte in Blob Storage im folgenden Format auflisten:

azure_storage.blob_list(account_name, container_name, prefix)

Das folgende Beispiel zeigt das Auflisten von Objekten in Azure Storage mithilfe der blob_list-Methode aus einem Speicherkonto namens mystorageaccount und einem Blobcontainer namens mytestbob. Dateien im Container enthalten die Zeichenfolge employee.

SELECT path, size, last_modified, etag FROM azure_storage.blob_list('mystorageaccount','mytestblob','employee');

Zuweisung von Berechtigungen an ein nicht-administratives Konto für den Zugriff auf Daten von Azure Storage

Standardmäßig kann nur die administrative Rolle azure_pg_admin einen Kontoschlüssel hinzufügen und auf das Speicherkonto in Azure Database for PostgreSQL – Flexibler Server zugreifen.

Sie können die Berechtigung zum Zugriff auf Daten in Azure Storage für nicht-administrative Benutzer von Azure Database for PostgreSQL – Flexibler Server kann je nach Granularität der Berechtigung auf zwei Arten erteilen:

  • Weisen Sie azure_storage_admin dem nicht-administrativen Benutzer zu. Diese Rolle wird bei der Installation der Azure Storage-Erweiterung hinzugefügt. Das folgende Beispiel gewährt diese Rolle einem nicht-administrativen Benutzer namens support:

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • Rufen Sie die Funktion account_user_add auf. Im folgenden Beispiel werden der Rolle support in Azure Database for PostgreSQL – Flexibler Server Berechtigungen hinzugefügt. Es handelt sich um eine begrenzte Berechtigung, da der Benutzer nur Zugriff auf ein Azure-Speicherkonto mit dem Namen mystorageaccount erhält.

    SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');
    

Administratoren von Azure Database for PostgreSQL – Flexibler Server können eine Liste der Speicherkonten und Berechtigungen in der Ausgabe der account_list-Funktion abrufen. Diese Funktion zeigt alle Konten mit definierten Zugriffsschlüsseln an.

SELECT * FROM azure_storage.account_list();

Wenn der Administrator von Azure Database for PostgreSQL – Flexibler Server beschließt, dass Benutzer keinen Zugriff mehr haben sollten, kann er diesen mit der account_user_remove-Methode oder -Funktion den Zugriff entziehen. Im folgenden Beispiel wird die Rolle support aus dem Zugriff auf das Speicherkonto mystorageaccount entfernt:

SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');

Nächste Schritte

  • Wenn eine Erweiterung fehlt, die Sie verwenden möchten, lassen Sie es uns wissen. Stimmen Sie in unserem Feedbackforum für vorhandene Anfragen ab, oder geben Sie uns weiteres Feedback.