Delen via


Quickstartvoorbeelden voor de Azure Storage-extensie in Azure Database for PostgreSQL

Hieronder vindt u een lijst met voorbeelden voor meer informatie over het gebruik van de Azure Storage-extensie.

Een Azure Storage-account maken en vullen met gegevens

  1. Een Azure Storage-account maken. Als u nog geen Azure Storage-account wilt maken, past u de waarden van <resource_group>, <location>en <account_name>en <container_name>voert u de volgende Azure CLI-opdracht uit:
    random_suffix=$(tr -dc 'a-z0-9' </dev/urandom | head -c8)
    resource_group="resource-group-$random_suffix"
    location="eastus2"
    storage_account="storageaccount$random_suffix"
    blob_container="container-$random_suffix"
    az group create --name $resource_group --location $location
    az storage account create --resource-group $resource_group --name $storage_account --location $location --sku Standard_LRS --kind BlobStorage --public-network-access enabled --access-tier hot
    echo "Take note of the storage account name, which you'll have to replace in subsequent examples, whenever you find a reference to <account_name>:"
    echo $storage_account
    echo "Take note of the container name, which you'll have to replace in subsequent examples, whenever you find a reference to <container_name>:"
    echo $blob_container
    
  2. Maak een blobcontainer. Voer de volgende Azure CLI uit om de blobcontainer te maken:
    az storage container create --account-name $storage_account --name $blob_container -o tsv
    
  3. Haal een van de twee toegangssleutels op die zijn toegewezen aan het opslagaccount. Zorg ervoor dat u de waarde van uw access_key kopieert omdat u deze als argument moet doorgeven aan azure_storage.account_add in een volgende stap. Voer de volgende Azure CLI-opdracht uit om de eerste van de twee toegangssleutels op te halen:
    access_key=$(az storage account keys list --resource-group $resource_group --account-name $storage_account --query [0].value)
    echo "Following is the value of your access key:"
    echo $access_key
    
  4. Download het bestand met de gegevensset die tijdens de voorbeelden wordt gebruikt en upload het naar uw blobcontainer. Voer de volgende Azure CLI-opdracht uit om het bestand te downloaden met de gegevensset:
    mkdir --parents azure_storage_examples
    cd azure_storage_examples
    curl -O https://examples.citusdata.com/tutorial/events.csv
    gzip -k events.csv
    cp events.csv events_blob_without_extension
    cp events.csv events_pipe.csv
    cp events.csv.gz events_compressed
    sed -i 's/,/|/g' events_pipe.csv
    az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "events*" --account-key $access_key --overwrite --output none --only-show-errors
    

Opmerking

U kunt containers of de blobs die erin zijn opgeslagen voor een specifiek opslagaccount weergeven, maar alleen als uw PostgreSQL-gebruiker of -rol is gemachtigd voor de verwijzing naar dat opslagaccount met behulp van azure_storage.account_user_add. Leden van de azure_storage_admin rol krijgen deze bevoegdheid toegewezen voor alle Azure Storage-accounts die zijn toegevoegd met behulp van azure_storage.account_add. Standaard worden alleen leden van azure_pg_admin de azure_storage_admin rol verleend.

Een tabel maken waarin gegevens worden geladen

Laten we de tabel maken waarin we de inhoud van het CSV-bestand importeren dat we hebben geüpload naar het opslagaccount. Hiervoor maakt u verbinding met uw exemplaar van Azure Database for PostgreSQL flexibele server met behulp PgAdminvan, psqlof de client van uw voorkeur en voert u de volgende instructie uit:

CREATE TABLE IF NOT EXISTS events
        (
         event_id bigint
        ,event_type text
        ,event_public boolean
        ,repo_id bigint
        ,payload jsonb
        ,repo jsonb
        ,user_id bigint
        ,org jsonb
        ,created_at timestamp without time zone
        );

De extensie voorbereiden voor gebruik

