Övning – Arbeta med datafiler i Azure Blob Storage direkt från Azure Cosmos DB for PostgreSQL

Slutförd

I den här övningen pg_azure_storage använder du tillägget för att mata in data från filer som lagras på ett säkert sätt i en privat container i Azure Blob Storage.

Viktigt!

Den här övningen förlitar sig på Azure Cosmos DB for PostgreSQL-databasen och distribuerade tabeller som du skapade i enhet 3.

Skapa ett Azure Blob Storage-konto

För att slutföra den här övningen måste du skapa ett Azure Storage-konto, hämta dess åtkomstnyckel, skapa en container och kopiera Woodgrove Banks historiska datafiler till containern. I den här uppgiften skapar du lagringskontot.

  1. Öppna en webbläsare och gå till Azure-portalen.

  2. Välj Skapa en resurs, ett lagrings- och lagringskonto. Du kan också använda sökfunktionen för att hitta resursen.

    Screenshot of the Azure portal's create a resource screen, Storage and Storage account are highlighted.

  3. På fliken Grundläggande anger du följande information:

    Parameter Värde
    Projektinformation
    Prenumeration Välj din Azure-prenumeration.
    Resursgrupp Välj den learn-cosmosdb-postgresql resursgrupp som du skapade i föregående övning.
    Instansinformation
    Lagringskontonamn Ange ett globalt unikt namn, till exempel stlearnpostgresql.
    Region Välj samma region som du valde för ditt Azure Cosmos DB för PostgreSQL-databaskluster.
    Prestanda Välj Standard.
    Redundans Välj Lokalt redundant lagring (LRS).

    Screenshot of the Basics tab of the Create a storage account dialog. The fields are populated with the values specified in the exercise.

  4. Du använder standardinställningarna för de återstående flikarna i lagringskontokonfigurationen, så välj knappen Granska .

  5. Välj knappen Skapafliken Granska för att skapa lagringskontot.

Skapa en bloblagringscontainer och ladda upp datafiler

