Share via


estensione Archiviazione di Azure in Database di Azure per PostgreSQL - Server flessibile

SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile

Un caso d'uso comune per i clienti Microsoft è la possibilità di importare ed esportare dati tra Archiviazione BLOB di Azure e un'istanza del server flessibile Database di Azure per PostgreSQL. L'estensione Archiviazione di Azure (azure_storage) in Database di Azure per PostgreSQL server flessibile semplifica questo caso d'uso.

Archiviazione BLOB di Azure

Archiviazione BLOB di Azure è una soluzione di archiviazione di oggetti per il cloud. L'archiviazione BLOB è ottimizzata per archiviare enormi quantità di dati non strutturati. I dati non strutturati sono dati che non seguono una definizione o un modello di dati specifico, ad esempio dati di testo o binari.

L'Archiviazione BLOB offre una gerarchia di tre tipi di risorse:

  • L'account di archiviazione è un'entità amministrativa che contiene servizi per elementi come BLOB, file, code, tabelle o dischi.

    Quando si crea un account di archiviazione in Azure, si ottiene uno spazio dei nomi univoco per le risorse di archiviazione. Tale spazio dei nomi univoco fa parte dell'URL. Il nome dell'account di archiviazione deve essere univoco in tutti i nomi degli account di archiviazione esistenti in Azure.

  • Un contenitore si trova all'interno di un account di archiviazione. Un contenitore è simile a una cartella in cui sono archiviati i BLOB.

    È possibile definire i criteri di sicurezza e assegnare criteri al contenitore. Questi criteri si propagano a tutti i BLOB nel contenitore.

    Un account di archiviazione può contenere un numero illimitato di contenitori. Ogni contenitore può contenere un numero illimitato di BLOB, fino alla dimensione massima dell'account di archiviazione di 500 TB.

    Dopo aver inserito un BLOB in un contenitore all'interno di un account di archiviazione, è possibile fare riferimento al BLOB usando un URL in questo formato: protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>.

  • Un BLOB è una parte di dati che risiede nel contenitore.

Il diagramma seguente mostra la relazione tra queste risorse.

Diagramma che mostra un esempio di risorse di archiviazione.

Vantaggi principali dell'archiviazione dei dati come BLOB in Archiviazione BLOB di Azure

Archiviazione BLOB di Azure può offrire i vantaggi seguenti:

  • Si tratta di una soluzione di archiviazione cloud scalabile e conveniente. È possibile usarlo per archiviare i dati di qualsiasi dimensione e aumentare o ridurre le prestazioni in base alle esigenze.
  • Offre livelli di sicurezza per proteggere i dati, ad esempio la crittografia dei dati inattivi e in transito.
  • Comunica con altri servizi di Azure e applicazioni partner. Si tratta di una soluzione versatile per un'ampia gamma di casi d'uso, ad esempio backup e ripristino di emergenza, archiviazione e analisi dei dati.
  • Si tratta di una soluzione conveniente per la gestione e l'archiviazione di grandi quantità di dati nel cloud, indipendentemente dal fatto che l'organizzazione sia una piccola azienda o un'azienda di grandi dimensioni. Si paga solo per lo spazio di archiviazione necessario.

Importare dati da Archiviazione BLOB di Azure a Database di Azure per PostgreSQL server flessibile

Per caricare dati da Archiviazione BLOB di Azure, è necessario consentire l'estensione azure_storage PostgreSQL. Installare quindi l'estensione nel database usando il CREATE EXTENSION comando :

 CREATE EXTENSION azure_storage;

Quando si crea un account di archiviazione, Azure genera due chiavi di accesso dell'account di archiviazione a 512 bit per tale account. È possibile usare queste chiavi per autorizzare l'accesso ai dati nell'account di archiviazione tramite l'autorizzazione con chiave condivisa.

Prima di poter importare i dati, è necessario eseguire il mapping dell'account di archiviazione usando il account_add metodo . Specificare la chiave di accesso dell'account definita al momento della creazione dell'account. L'esempio di codice seguente esegue il mapping dell'account mystorageaccount di archiviazione e usa la stringa SECRET_ACCESS_KEY come parametro della chiave di accesso:

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

