Rozszerzenie usługi Azure Storage w usłudze Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Typowym przypadkiem użycia dla klientów firmy Microsoft jest możliwość importowania i eksportowania danych między usługą Azure Blob Storage a elastycznym wystąpieniem serwera usługi Azure Database for PostgreSQL. Rozszerzenie usługi Azure Storage (azure_storage) na serwerze elastycznym usługi Azure Database for PostgreSQL upraszcza ten przypadek użycia.

Azure Blob Storage

Usługa Azure Blob Storage to rozwiązanie do magazynowania obiektów w chmurze. Usługa Blob Storage jest zoptymalizowana pod kątem przechowywania ogromnych ilości danych bez struktury. Dane bez struktury są danymi, które nie są zgodne z żadnym modelem lub definicją danych, jak na przykład dane tekstowe lub binarne.

Usługa Blob Storage oferuje hierarchię trzech typów zasobów:

  • Konto magazynu to jednostka administracyjna, która przechowuje usługi dla elementów, takich jak obiekty blob, pliki, kolejki, tabele lub dyski.

    Podczas tworzenia konta magazynu na platformie Azure uzyskujesz unikatową przestrzeń nazw dla zasobów magazynu. Ta unikatowa przestrzeń nazw stanowi część adresu URL. Nazwa konta magazynu powinna być unikatowa we wszystkich istniejących nazwach kont magazynu na platformie Azure.

  • Kontener znajduje się wewnątrz konta magazynu. Kontener jest jak folder, w którym są przechowywane obiekty blob.

    Możesz zdefiniować zasady zabezpieczeń i przypisać zasady do kontenera. Te zasady są kaskadowe dla wszystkich obiektów blob w kontenerze.

    Konto magazynu może zawierać nieograniczoną liczbę kontenerów. Każdy kontener może zawierać nieograniczoną liczbę obiektów blob, maksymalnie maksymalnie 500 TB.

    Po umieściniu obiektu blob w kontenerze, który znajduje się wewnątrz konta magazynu, możesz odwołać się do obiektu blob przy użyciu adresu URL w tym formacie: protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>.

  • Obiekt blob to kawałek danych znajdujących się w kontenerze.

Na poniższym diagramie przedstawiono relacje między tymi zasobami.

Diagram przedstawiający przykład zasobów magazynu.

Najważniejsze korzyści wynikające z przechowywania danych jako obiektów blob w usłudze Azure Blob Storage

Usługa Azure Blob Storage może zapewnić następujące korzyści:

  • Jest to skalowalne i ekonomiczne rozwiązanie magazynu w chmurze. Służy do przechowywania danych o dowolnym rozmiarze i skalowaniu w górę lub w dół w zależności od potrzeb.
  • Zapewnia ona warstwy zabezpieczeń, które ułatwiają ochronę danych, takich jak szyfrowanie magazynowane i przesyłane.
  • Komunikuje się z innymi usługami platformy Azure i aplikacjami partnerskimi. Jest to uniwersalne rozwiązanie dla szerokiego zakresu przypadków użycia, takich jak tworzenie kopii zapasowych i odzyskiwanie po awarii, archiwizowanie i analiza danych.
  • Jest to ekonomiczne rozwiązanie do zarządzania i przechowywania ogromnych ilości danych w chmurze, niezależnie od tego, czy organizacja jest małą firmą, czy dużym przedsiębiorstwem. Płacisz tylko za potrzebny magazyn.

Importowanie danych z usługi Azure Blob Storage do serwera elastycznego usługi Azure Database for PostgreSQL

Aby załadować dane z usługi Azure Blob Storage, musisz włączyć rozszerzenie PostgreSQL na liście dozwolonych azure_storage . Następnie zainstaluj rozszerzenie w bazie danych przy użyciu CREATE EXTENSION polecenia :

 CREATE EXTENSION azure_storage;

Podczas tworzenia konta magazynu platforma Azure generuje dla tego konta dwa 512-bitowe klucze dostępu do konta magazynu. Za pomocą tych kluczy możesz autoryzować dostęp do danych na koncie magazynu za pośrednictwem autoryzacji klucza współużytkowanego.