Voordat u doorgaat, moet u het volgende doen:

  1. De bibliotheek van de extensie laden
  2. De extensie toestaan
  3. De extensie maken

Toegangssleutel van opslagaccount toevoegen

In dit voorbeeld ziet u hoe u een verwijzing naar een opslagaccount toevoegt, samen met de toegangssleutel van dat opslagaccount dat nodig is voor toegang tot de inhoud ervan via de functionaliteit van de azure_storage extensie in uw exemplaar van flexibele Azure Database for PostgreSQL-server.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

Op dezelfde manier <access_key> moet worden ingesteld op de waarde die u hebt opgehaald uit uw opslagaccount.

SELECT azure_storage.account_add('<account_name>', '<access_key>');

Aanbeveling

Als u de naam van het opslagaccount en een van de bijbehorende toegangssleutels uit Azure Portal wilt ophalen, zoekt u naar uw opslagaccount, selecteert u toegangssleutels in het resourcemenu, kopieert u de naam van het opslagaccount en kopieert u de sleutel uit de sectie Sleutel1 (u moet eerst Weergeven naast de sleutel selecteren).

Toegang verlenen tot een gebruiker of rol in de Naslaginformatie over Azure Blob Storage

In dit voorbeeld ziet u hoe u toegang verleent tot een gebruiker of rol met de naam <regular_user>, zodat een dergelijke PostgreSQL-gebruiker de azure_storage extensie kan gebruiken voor toegang tot de blobs die zijn opgeslagen in containers die worden gehost door het genoemde Azure-opslagaccount.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<regular_user> moet worden ingesteld op de naam van een bestaande gebruiker of rol.

SELECT * FROM azure_storage.account_user_add('<account_name>', '<regular_user>');

Alle blobs in een container weergeven

In dit voorbeeld ziet u hoe u alle bestaande blobs in de container <container_name> van het opslagaccount <account_name>weer kunt geven.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>');

Blobs weergeven met een specifiek naamvoorvoegsel

In dit voorbeeld ziet u hoe u alle bestaande blobs in de container <container_name> van het opslagaccount <account_name>weer kunt geven waarvan de blobnaam begint met <blob_name_prefix>.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

<blob_name_prefix> moet worden ingesteld op het voorvoegsel dat de blobs moeten bevatten in hun namen. Als u alle blobs wilt retourneren, kunt u deze parameter instellen op een lege tekenreeks of zelfs geen waarde voor deze parameter opgeven. In dat geval wordt de waarde standaard ingesteld op een lege tekenreeks.

SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>','<blob_name_prefix>');

U kunt ook de volgende syntaxis gebruiken:

SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>') WHERE path LIKE '<blob_name_prefix>%';

Gegevens importeren met een COPY FROM-instructie

In het volgende voorbeeld ziet u het importeren van gegevens uit een blob met de naam events.csv die zich in de blobcontainer <container_name> in het Azure Storage-account <account_name>bevindt, via de COPY opdracht:

  1. Maak een tabel die overeenkomt met het schema van het bronbestand:

    CREATE TABLE IF NOT EXISTS events
            (
             event_id bigint
            ,event_type text
            ,event_public boolean
            ,repo_id bigint
            ,payload jsonb
            ,repo jsonb
            ,user_id bigint
            ,org jsonb
            ,created_at timestamp without time zone
            );
    
  2. Gebruik een COPY instructie om gegevens naar de doeltabel te kopiëren. Geef op dat de eerste rij kolomkoppen bevat.

    COPY events
    FROM 'https://<account_name>.blob.core.windows.net/<container_name>/events.csv'
    WITH (FORMAT 'csv', header);
    
  3. Voer de volgende SELECT instructie uit om te bevestigen dat de gegevens in de tabel worden geladen.

    SELECT *
    FROM events
    LIMIT 100;
    

Gegevens exporteren met een COPY TO-instructie