Dopo aver eseguito il mapping dello spazio di archiviazione, è possibile elencare il contenuto dell'account di archiviazione e scegliere i dati per l'importazione. L'esempio seguente presuppone che sia stato creato un account di archiviazione denominato mystorageaccount e un contenitore BLOB denominato mytestblob:

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

È possibile filtrare l'output di questa istruzione usando una clausola regolare SQL WHERE o il prefix parametro del blob_list metodo . L'elenco dei contenuti del contenitore richiede un account e una chiave di accesso o un contenitore con accesso anonimo abilitato.

Infine, è possibile usare l'istruzione COPY o la blob_get funzione per importare dati da Archiviazione BLOB di Azure in una tabella server flessibile Database di Azure per PostgreSQL esistente.

Importare dati usando un'istruzione COPY

L'esempio seguente illustra l'importazione di dati da un file di employee.csv che risiede nel contenitore mytestblob BLOB nello stesso mystorageaccount account di archiviazione di Azure tramite il COPY comando :

  1. Creare una tabella di destinazione che corrisponda allo schema del file di origine:

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. Usare un'istruzione COPY per copiare i dati nella tabella di destinazione. Specificare che la prima riga è intestazioni.

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

Importare dati usando la funzione blob_get

La blob_get funzione recupera un file dalla Archiviazione BLOB. Per assicurarsi di blob_get poter analizzare i dati, è possibile passare un valore con un tipo che corrisponde alle colonne nel file o definire in modo esplicito le colonne nella FROM clausola .

È possibile usare la blob_get funzione nel formato seguente:

azure_storage.blob_get(account_name, container_name, path)

L'esempio seguente mostra la stessa azione dalla stessa origine alla stessa destinazione usando la blob_get funzione :

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))

Il COPY comando e blob_get la funzione supportano le estensioni di file seguenti per l'importazione:

File format Descrizione
.csv Formato di valori delimitati da virgole usato da PostgreSQL COPY
.tsv Valori delimitati da tabulazioni, formato PostgreSQL COPY predefinito
binary Formato PostgreSQL COPY binario
Testo File che contiene un singolo valore di testo (ad esempio, JSON o XML di grandi dimensioni)

Esportare dati da Database di Azure per PostgreSQL server flessibile in Archiviazione BLOB di Azure

Per esportare i dati da Database di Azure per PostgreSQL server flessibile a Archiviazione BLOB di Azure, è necessario consentire l'estensioneazure_storage. Installare quindi l'estensione azure_storage PostgreSQL nel database usando il CREATE EXTENSION comando :

CREATE EXTENSION azure_storage;

Quando si crea un account di archiviazione, Azure genera due chiavi di accesso dell'account di archiviazione a 512 bit per tale account. È possibile usare queste chiavi per autorizzare l'accesso ai dati nell'account di archiviazione tramite l'autorizzazione con chiave condivisa o tramite token di firma di accesso condiviso firmati con la chiave condivisa.

Prima di poter importare i dati, è necessario eseguire il mapping dell'account di archiviazione usando il account_add metodo . Specificare la chiave di accesso dell'account definita al momento della creazione dell'account. L'esempio di codice seguente esegue il mapping dell'account mystorageaccount di archiviazione e usa la stringa SECRET_ACCESS_KEY come parametro della chiave di accesso:

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

È possibile usare l'istruzione COPY o la blob_put funzione per esportare i dati da una tabella Database di Azure per PostgreSQL in Archiviazione BLOB di Azure. Nell'esempio seguente viene illustrata l'esportazione di dati da una tabella employee in un nuovo file denominato employee2.csv tramite il COPY comando . Il file si trova nel contenitore mytestblob BLOB nello stesso mystorageaccount account di archiviazione di Azure.

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

