Förstå Azure Storage-tillägget

Slutförd

Woodgrove Bank har beslutat att använda Azure Blob Storage för att lagra sina historiska datafiler i molnet på ett säkert sätt. De begärde möjligheten att massinläsa sina historiska data från CSV-filer som lagras i en privat container i deras lagringskonto.

Microsoft utvecklade pg_azure_storage tillägget för att tillåta arbete med data som lagras i filer som finns i Azure Blob Storage. Med tillägget kan du arbeta med filer i ett bloblagringskonto direkt från en Azure Cosmos DB for PostgreSQL-databas. Med tillägget kan du:

  • Anslut på ett säkert sätt till ett Azure Blob Storage-konto direkt från databasen.
  • Hämta data från offentligt delade Blob Storage-resurser.
  • Visa en lista över filer i Blob Storage-containern.
  • Hämta data från filer.
  • Importera CSV-fildata direkt till en tabell med kommandot COPY PostgreSQL.

Migrera filer till ett lagringskonto

Filer måste läggas till eller migreras till ett Azure Storage-konto innan du kan dra nytta av det här tilläggets funktioner. Om du flyttar filer till Azure Blob Storage kan du använda en molnbaserad, säker lagringstjänst.

Läs in pg_azure_storage-tillägget

För att komma igång måste du läsa in tillägget med hjälp av antingen CREATE EXTENSION eller create_extension() funktionen:

-- Install the extension in the database
SELECT create_extension('azure_storage');

pg_ Tas bort från tilläggets namn när du skapar och arbetar med tillägget i databasen, vilket förkortar det till helt enkelt azure_storage.

Bevilja åtkomst till ett bloblagringskonto

En Azure Cloud-tekniker på Woodgrove Bank skapade ett lagringskonto med namnet stlearnpostgresql som du kan använda och lade till några exempelfiler i en privat container med namnet historical-data. Tillägget pg_azure_storage innehåller metoden account_add() för att aktivera anslutning av ett lagringskonto till databasen. Genom att lägga till ett konto får du åtkomst till filerna i säkra eller privata containrar. Om du vill ansluta till en privat container måste du ange lagringskontots namn och åtkomstnyckel, vars syntax följer:

SELECT azure_storage.account_add('{STORAGE_ACCOUNT_NAME}', '{STORAGE_ACCOUNT_ACCESS_KEY}');

För att ge åtkomst till Woodgrove Banks lagringskonto från databasen måste du hämta dess namn och åtkomstnyckel. Du kan hämta den här informationen från sidan Åtkomstnycklar som är associerad med lagringskontot i Azure-portalen.

Screenshot of the access keys option highlighted in the left-hand menu of the Storage account page.

Ange namnet på lagringskontot när du kör följande fråga och åtkomstnyckeln ger pg_azure_storage tillägget åtkomst till kontot:

SELECT azure_storage.account_add('stlearnpostgresql', '4zzZGx4sUk8TBVnHnoPYt0G7A3w9/DJJBCfdxeeb+VDrR8P3bSwWA3lYsTvO1HwYzrt4XQ37iIEL+AStWuQ/uA==');

Att tillhandahålla en åtkomstnyckel krävs endast när du arbetar med data i containrar med åtkomstnivån "Privat (ingen anonym åtkomst)." Anta att du vill hämta data från en container vars åtkomstnivå är inställd på "Container (anonym läsåtkomst för containrar och blobar)." I så fall kan du mata in filer från Azure Blob Storage med hjälp av deras offentliga URL:er och räkna upp containerinnehåll utan att konfigurera kontonyckeln pg_azure_storage i tillägget.

Visa en lista över filer i Blob Storage

Nu när du är ansluten till lagringskontot kan du utföra flera åtgärder mot lagringskontot, inklusive att visa blobarna i en namngiven container. Om du vill få en bättre uppfattning om vilka exempelfiler som har laddats upp till containern historical-data kan du köra följande fråga:

SELECT path, content_type, pg_size_pretty(bytes)
FROM azure_storage.blob_list('stlearnpostgresql', 'historical-data');

Funktionen blob_list() tar lagringskontot och containernamnen som indata och matar ut en lista över blobar i containern:

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

Förutom varje fils sökväg, innehållstyp och storlek (i byte) kan du också visa senaste ändringsdatum, innehållskodning och innehållshash med hjälp av blob_list() funktionen.

Massinläsning av data från blobar

Woodgrove har uttryckt en önskan om att lagra historiska data i CSV-filer i sitt Azure Blob Storage-konto. Data ska sedan läsas in direkt i distribuerade tabeller i Azure Cosmos DB for PostgreSQL-databasen. Om du vill massinläsa data från filer i bloblagring pg_azure_storage utökar det interna PostgreSQL-kommandot COPY så att det kan hantera Url:er för Azure Blob Storage-resurser. Den här funktionen är aktiverad som standard och du kan hantera den med hjälp av inställningen pg_azure_storage.enable_copy_command .

Med hjälp av COPY kommandot kan du köra följande för att mata in användardata i payment_users tabellen:

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

En viktig skillnad att notera när du kör COPY kommandot med pg_azure_storage är att du inte kan ha en \ före COPY, och du måste avsluta raden med ett semikolon. Det här kravet beror på att COPY kommandot körs på koordinatornoden när tillägget används pg_azure_storage . Versionen \COPY används när du kör kommandot i psql klienten.

Utdata från COPY kommandot anger antalet rader som kopieras till tabellen, till exempel COPY 264197.