In het volgende voorbeeld ziet u het exporteren van gegevens uit een tabel met de naam events, naar een blob met de naam events_exported.csv die zich in de blobcontainer <container_name> in het Azure Storage-account <account_name>bevindt, via de COPY opdracht:

  1. Maak een tabel die overeenkomt met het schema van het bronbestand:

    CREATE TABLE IF NOT EXISTS events
            (
             event_id bigint
            ,event_type text
            ,event_public boolean
            ,repo_id bigint
            ,payload jsonb
            ,repo jsonb
            ,user_id bigint
            ,org jsonb
            ,created_at timestamp without time zone
            );
    
  2. Gegevens in de tabel laden. Voer INSERT-instructies uit om deze te vullen met verschillende synthetische rijen of gebruik de importgegevens met behulp van een COPY FROM-instructievoorbeeld om deze te vullen met de inhoud van de voorbeeldgegevensset.

  3. Gebruik een COPY instructie om gegevens naar de doeltabel te kopiëren. Geef op dat de eerste rij kolomkoppen bevat.

    COPY events
    TO 'https://<account_name>.blob.core.windows.net/<container_name>/events_exported.csv'
    WITH (FORMAT 'csv', header);
    
  4. Voer de volgende SELECT instructie uit om te bevestigen dat de blob bestaat in het opslagaccount.

    SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>') WHERE path = 'events_exported.csv';
    

Inhoud lezen uit een blob

De blob_get functie haalt de inhoud van één specifieke blob (events.csv in dit geval) op in de container waarnaar wordt verwezen <container_name> van de <account_name> opslag. Als u wilt blob_get weten hoe u de gegevens kunt parseren, kunt u een waarde doorgeven in het formulier NULL::table_name, waarbij table_name wordt verwezen naar een tabel waarvan het schema overeenkomt met die van de blob die wordt gelezen. In het voorbeeld verwijst deze naar de events tabel die we aan het begin hebben gemaakt.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

<blob_name> moet worden ingesteld op het volledige pad van de blob waarvan u de inhoud wilt lezen.

SELECT * FROM azure_storage.blob_get
        ('<account_name>'
        ,'<container_name>'
        ,'events.csv'
        , NULL::events)
LIMIT 5;

U kunt ook expliciet het schema van het resultaat definiëren met behulp van de AS component na de blob_get functie.

SELECT * FROM azure_storage.blob_get('<account_name>','<container_name>','events.csv.gz')
AS res (
         event_id BIGINT
        ,event_type TEXT
        ,event_public BOOLEAN
        ,repo_id BIGINT
        ,payload JSONB
        ,repo JSONB
        ,user_id BIGINT
        ,org JSONB
        ,created_at TIMESTAMP WITHOUT TIME ZONE)
LIMIT 5;

Inhoud lezen, filteren en wijzigen die wordt gelezen uit een blob

In dit voorbeeld ziet u de mogelijkheid om de inhoud die is geïmporteerd uit de blob te filteren en te wijzigen voordat u deze in een SQL-tabel laadt.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT concat('P-',event_id::text) FROM azure_storage.blob_get
        ('<account_name>'
        ,'<container_name>'
        ,'events.csv'
        , NULL::events)
WHERE event_type='PushEvent'
LIMIT 5;

Inhoud van bestand lezen met aangepaste opties (kopteksten, kolomscheidingstekens, escapetekens)

In dit voorbeeld ziet u hoe u aangepaste scheidingstekens en escapetekens kunt gebruiken door het resultaat van options_copy door te geven aan het options argument.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT * FROM azure_storage.blob_get
        ('<account_name>'
        ,'<container_name>'
        ,'events_pipe.csv'
        ,NULL::events
        ,options := azure_storage.options_csv_get(delimiter := '|' , header := 'true')
        );

De decoderoptie gebruiken

