Condividi tramite


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 di Database di Azure per PostgreSQL. L'estensione di Archiviazione di Azure (azure_storage) nel server flessibile di Database di Azure per PostgreSQL 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.

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 tra tutti i nomi degli account 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ò avere 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 usarla 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 al server flessibile di Database di Azure per PostgreSQL

Per caricare i dati da Archiviazione BLOB di Azure, è necessario aggiungere all'elenco di elementi consentiti l'estensione PostgreSQL azure_storage. Installare quindi l'estensione nel database usando il comando CREATE EXTENSION:

 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 metodo account_add. Specificare la chiave di accesso dell'account definita al momento della creazione dell'account. L'esempio di codice seguente esegue il mapping dell'account di archiviazione mystorageaccount 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 e scegliere i dati per l'importazione. L'esempio seguente presuppone che siano stati creati 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 SQL WHERE regolare o il parametro prefix del metodo blob_list. 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 funzione blob_get per importare dati da Archiviazione BLOB di Azure in una tabella server flessibile di Database di Azure per PostgreSQL esistente.

Importare dati con un'istruzione COPY

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

  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 è composta da 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 funzione blob_get recupera un file dall'archivio BLOB. Per assicurarsi che blob_get possa analizzare i dati, è possibile passare un valore con un tipo che corrisponde alle colonne del file o definire in modo esplicito le colonne nella clausola FROM.

È possibile usare la funzione blob_get 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 funzione blob_get:

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 comando COPY e la funzione blob_get 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 predefinito PostgreSQL COPY
binary Formato PostgreSQL COPY binario
Testo Un file contenente un singolo valore di testo (ad esempio JSON o XML di grandi dimensioni)

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

Per esportare i dati dal server flessibile di Database di Azure per PostgreSQL in Archiviazione BLOB di Azure, è necessario aggiungere all'elenco elementi consentiti l'estensione azure_storage. Installare quindi l'estensione PostgreSQL azure_storage nel database usando il comando CREATE EXTENSION:

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 metodo account_add. Specificare la chiave di accesso dell'account definita al momento della creazione dell'account. L'esempio di codice seguente esegue il mapping dell'account di archiviazione mystorageaccount 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 funzione blob_put per esportare i dati da una tabella di Database di Azure per PostgreSQL in Archiviazione BLOB di Azure. Nell'esempio seguente viene illustrata l'esportazione di dati da una tabella dipendenti in un nuovo file denominato employee2.csv tramite il comando COPY. Il file si trova nel contenitore BLOB mytestblob nello stesso account di archiviazione di Azure mystorageaccount.

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

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

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

Il comando COPY e la funzione blob_put 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 predefinito PostgreSQL COPY
binary Formato PostgreSQL COPY binario
Testo Un file contenente un singolo valore di testo (ad esempio JSON o XML di grandi dimensioni)

Elencare gli oggetti in Archiviazione di Azure

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

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 metodo account_add. Specificare la chiave di accesso dell'account definita al momento della creazione dell'account. L'esempio di codice seguente esegue il mapping dell'account di archiviazione mystorageaccount 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 metodo blob_list. È possibile usare questo metodo per elencare gli oggetti nell'archivio BLOB 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 metodo blob_list da 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 nel server flessibile di Database di Azure per PostgreSQL.

È possibile concedere le autorizzazioni per accedere ai dati in Archiviazione di Azure a utenti non amministratori del server flessibile di Database di Azure per PostgreSQL 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 le autorizzazioni al ruolo support nel server flessibile di Database di Azure per PostgreSQL. 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');
    

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

SELECT * FROM azure_storage.account_list();

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

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

Passaggi successivi

  • Segnalare a Microsoft la mancanza di un'estensione che si desidera usare. Esprimere un voto per le richieste esistenti o creare nuovi commenti e richieste nel forum dei commenti.