Woodgrove Bank har gett dig sina historiska datafiler i CSV-format. Skapa en container med namnet historical-data i det nya lagringskontot och ladda sedan upp filerna till den med hjälp av Azure CLI.

  1. Gå till ditt nya lagringskonto i Azure-portalen.

  2. I den vänstra navigeringsmenyn väljer du Containrar under Datalagring och sedan + Container i verktygsfältet.

    Screenshot of the Storage account page where Containers is selected and highlighted under Data storage in the left-hand navigation menu, and + Container is highlighted on the Containers page.

  3. I dialogrutan Ny container anger du historical-data i fältet Namn, lämnar Privat (ingen anonym åtkomst) vald för inställningen Offentlig åtkomstnivå och väljer Skapa.

    Screenshot of the New container dialog, with the name set to historical-data and the public access level set to private (no anonymous access).

    Genom att ställa in containerns åtkomstnivå på Privat (ingen anonym åtkomst) förhindrar du offentlig åtkomst till containern och dess innehåll. Nedan anger pg_azure_storage du tillägget med kontonamnet och åtkomstnyckeln så att det kan komma åt filerna på ett säkert sätt.

  4. Du behöver det namn och den nyckel som är associerad med ditt lagringskonto för att ladda upp datafilerna med hjälp av Azure CLI. I den vänstra navigeringsmenyn väljer du Åtkomstnycklar under Säkerhet + nätverk.

    Screenshot of Access Keys, which is selected and highlighted in the left-hand menu of the Storage account page.

  5. När sidan Åtkomstnycklar är öppen väljer du Cloud Shell-ikonen i azure-portalens verktygsfält för att öppna ett nytt Cloud Shell-fönster längst ned i webbläsarfönstret.

    Screenshot of the Cloud Shell icon in the Azure portal toolbar and a Cloud Shell window is open at the bottom of the browser window.

  6. I Azure Cloud Shell-prompten kör du följande curl kommandon för att ladda ned filerna som tillhandahålls av Woodgrove Bank.

    curl -O https://raw.githubusercontent.com/MicrosoftDocs/mslearn-create-connect-postgresHyperscale/main/users.csv
    curl -O https://raw.githubusercontent.com/MicrosoftDocs/mslearn-create-connect-postgresHyperscale/main/events.csv
    

    Filerna läggs till i Cloud Shell-lagringskontot.

  7. Sedan använder du Azure CLI för att ladda upp filerna till containern historical-data som du skapade i ditt lagringskonto. Börja med att skapa variabler för lagringskontots namn och nyckelvärden för att göra det enklare.

    Kopiera lagringskontots namn genom att välja knappen Kopiera till Urklipp bredvid lagringskontots namn på sidan Åtkomstnycklar ovanför Cloud Shell:

    Screenshot of the Copy to clipboard button and the ACCOUNT_NAME variable declaration line in the Cloud Shell.

    Kör nu följande kommando för att skapa en variabel för lagringskontots namn och ersätt {your_storage_account_name} token med namnet på ditt lagringskonto:

    ACCOUNT_NAME={your_storage_account_name}
    

    Välj sedan knappen Visa bredvid nyckeln för key1 och välj sedan knappen Kopiera till Urklipp bredvid nyckelns värde.

    Screenshot of the Copy to clipboard button next to the key1 Key value, and the ACCOUNT_KEY variable declaration line is highlighted in the Cloud Shell.

    Kör sedan följande kommando och {your_storage_account_key} ersätt token med nyckelvärdet som du kopierade:

    ACCOUNT_KEY={your_storage_account_key}
    
  8. Om du vill ladda upp filerna använder az storage blob upload du kommandot från Azure CLI. Kör följande kommandon för att ladda upp filerna till lagringskontots historical-data container:

    az storage blob upload --account-name $ACCOUNT_NAME --account-key $ACCOUNT_KEY --container-name historical-data --file users.csv --name users.csv --overwrite
    
    az storage blob upload --account-name $ACCOUNT_NAME --account-key $ACCOUNT_KEY --container-name historical-data --file events.csv --name events.csv --overwrite
    

    I den här övningen arbetar du med några filer. Du kommer förmodligen att arbeta med många fler filer i verkliga scenarier. Under dessa omständigheter kan du granska olika metoder för att migrera filer till ett Azure Storage-konto och välja den teknik som fungerar bäst för din situation.

  9. Om du vill verifiera att filerna har laddats upp kan du navigera till sidan Containrar i ditt lagringskonto genom att välja Containrar på den vänstra navigeringsmenyn. Välj containern historical-data i listan med containrar och observera att containern nu innehåller filer med namnet events.csv och users.csv.

    Screenshot of the events.csv and users.csv blobs highlighted in the list of files in the historical-data container.

Anslut till databasen med psql i Azure Cloud Shell

När filerna nu är säkert lagrade i Blob Storage är det dags att konfigurera pg_azure_storage tillägget i databasen. Du använder psql kommandoradsverktyget från Azure Cloud Shell för att utföra den här uppgiften.

  1. Med samma webbläsarflik där Cloud Shell är öppet går du till din Azure Cosmos DB for PostgreSQL-resurs i Azure-portalen.

  2. I databasens vänstra navigeringsmeny väljer du Anslut ionssträngar under Inställningar och kopierar anslutningssträng märkt psql.

    Screenshot of the Connection strings page of the Azure Cosmos DB Cluster resource. On the Connection strings page, the copy to clipboard button to the right of the psql connection string is highlighted.

  3. Klistra in anslutningssträng i en textredigerare som Anteckningar och ersätt {your_password} token med det lösenord som du tilldelade citus användaren när du skapade klustret. Kopiera den uppdaterade anslutningssträng för användning nedan.

  4. I det öppna Cloud Shell-fönstret kontrollerar du att Bash är valt för miljön och sedan använder kommandoradsverktyget psql för att ansluta till databasen. Klistra in den uppdaterade anslutningssträng (den som innehåller rätt lösenord) i kommandotolken i Cloud Shell och kör sedan kommandot, som bör se ut ungefär som följande kommando:

    psql "host=c.learn-cosmosdb-postgresql.postgres.database.azure.com port=5432 dbname=citus user=citus password=P@ssword.123! sslmode=require"
    

Installera pg_azure_storage-tillägget