In dit voorbeeld ziet u het gebruik van de decoder optie. Normaal gesproken wordt de indeling afgeleid van de extensie van het bestand, maar wanneer de bestandsinhoud geen overeenkomende extensie heeft, kunt u het argument decoder doorgeven.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT * FROM azure_storage.blob_get
        ('<account_name>'
        ,'<container_name>'
        ,'events_blob_without_extension'
        , NULL::events
        , decoder := 'csv')
LIMIT 5;

Compressie gebruiken met decoderoptie

In dit voorbeeld ziet u hoe u de gzip-compressie kunt afdwingen op een gecomprimeerde gzip-blob waarvan de naam niet eindigt op een .gz extensie.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT * FROM azure_storage.blob_get
        ('<account_name>'
        ,'<container_name>'
        ,'events_compressed'
        , NULL::events
        , decoder := 'csv'
        , compression := 'gzip')
LIMIT 5;

Berekeningsaggregaties over de inhoud van een blob

In dit voorbeeld ziet u hoe u aggregatiebewerkingen kunt uitvoeren op gegevens die zijn opgeslagen in een blobcontainer, zonder dat u de inhoud van de blob hoeft te importeren in PostgreSQL-tabellen.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT event_type, COUNT(*) FROM azure_storage.blob_get
        ('<account_name>'
        ,'<container_name>'
        ,'events.csv'
        , NULL::events)
GROUP BY event_type
ORDER BY 2 DESC
LIMIT 5;

Inhoud naar een blob schrijven

De blob_put functie bevat de inhoud van één specifieke blob (eventscopy.csvin dit geval) en uploadt deze naar de container van de <container_name> opslag waarnaar wordt verwezen<account_name>. In dit voorbeeld wordt gebruikgemaakt blob_get van het maken van een set van vijf rijen, die vervolgens worden doorgegeven aan de blob_put statistische functie die ze uploadt als een blob met de naam eventscopy.csv.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<container_name> moet worden ingesteld op de naam van uw blobcontainer. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de blob_container omgevingsvariabele in deze scripts.

SELECT azure_storage.blob_put
        ('<account_name>'
        ,'<container_name>'
        ,'eventscopy.csv'
        , top_5_events)
FROM (SELECT * FROM events) LIMIT 5) AS top_5_events;

Alle verwijzingen naar Azure-opslagaccounts weergeven

In dit voorbeeld ziet u hoe u kunt achterhalen welke Azure-opslagaccounts de azure_storage extensie kan raadplegen in deze database, samen met het type verificatie dat wordt gebruikt voor toegang tot elk opslagaccount en welke gebruikers of rollen machtigingen krijgen, via de functie azure_storage.account_user_add , voor toegang tot dat Azure-opslagaccount via de functionaliteit van de extensie.

SELECT * FROM azure_storage.account_list();

Toegang intrekken van een gebruiker of rol in de Naslaginformatie voor Azure Blob Storage

In dit voorbeeld ziet u hoe u de toegang kunt intrekken van een gebruiker of rol met de naam <regular_user>, zodat een dergelijke PostgreSQL-gebruiker de azure_storage extensie niet kan gebruiken voor toegang tot de blobs die zijn opgeslagen in containers die worden gehost door het genoemde Azure-opslagaccount.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

<regular_user> moet worden ingesteld op de naam van een bestaande gebruiker of rol.

SELECT * FROM azure_storage.account_user_remove('<account_name>', '<regular_user>');

Verwijzing naar opslagaccount verwijderen

In dit voorbeeld ziet u hoe u verwijzingen naar een opslagaccount verwijdert, zodat geen enkele gebruiker in de huidige database de azure_storage extensiefunctionaliteit kan gebruiken voor toegang tot dat opslagaccount.

<account_name> moet worden ingesteld op de naam van uw opslagaccount. Als u de vorige scripts hebt gebruikt, moet deze waarde overeenkomen met de waarde die u hebt ingesteld op de storage_account omgevingsvariabele in deze scripts.

SELECT azure_storage.account_remove('<account_name>');