Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Här följer en lista med exempel som hjälper dig att lära dig hur du använder Azure Storage-tillägget.
Skapa ett Azure Storage-konto och fyll i det med data
- skapa ett Azure Storage-konto
Om du inte redan har ett Azure Storage-konto anpassar du värdena
<resource_group>för ,<location>,<account_name>och och<container_name>kör följande Azure CLI-kommando: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 - Skapa en blobcontainer.
Kör följande Azure CLI för att skapa blobcontainern:
az storage container create --account-name $storage_account --name $blob_container -o tsv - Hämta en av de två åtkomstnycklar som tilldelats lagringskontot. Kontrollera att du kopierar värdet för din access_key eftersom du behöver skicka det som ett argument till azure_storage.account_add i ett efterföljande steg.
Om du vill hämta den första av de två åtkomstnycklarna kör du följande Azure CLI-kommando:
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 - Ladda ned filen med datauppsättningen som används under exemplen och ladda upp den till din blobcontainer.
Om du vill ladda ned filen med datauppsättningen kör du följande Azure CLI-kommando:
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
Anmärkning
Du kan visa containrar eller blobar som lagras i dem för ett visst lagringskonto, men bara om din PostgreSQL-användare eller roll beviljas behörighet för referensen till lagringskontot med hjälp av azure_storage.account_user_add. Medlemmar i rollen beviljas den här behörigheten azure_storage_admin för alla Azure Storage-konton som har lagts till med hjälp av azure_storage.account_add. Som standard beviljas endast medlemmar azure_pg_admin i azure_storage_admin rollen.
Skapa en tabell där data läses in
Nu ska vi skapa tabellen där vi importerar innehållet i CSV-filen som vi laddade upp till lagringskontot. Det gör du genom att ansluta till din instans av Azure Database for PostgreSQL– flexibel server med hjälp av PgAdmin, psqleller klienten som du föredrar, och köra följande instruktion:
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
);
Förbereda tillägget för användning
Innan du fortsätter kontrollerar du att du:
Lägga till åtkomstnyckel för lagringskonto
Det här exemplet illustrerar hur du lägger till en referens till ett lagringskonto, tillsammans med åtkomstnyckeln för det lagringskonto som krävs för att få åtkomst till dess innehåll via de funktioner som tillhandahålls av azure_storage tillägget i din instans av Azure Database for PostgreSQL – flexibel server.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<access_key> På samma sätt måste anges till det värde som du hämtade från ditt lagringskonto.
SELECT azure_storage.account_add('<account_name>', '<access_key>');
Tips/Råd
Om du vill hämta lagringskontots namn och en av dess åtkomstnycklar från Azure-portalen söker du efter ditt lagringskonto. På resursmenyn väljer du Åtkomstnycklar, kopierar lagringskontots namn och kopierar avsnittet Nyckel från key1 (du måste välja Visa bredvid nyckeln först).
Bevilja åtkomst till en användare eller roll i Azure Blob Storage-referensen
Det här exemplet visar hur du beviljar åtkomst till en användare eller roll med namnet <regular_user>, så att en sådan PostgreSQL-användare kan använda azure_storage tillägget för att komma åt blobarna som lagras i containrar som hanteras av det refererade Azure Storage-kontot.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<regular_user> måste anges till namnet på en befintlig användare eller roll.
SELECT * FROM azure_storage.account_user_add('<account_name>', '<regular_user>');
Visa en lista över alla blobar i en container
Det här exemplet visar hur du listar alla befintliga blobar i containern <container_name> för lagringskontot <account_name>.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>');
Lista blobar med ett specifikt namnprefix
Det här exemplet visar hur du listar alla befintliga blobar i containern <container_name> för lagringskontot <account_name>, vars blobnamn börjar med <blob_name_prefix>.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
<blob_name_prefix> ska anges till det prefix som du vill att blobarna ska innehålla i deras namn. Om du vill returnera alla blobar kan du ange den här parametern till en tom sträng eller inte ens ange ett värde för den här parametern, i vilket fall värdet som standard är en tom sträng.
SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>','<blob_name_prefix>');
Du kan också använda följande syntax:
SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>') WHERE path LIKE '<blob_name_prefix>%';
Importera data med en COPY FROM-instruktion
I följande exempel visas importen av data från en blob med namnet events.csv som finns i blobcontainern <container_name> i Azure Storage-kontot <account_name>via COPY kommandot :
Skapa en tabell som matchar källfilens schema:
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 );Använd en
COPYinstruktion för att kopiera data till måltabellen. Ange att den första raden innehåller kolumnrubriker.COPY events FROM 'https://<account_name>.blob.core.windows.net/<container_name>/events.csv' WITH (FORMAT 'csv', header);Kör följande
SELECTinstruktion för att bekräfta att data läses in i tabellen.SELECT * FROM events LIMIT 100;
Exportera data med en COPY TO-instruktion
I följande exempel visas exporten av data från en tabell med namnet events, till en blob med namnet events_exported.csv som finns i blobcontainern <container_name> i Azure Storage-kontot <account_name>, via COPY kommandot :
Skapa en tabell som matchar källfilens schema:
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 );Läs in data i tabellen. Kör antingen INSERT-instruktioner för att fylla den med flera syntetiska rader eller använd importdata med hjälp av ett COPY FROM-instruktionsexempel för att fylla i dem med innehållet i exempeldatauppsättningen.
Använd en
COPYinstruktion för att kopiera data till måltabellen. Ange att den första raden innehåller kolumnrubriker.COPY events TO 'https://<account_name>.blob.core.windows.net/<container_name>/events_exported.csv' WITH (FORMAT 'csv', header);Kör följande
SELECTinstruktion för att bekräfta att bloben finns i lagringskontot.SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>') WHERE path = 'events_exported.csv';
Läsa innehåll från en blob
Funktionen blob_get hämtar innehållet i en specifik blob (events.csv i det här fallet) i den refererade containern <container_name> för lagringen <account_name> . För att veta blob_get hur du parsar data kan du skicka ett värde i formuläret NULL::table_name, där table_name refererar till en tabell vars schema matchar den blob som läse. I exemplet refererar det till tabellen events som vi skapade i början.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
<blob_name> ska anges till den fullständiga sökvägen för den blob vars innehåll du vill läsa.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'events.csv'
, NULL::events)
LIMIT 5;
Du kan också uttryckligen definiera schemat för resultatet med hjälp AS av -satsen efter funktionen blob_get .
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;
Läsa, filtrera och ändra innehåll som lästs från en blob
Det här exemplet illustrerar möjligheten att filtrera och ändra innehållet som importerats från blobben innan det läses in i en SQL-tabell.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
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;
Läsa innehåll från en fil med anpassade alternativ (rubriker, kolumnavgränsare, escape-tecken)
Det här exemplet illustrerar hur du kan använda anpassade avgränsare och escape-tecken genom att skicka resultatet av options_copy till options argumentet.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'events_pipe.csv'
,NULL::events
,options := azure_storage.options_csv_get(delimiter := '|' , header := 'true')
);
Använd avkodningsalternativet
Det här exemplet illustrerar användningen av decoder alternativet. Normalt härleds formatet från filnamnstillägget, men när filinnehållet inte har något matchande tillägg kan du skicka avkodarargumentet.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'events_blob_without_extension'
, NULL::events
, decoder := 'csv')
LIMIT 5;
Använda komprimering med avkodningsalternativet
Det här exemplet visar hur du framtvingar användning av gzip-komprimering på en gzip-komprimerad blob vars namn inte slutar med ett .gz-tillägg.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'events_compressed'
, NULL::events
, decoder := 'csv'
, compression := 'gzip')
LIMIT 5;
Beräkningsaggregeringar över innehållet i en blob
Det här exemplet illustrerar hur du kan utföra aggregeringsåtgärder över information som lagras i en blobcontainer, utan att behöva importera innehållet i bloben till PostgreSQL-tabeller.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
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;
Skriva innehåll till en blob
Funktionen blob_put består av innehållet i en specifik blob (eventscopy.csv i det här fallet) och laddar upp den till den refererade containern <container_name> för lagringen <account_name> . I det här exemplet används blob_get för att skapa en uppsättning med fem rader, som sedan skickas till den blob_put mängdfunktion som överför dem som en blob med namnet eventscopy.csv.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<container_name> måste anges till namnet på blobcontainern. Om du använde föregående skript ska det här värdet matcha det värde som du har angett till blob_container miljövariabeln i dessa skript.
SELECT azure_storage.blob_put
('<account_name>'
,'<container_name>'
,'eventscopy.csv'
, top_5_events)
FROM (SELECT * FROM events) LIMIT 5) AS top_5_events;
Visa en lista över alla referenser till Azure Storage-konton
Det här exemplet visar hur du tar reda på vilka Azure-lagringskonton azure_storage tillägget kan referera till i den här databasen, tillsammans med den typ av autentisering som används för att komma åt varje lagringskonto och vilka användare eller roller som beviljas behörighet, via funktionen azure_storage.account_user_add , för att få åtkomst till azure-lagringskontot via de funktioner som tillhandahålls av tillägget.
SELECT * FROM azure_storage.account_list();
Återkalla åtkomst från en användare eller roll i Azure Blob Storage-referensen
Det här exemplet visar hur du återkallar åtkomst från en användare eller roll med namnet <regular_user>, så att en sådan PostgreSQL-användare inte kan använda azure_storage tillägget för att komma åt blobarna som lagras i containrar som hanteras av det refererade Azure-lagringskontot.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
<regular_user> måste anges till namnet på en befintlig användare eller roll.
SELECT * FROM azure_storage.account_user_remove('<account_name>', '<regular_user>');
Ta bort referens till lagringskonto
Det här exemplet visar hur du tar bort alla referenser till ett lagringskonto, så att ingen användare i den aktuella databasen kan använda tilläggsfunktionen azure_storage för att komma åt lagringskontot.
<account_name> måste anges till namnet på ditt lagringskonto. Om du använde föregående skript bör det här värdet matcha det värde som du har angett till storage_account miljövariabeln i dessa skript.
SELECT azure_storage.account_remove('<account_name>');