Nu när du är ansluten till databasen kan du installera pg_azure_storage tillägget.

  1. Från Cloud Shell Citus-prompten kör du följande SQL-kommando för att läsa in tillägget i databasen:

    SELECT create_extension('azure_storage');
    

    Tilläggets namn förkortas till azure_storage när du skapar och arbetar med tillägget i databasen.

Bevilja åtkomst till ett bloblagringskonto

Nästa steg är att bevilja åtkomst till ditt lagringskonto när tillägget har installerats pg_azure_storage . Kom ihåg att containern historical-data skapades med åtkomstnivån Privat (ingen anonym åtkomst) så du måste ange namnet och nyckeln som är associerad med ditt lagringskonto för att ge tillägget åtkomst till filer i containern.

  1. Med samma webbläsarflik där Cloud Shell är öppet går du till lagringskontoresursen i Azure-portalen.

  2. I den vänstra navigeringsmenyn väljer du Åtkomstnycklar under Säkerhet + nätverk.

    Screenshot of Access keys, which is selected and highlighted in the left-hand menu of the Storage account page.

  3. Kör frågan nedan för att ge pg_azure_storage tillägget åtkomst till ditt lagringskonto och ersätt {storage_account_name} token och {storage_account_key} med dina värden, som du kan kopiera från sidan Åtkomstnycklar för ditt lagringskonto.

    SELECT azure_storage.account_add('{storage_account_name}', '{storage_account_key}');
    
  4. Om du vill visa listan över konton som har lagts till i databasen kan du använda funktionen på account_list() följande sätt:

    SELECT azure_storage.account_list();
    

    Den här frågan ger följande utdata:

          account_list      
    ------------------------
    (stlearnpostgresql,{})
    

    Observera att du kan ta bort konton från databasen med hjälp av account_remove('ACCOUNT_NAME') funktionen, men gör det inte här eftersom du behöver kontot anslutet under resten av övningen.

Visa en lista över filer i en bloblagringscontainer

Nu när du är säkert ansluten till lagringskontot kan du använda blob_list() funktionen för att skapa en lista över blobarna i en namngiven container.

  1. Om du vill visa filerna i containern historical-data kör du följande fråga:

    SELECT path, content_type, pg_size_pretty(bytes)
    FROM azure_storage.blob_list('stlearnpostgresql', 'historical-data');
    
  2. Funktionen blob_list() matar ut alla blobar i den container som du angav:

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

Granska filen users.csv

Innan du försöker mata in data från en fil måste du förstå strukturen för data i filen. Det enklaste sättet att förstå strukturen är att förhandsgranska filen i Azure-portalen, men den här funktionen är begränsad till filer som är mindre än 2,1 MB. Utdata från blob_list() funktionen visar att båda filerna som Woodgrove Bank gav dig är större än gränsen. Om du vill granska filerna måste du ladda ned och öppna dem lokalt.

  1. Gå till lagringskontoresursen i Azure-portalen, välj Lagringswebbläsare på den vänstra navigeringsmenyn och välj sedan Blobcontainrar på sidan Lagringswebbläsare.

    Screnshot of the Storage browser menu item highlighted on the Storage account page. On the Storage browser window, Blob containers are highlighted in the navigation tree.

  2. I listan med containrar väljer du historical-data.

  3. Välj ellipsknappen (...) till höger om users.csv filen och välj Ladda ned på snabbmenyn.

    Screenshot of the users.csv file in the historical-data container, and the ellipsis button is highlighted. In the context menu for the file, Download is highlighted.

  4. När nedladdningen är klar öppnar du filen med Hjälp av Microsoft Excel (eller en annan textredigerare som kan öppna CSV-filer) och observerar strukturen för data som finns i filen, vilket liknar följande exempel på de första 10 raderna i users.csv filen.

    user_id url login avatar_url
    21 https://api.woodgrove.com/users/technoweenie technoweenie https://avatars.woodgroveusercontent.com/u/21?
    22 https://api.woodgrove.com/users/macournoyer macournoyer https://avatars.woodgroveusercontent.com/u/22?
    38 https://api.woodgrove.com/users/atmos atmos https://avatars.woodgroveusercontent.com/u/38?
    45 https://api.woodgrove.com/users/mojodna mojodna https://avatars.woodgroveusercontent.com/u/45?
    69 https://api.woodgrove.com/users/rsanheim rsanheim https://avatars.woodgroveusercontent.com/u/69?
    78 https://api.woodgrove.com/users/indirect indirect https://avatars.woodgroveusercontent.com/u/78?
    81 https://api.woodgrove.com/users/engineyard engineyard https://avatars.woodgroveusercontent.com/u/81?
    82 https://api.woodgrove.com/users/jsierles jsierles https://avatars.woodgroveusercontent.com/u/82?
    85 https://api.woodgrove.com/users/brixen brixen https://avatars.woodgroveusercontent.com/u/85?
    87 https://api.woodgrove.com/users/tmornini tmornini https://avatars.woodgroveusercontent.com/u/87?

    Observera att filen innehåller fyra kolumner. Den första kolumnen innehåller heltalsvärden och de återstående kolumnerna innehåller text. Det är också viktigt att observera att filen inte innehåller någon rubrikrad. Den här informationen ändrar hur du konfigurerar COPY kommandot för att mata in filens data i databasen.

    Du skapade tabellen payment_users i enhet 3. Som en påminnelse är tabellens struktur följande:

    /*
    -- Table structure and distribution details provided for reference
    CREATE TABLE payment_users
    (
        user_id bigint PRIMARY KEY,
        url text,
        login text,
        avatar_url text
    );
    
    SELECT created_distributed_table('payment_users', 'user_id');
    */
    

    Baserat på den observerade strukturen i users.csv filen verkar data stämma överens med vad som förväntas och du bör kunna läsa in payment_users tabellen utan problem.