Zanim będzie można zaimportować dane, musisz zamapować konto magazynu przy użyciu account_add metody . Podaj klucz dostępu do konta, który został zdefiniowany podczas tworzenia konta. Poniższy przykład kodu mapuje konto mystorageaccount magazynu i używa ciągu SECRET_ACCESS_KEY jako parametru klucza dostępu:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Po zamapowania magazynu możesz wyświetlić listę zawartości konta magazynu i wybrać dane do zaimportowania. W poniższym przykładzie przyjęto założenie, że utworzono konto magazynu o nazwie i kontener obiektów blob o nazwie mystorageaccountmytestblob:

SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('mystorageaccount','mytestblob'); 

Dane wyjściowe tej instrukcji można filtrować przy użyciu klauzuli regularnej SQL WHERE lub prefix parametru blob_list metody. Wyświetlanie zawartości kontenera wymaga konta i klucza dostępu lub kontenera z włączonym dostępem anonimowym.

Na koniec możesz użyć instrukcji COPY lub blob_get funkcji, aby zaimportować dane z usługi Azure Blob Storage do istniejącej elastycznej tabeli serwerów usługi Azure Database for PostgreSQL.

Importowanie danych przy użyciu instrukcji COPY

W poniższym przykładzie pokazano importowanie danych z pliku employee.csv znajdującego się w kontenerze mytestblob obiektów blob na tym samym mystorageaccount koncie usługi Azure Storage za pomocą COPY polecenia :

  1. Utwórz tabelę docelową zgodną ze schematem pliku źródłowego:

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. COPY Użyj instrukcji , aby skopiować dane do tabeli docelowej. Określ, że pierwszy wiersz to nagłówki.

    COPY employees
    FROM 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee.csv'
    WITH (FORMAT 'csv', header);
    

Importowanie danych przy użyciu funkcji blob_get

Funkcja blob_get pobiera plik z usługi Blob Storage. Aby upewnić się, że blob_get można przeanalizować dane, możesz przekazać wartość z typem odpowiadającym kolumnom w pliku lub jawnie zdefiniować kolumny w klauzuli FROM .

Możesz użyć blob_get funkcji w następującym formacie:

azure_storage.blob_get(account_name, container_name, path)

W następnym przykładzie pokazano tę samą akcję z tego samego źródła do tego samego obiektu docelowego przy użyciu blob_get funkcji :

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))

Polecenie COPY i blob_get funkcja obsługują następujące rozszerzenia plików do importowania:

File format opis
.Csv Format wartości rozdzielanych przecinkami używany przez usługę PostgreSQL COPY
.Tsv Wartości rozdzielane tabulatorami, domyślny format bazy danych PostgreSQL COPY
dane binarne Format binarnej bazy danych PostgreSQL COPY
text Plik zawierający pojedynczą wartość tekstową (na przykład duży kod JSON lub XML)

Eksportowanie danych z elastycznego serwera usługi Azure Database for PostgreSQL do usługi Azure Blob Storage

Aby wyeksportować dane z serwera elastycznego usługi Azure Database for PostgreSQL do usługi Azure Blob Storage, musisz zezwolić na azure_storage listę rozszerzeń. Następnie zainstaluj azure_storage rozszerzenie PostgreSQL w bazie danych przy użyciu CREATE EXTENSION polecenia :

CREATE EXTENSION azure_storage;

Podczas tworzenia konta magazynu platforma Azure generuje dla tego konta dwa 512-bitowe klucze dostępu do konta magazynu. Za pomocą tych kluczy można autoryzować dostęp do danych na koncie magazynu za pośrednictwem autoryzacji klucza współużytkowanego lub tokenów sygnatury dostępu współdzielonego (SAS), które są podpisane za pomocą klucza współdzielonego.

Zanim będzie można zaimportować dane, musisz zamapować konto magazynu przy użyciu account_add metody . Podaj klucz dostępu do konta, który został zdefiniowany podczas tworzenia konta. Poniższy przykład kodu mapuje konto mystorageaccount magazynu i używa ciągu SECRET_ACCESS_KEY jako parametru klucza dostępu:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Możesz użyć instrukcji COPY lub blob_put funkcji, aby wyeksportować dane z tabeli usługi Azure Database for PostgreSQL do usługi Azure Blob Storage. W poniższym przykładzie pokazano eksportowanie danych z tabeli pracowników do nowego pliku o nazwie employee2.csv za pomocą COPY polecenia . Plik znajduje się w kontenerze mytestblob obiektów blob na tym samym mystorageaccount koncie usługi Azure Storage.

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

Podobnie możesz wyeksportować dane z tabeli pracowników za pośrednictwem blob_put funkcji, co zapewnia jeszcze większą kontrolę nad wyeksportowanych danych. Poniższy przykład eksportuje tylko dwie kolumny tabeli EmployeeId i LastName. Pomija kolumnę FirstName .

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