Analogamente, è possibile esportare dati da una tabella dipendente tramite la blob_put funzione , che offre un controllo ancora più limitato sui dati esportati. Nell'esempio seguente vengono esportate solo due colonne della tabella e EmployeeIdLastName. Ignora la FirstName colonna.

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

Il COPY comando e la blob_put funzione supportano le estensioni di file seguenti per l'esportazione:

File format Descrizione
.csv Formato di valori delimitati da virgole usato da PostgreSQL COPY
.tsv Valori delimitati da tabulazioni, formato PostgreSQL COPY predefinito
binary Formato PostgreSQL COPY binario
Testo File che contiene un singolo valore di testo (ad esempio, JSON di grandi dimensioni o XML)

Elencare gli oggetti in Archiviazione di Azure

Per elencare gli oggetti in Archiviazione BLOB di Azure, è necessario consentire l'estensioneazure_storage. Installare quindi l'estensione azure_storage PostgreSQL nel database usando il CREATE EXTENSION comando :

CREATE EXTENSION azure_storage;

Quando si crea un account di archiviazione, Azure genera due chiavi di accesso dell'account di archiviazione a 512 bit per tale account. È possibile usare queste chiavi per autorizzare l'accesso ai dati nell'account di archiviazione tramite l'autorizzazione della chiave condivisa o tramite token di firma di accesso condiviso firmati con la chiave condivisa.

Prima di poter importare i dati, è necessario eseguire il mapping dell'account di archiviazione usando il account_add metodo . Specificare la chiave di accesso dell'account definita al momento della creazione dell'account. L'esempio di codice seguente esegue il mapping dell'account mystorageaccount di archiviazione e usa la stringa SECRET_ACCESS_KEY come parametro della chiave di accesso:

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

L'estensione Archiviazione di Azure fornisce un blob_list metodo. È possibile usare questo metodo per elencare gli oggetti in Blob Archiviazione nel formato seguente:

azure_storage.blob_list(account_name, container_name, prefix)

L'esempio seguente mostra l'elenco di oggetti in Archiviazione di Azure usando il blob_list metodo di un account di archiviazione denominato mystorageaccount e un contenitore BLOB denominato mytestbob. I file nel contenitore hanno la stringa employee.

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

Assegnare autorizzazioni a un account non amministrativo per accedere ai dati da Archiviazione di Azure

Per impostazione predefinita, solo il ruolo amministrativo azure_pg_admin può aggiungere una chiave dell'account e accedere all'account di archiviazione in Database di Azure per PostgreSQL server flessibile.

È possibile concedere le autorizzazioni per accedere ai dati in Archiviazione di Azure a utenti server non amministrativi Database di Azure per PostgreSQL server flessibili in due modi, a seconda della granularità delle autorizzazioni:

  • Assegnare azure_storage_admin all'utente non amministratore. Questo ruolo viene aggiunto con l'installazione dell'estensione Archiviazione di Azure. L'esempio seguente concede questo ruolo a un utente non amministratore denominato support:

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • Chiamare la funzione account_user_add. Nell'esempio seguente vengono aggiunte autorizzazioni al ruolo support in Database di Azure per PostgreSQL server flessibile. Si tratta di un'autorizzazione più limitata, perché concede all'utente l'accesso solo a un account di archiviazione di Azure denominato mystorageaccount.

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

Amministrazione utenti indipendenti di Database di Azure per PostgreSQL server flessibile possono ottenere un elenco di account di archiviazione e autorizzazioni nell'output della account_list funzione. Questa funzione mostra tutti gli account con chiavi di accesso definite.

SELECT * FROM azure_storage.account_list();

Quando l'amministratore del server flessibile Database di Azure per PostgreSQL decide che l'utente non deve più avere accesso, l'amministratore può usare il metodo o la account_user_remove funzione per rimuovere l'accesso. Nell'esempio seguente il ruolo support viene rimosso dall'accesso all'account mystorageaccountdi archiviazione :

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

Passaggi successivi

  • Se non viene visualizzata un'estensione che si vuole usare, segnalarlo. Votare per le richieste esistenti o creare nuove richieste di feedback nel forum di feedback.