Extrahera data från filer i bloblagring

Nu när du förstår data i filen kan du uppfylla Woodgrove Banks begäran om att massinläsa historiska data från filer i ett Azure Blob Storage-konto. Tillägget pg_azure_storage tillhandahåller massinläsningsfunktioner genom att utöka det interna PostgreSQL-kommandot COPY så att det kan hantera Azure Blob Storage-resurs-URL:er. Den här funktionen är aktiverad som standard och du kan hantera den med hjälp av inställningen azure_storage.enable_copy_command .

  1. Använd det utökade COPY kommandot och kör följande kommando för att mata in data från users.csv tabellen payment_users och se till att ersätta {STORAGE_ACCOUNT_NAME} token med det unika namnet på lagringskontot som du skapade ovan.

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

    Utdata från COPY kommandot anger antalet rader som kopieras till tabellen. Du bör se resultatet för users.csv filen: COPY 264197.

    users.csv Anta att filen innehöll en rubrikrad. Om du vill hantera det med hjälp av COPY kommandot och pg_azure_storage tillägget måste du ange alternativet WITH (header) som följer resurs-URL:en. Exempel: copy payment_users FROM 'https://{STORAGE_ACCOUNT_NAME}.blob.core.windows.net/historical-data/users.csv' WITH (header);

  2. Kör sedan en COUNT fråga i payment_users tabellen för att verifiera antalet poster som kopierats till tabellen:

    SELECT COUNT(*) FROM payment_users;
    

    Du bör se följande resultat som matchar resultatet från COPY kommandot:

     count  
    --------
    264197
    

    Gratulerar! Du har utökat din Azure Cosmos DB for PostgreSQL-databas och använt pg_azure_storage tillägget för att mata in fildata från en säker container i Azure Blob Storage till en distribuerad tabell.

  3. I Cloud Shell kör du följande kommando för att koppla från databasen:

    \q
    

Rensa

Det är viktigt att du rensar alla oanvända resurser. Du debiteras för den konfigurerade kapaciteten, inte hur mycket databasen används. Använd följande procedur för att ta bort resursgruppen tillsammans med de resurser som du skapade för den här modulen.

  1. Öppna en webbläsare och gå till Azure-portalen.

  2. I den vänstra navigeringsmenyn väljer du Resursgrupper och sedan den resursgrupp som du skapade som en del av övningen i enhet 4.

  3. I fönstret Översikt väljer du Ta bort resursgrupp.

  4. Ange namnet på resursgruppen som du skapade för att bekräfta och välj sedan Ta bort.

  5. Välj Ta bort igen för att bekräfta borttagningen.