Polecenie COPY i blob_put funkcja obsługują następujące rozszerzenia plików do eksportowania:

File format opis
.Csv Format wartości rozdzielanych przecinkami używany przez usługę PostgreSQL COPY
.Tsv Wartości rozdzielane tabulatorami, domyślny format bazy danych PostgreSQL COPY
dane binarne Format binarnej bazy danych PostgreSQL COPY
text Plik zawierający pojedynczą wartość tekstową (na przykład duży kod JSON lub XML)

Wyświetlanie listy obiektów w usłudze Azure Storage

Aby wyświetlić listę obiektów w usłudze Azure Blob Storage, musisz zezwolić na azure_storage listę rozszerzeń. Następnie zainstaluj azure_storage rozszerzenie PostgreSQL w bazie danych przy użyciu CREATE EXTENSION polecenia :

CREATE EXTENSION azure_storage;

Podczas tworzenia konta magazynu platforma Azure generuje dla tego konta dwa 512-bitowe klucze dostępu do konta magazynu. Za pomocą tych kluczy można autoryzować dostęp do danych na koncie magazynu za pośrednictwem autoryzacji klucza współużytkowanego lub tokenów SAS podpisanych przy użyciu klucza współużytkowanego.

Zanim będzie można zaimportować dane, musisz zamapować konto magazynu przy użyciu account_add metody . Podaj klucz dostępu do konta, który został zdefiniowany podczas tworzenia konta. Poniższy przykład kodu mapuje konto mystorageaccount magazynu i używa ciągu SECRET_ACCESS_KEY jako parametru klucza dostępu:

SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');

Rozszerzenie usługi Azure Storage udostępnia metodę blob_list . Za pomocą tej metody można wyświetlić listę obiektów w usłudze Blob Storage w następującym formacie:

azure_storage.blob_list(account_name, container_name, prefix)

Poniższy przykład przedstawia wyświetlanie listy obiektów w usłudze Azure Storage przy użyciu metody z blob_list konta magazynu o nazwie i kontenera obiektów blob o nazwie mystorageaccountmytestbob. Pliki w kontenerze mają ciąg employee.

SELECT path, size, last_modified, etag FROM azure_storage.blob_list('mystorageaccount','mytestblob','employee');

Przypisywanie uprawnień do konta nieadministracyjnego w celu uzyskania dostępu do danych z usługi Azure Storage

Domyślnie tylko rola administracyjna azure_pg_admin może dodać klucz konta i uzyskać dostęp do konta magazynu na serwerze elastycznym usługi Azure Database for PostgreSQL.

Uprawnienia dostępu do danych w usłudze Azure Storage można przyznać użytkownikom elastycznym usługi Azure Database for PostgreSQL na dwa sposoby, w zależności od stopnia szczegółowości uprawnień:

  • Przypisz azure_storage_admin do użytkownika niebędącego administratorem. Ta rola jest dodawana wraz z instalacją rozszerzenia usługi Azure Storage. W poniższym przykładzie ta rola jest przyznawana użytkownikowi nieadministracyjnemu o nazwie support:

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • Wywołaj funkcję account_user_add. Poniższy przykład dodaje uprawnienia do roli support na serwerze elastycznym usługi Azure Database for PostgreSQL. Jest to bardziej ograniczone uprawnienie, ponieważ zapewnia użytkownikowi dostęp tylko do konta usługi Azure Storage o nazwie mystorageaccount.

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

Administracja istracyjny użytkownicy serwera elastycznego usługi Azure Database for PostgreSQL mogą uzyskać listę kont magazynu i uprawnień w danych wyjściowych account_list funkcji. Ta funkcja przedstawia wszystkie konta z zdefiniowanymi kluczami dostępu.

SELECT * FROM azure_storage.account_list();

Gdy administrator serwera elastycznego usługi Azure Database for PostgreSQL zdecyduje, że użytkownik nie powinien już mieć dostępu, administrator może użyć account_user_remove metody lub funkcji w celu usunięcia tego dostępu. Poniższy przykład usuwa rolę support z dostępu do konta mystorageaccountmagazynu :

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

Następne kroki

  • Jeśli nie widzisz rozszerzenia, którego chcesz użyć, daj nam znać. Zagłosuj na istniejące żądania lub utwórz nowe żądania opinii na naszym forum opinii.