Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Usługa Azure Cosmos DB for PostgreSQL nie jest już obsługiwana w przypadku nowych projektów. Nie używaj tej usługi dla nowych projektów. Zamiast tego użyj jednej z tych dwóch usług:
Użyj usługi Azure Cosmos DB for NoSQL dla rozproszonego rozwiązania bazy danych przeznaczonego dla scenariuszy o dużej skali z umową dotyczącą poziomu usług dostępności 99,999% (SLA), natychmiastowym skalowaniem automatycznym i automatycznym przejściem w tryb failover w wielu regionach.
Użyj funkcji Elastic Clusters usługi Azure Database for PostgreSQL na potrzeby fragmentowanej bazy danych PostgreSQL przy użyciu rozszerzenia Citus typu open source.
W tym artykule pokazano, jak używać rozszerzenia pg_azure_storage PostgreSQL do manipulowania danymi i ładowania ich do usługi Azure Cosmos DB for PostgreSQL bezpośrednio z usługi Azure Blob Storage (ABS). ABS to natywna dla chmury skalowalna, trwała i bezpieczna usługa przechowywania. Te cechy sprawiają, że dobrym wyborem jest przechowywanie i przenoszenie istniejących danych do chmury.
Przygotowywanie bazy danych i magazynu blobów
Aby załadować dane z usługi Azure Blob Storage, zainstaluj pg_azure_storage rozszerzenie PostgreSQL w bazie danych:
SELECT * FROM create_extension('azure_storage');
Ważne
Rozszerzenie pg_azure_storage jest dostępne tylko w klastrach Azure Cosmos DB obsługujących PostgreSQL w wersji 13 lub nowszej.
Przygotowaliśmy publiczny zestaw danych demonstracyjnych dla tego artykułu. Aby użyć własnego zestawu danych, postępuj zgodnie z poradnikiem dotyczącym migracji danych lokalnych do magazynu w chmurze, aby dowiedzieć się, jak efektywnie przenieść swoje zestawy danych do usługi Azure Blob Storage.
Uwaga
Wybranie opcji "Kontener (anonimowy dostęp do odczytu dla kontenerów i obiektów blob)" pozwoli na pobieranie plików z usługi Azure Blob Storage za pomocą ich publicznych adresów URL oraz przeglądanie zawartości kontenera bez potrzeby konfigurowania klucza konta w pg_azure_storage. Kontenery ustawione na poziom dostępu "Prywatny (bez dostępu anonimowego)" lub "Dostęp do obiektów blob (anonimowy dostęp tylko do odczytu dla obiektów blob)" będzie wymagał klucza dostępu.
Wyświetlanie zawartości kontenera
W tym poradniku dostępne jest wstępnie utworzone demonstracyjne konto usługi Azure Blob Storage oraz kontener. Nazwa kontenera to github, i znajduje się na koncie pgquickstart . Przy użyciu funkcji można łatwo zobaczyć, które pliki znajdują się w kontenerze azure_storage.blob_list(account, container) .
SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('pgquickstart','github');
-[ RECORD 1 ]--+-------------------
path | events.csv.gz
bytes | 41691786
pg_size_pretty | 40 MB
content_type | application/x-gzip
-[ RECORD 2 ]--+-------------------
path | users.csv.gz
bytes | 5382831
pg_size_pretty | 5257 kB
content_type | application/x-gzip
Dane wyjściowe można filtrować, używając regularnej klauzuli SQL WHERE lub parametru prefix funkcji zdefiniowanej przez użytkownika blob_list. Ten ostatni filtruje zwracane wiersze po stronie usługi Azure Blob Storage.
Uwaga
Wyświetlanie zawartości kontenera wymaga konta i klucza dostępu lub kontenera z włączonym dostępem anonimowym.
SELECT * FROM azure_storage.blob_list('pgquickstart','github','e');
-[ RECORD 1 ]----+---------------------------------
path | events.csv.gz
bytes | 41691786
last_modified | 2022-10-12 18:49:51+00
etag | 0x8DAAC828B970928
content_type | application/x-gzip
content_encoding |
content_hash | 473b6ad25b7c88ff6e0a628889466aed
SELECT *
FROM azure_storage.blob_list('pgquickstart','github')
WHERE path LIKE 'e%';
-[ RECORD 1 ]----+---------------------------------
path | events.csv.gz
bytes | 41691786
last_modified | 2022-10-12 18:49:51+00
etag | 0x8DAAC828B970928
content_type | application/x-gzip
content_encoding |
content_hash | 473b6ad25b7c88ff6e0a628889466aed
Ładowanie danych z ABS
Ładowanie danych za pomocą polecenia COPY
Zacznij od utworzenia przykładowego schematu.
CREATE TABLE github_users
(
user_id bigint,
url text,
login text,
avatar_url text,
gravatar_id text,
display_login text
);
CREATE TABLE github_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
);
CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
Ładowanie danych do tabel staje się tak proste, jak wywoływanie COPY polecenia.
-- download users and store in table
COPY github_users
FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz';
-- download events and store in table
COPY github_events
FROM 'https://pgquickstart.blob.core.windows.net/github/events.csv.gz';
Zwróć uwagę, że rozszerzenie rozpoznało, że adresy URL podane do polecenia kopiowania pochodzą z usługi Azure Blob Storage, pliki, które wskazaliśmy, zostały skompresowane za pomocą gzip i zostały również automatycznie obsłużone.
Polecenie COPY obsługuje więcej parametrów i formatów. W powyższym przykładzie format i kompresja zostały automatycznie wybrane na podstawie rozszerzeń plików. Można jednak podać format bezpośrednio podobny do zwykłego COPY polecenia.
COPY github_users
FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz'
WITH (FORMAT 'csv');
Obecnie rozszerzenie obsługuje następujące formaty plików:
| format | opis |
|---|---|
| CSV | Format wartości rozdzielanych przecinkami używany przez polecenie COPY w PostgreSQL. |
| tsv | Wartości rozdzielane tabulatorami, domyślny format KOPIOWANIA PostgreSQL |
| binarny | Format kopiowania danych binarnych PostgreSQL |
| SMS | Plik zawierający pojedynczą wartość tekstową (na przykład duży kod JSON lub XML) |
Ładowanie danych przy użyciu blob_get()
Polecenie COPY jest wygodne, ale ograniczone w elastyczności. Wewnętrznie COPY używa blob_get funkcji , której można użyć bezpośrednio do manipulowania danymi w bardziej złożonych scenariuszach.
SELECT *
FROM azure_storage.blob_get(
'pgquickstart', 'github',
'users.csv.gz', NULL::github_users
)
LIMIT 3;
-[ RECORD 1 ]-+--------------------------------------------
user_id | 21
url | https://api.github.com/users/technoweenie
login | technoweenie
avatar_url | https://avatars.githubusercontent.com/u/21?
gravatar_id |
display_login | technoweenie
-[ RECORD 2 ]-+--------------------------------------------
user_id | 22
url | https://api.github.com/users/macournoyer
login | macournoyer
avatar_url | https://avatars.githubusercontent.com/u/22?
gravatar_id |
display_login | macournoyer
-[ RECORD 3 ]-+--------------------------------------------
user_id | 38
url | https://api.github.com/users/atmos
login | atmos
avatar_url | https://avatars.githubusercontent.com/u/38?
gravatar_id |
display_login | atmos
Uwaga
W powyższym zapytaniu plik jest w pełni pobierany przed zastosowaniem LIMIT 3.
Dzięki tej funkcji można manipulować danymi na bieżąco w złożonych zapytaniach i importować je jako INSERT FROM SELECT.
INSERT INTO github_users
SELECT user_id, url, UPPER(login), avatar_url, gravatar_id, display_login
FROM azure_storage.blob_get('pgquickstart', 'github', 'users.csv.gz', NULL::github_users)
WHERE gravatar_id IS NOT NULL;
INSERT 0 264308
W powyższym poleceniu przefiltrowaliśmy dane dla kont, które mają gravatar_id, i na bieżąco zamieniliśmy ich loginy na wielkie litery.
Opcje blob_get()
W niektórych sytuacjach może być konieczne dokładne kontrolowanie działań blob_get, które próbujesz wykonać za pomocą parametrów decoder, compression i options.
Dekoder można ustawić na auto (wartość domyślna) lub dowolną z następujących wartości:
| format | opis |
|---|---|
| CSV | Format wartości rozdzielanych przecinkami używany przez polecenie COPY w PostgreSQL. |
| tsv | Wartości rozdzielane tabulatorami, domyślny format KOPIOWANIA PostgreSQL |
| binarny | Format kopiowania danych binarnych PostgreSQL |
| SMS | Plik zawierający pojedynczą wartość tekstową (na przykład duży kod JSON lub XML) |
compression może to być auto (wartość domyślna) none lub gzip.
options Na koniec parametr ma typ jsonb. Istnieją cztery funkcje użytkowe, które ułatwiają tworzenie wartości.
Każda funkcja narzędzia jest przeznaczona dla dekodera pasującego do jego nazwy.
| Dekoder | funkcja opcji |
|---|---|
| CSV | options_csv_get |
| tsv | options_tsv |
| binarny | options_binary |
| SMS | options_copy |
Patrząc na definicje funkcji, można zobaczyć, które parametry są obsługiwane przez dekoder.
options_csv_get — ogranicznik, null_string, nagłówek, cytat, ucieczka, force_not_null, force_null, content_encoding options_tsv — ogranicznik, null_string, content_encoding options_copy — ogranicznik, null_string, nagłówek, cudzysłów, ucieczka, force_quote, force_not_null, force_null, content_encoding.
options_binary - kodowanie_zawartości
Znając powyższe informacje, możemy odrzucić nagrania z wartością null gravatar_id podczas analizowania.
INSERT INTO github_users
SELECT user_id, url, UPPER(login), avatar_url, gravatar_id, display_login
FROM azure_storage.blob_get('pgquickstart', 'github', 'users.csv.gz', NULL::github_users,
options := azure_storage.options_csv_get(force_not_null := ARRAY['gravatar_id']));
INSERT 0 264308
Dostęp do magazynu prywatnego
Uzyskiwanie nazwy konta i klucza dostępu
Bez klucza dostępu nie będziemy mogli wyświetlać listy kontenerów ustawionych na poziomy dostępu prywatny lub blob.
SELECT * FROM azure_storage.blob_list('mystorageaccount','privdatasets');ERROR: azure_storage: missing account access key HINT: Use SELECT azure_storage.account_add('<account name>', '<access key>')Na koncie magazynu otwórz Klucze dostępu. Skopiuj nazwę konta magazynowego i skopiuj klucz z sekcji key1 (najpierw musisz wybrać opcję Pokaż obok klucza).
Dodawanie konta do pg_azure_storage
SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');Teraz możesz wyświetlić listę kontenerów o poziomie dostępu Private i Blob dla tego magazynu, ale tylko jako
citusużytkownik, któremu przydzielonoazure_storage_adminrolę. Jeśli utworzysz nowego użytkownika o nazwiesupport, domyślnie nie będzie on mógł uzyskiwać dostępu do zawartości kontenera.SELECT * FROM azure_storage.blob_list('pgabs','dataverse');ERROR: azure_storage: current user support is not allowed to use storage account pgabsZezwalanie użytkownikowi
supportna używanie określonego konta usługi Azure Blob StorageUdzielenie uprawnienia jest tak proste, jak wywołanie
account_user_add.SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');W danych wyjściowych
account_listwidzimy dozwolonych użytkowników, co pokazuje wszystkie konta z zdefiniowanymi kluczami dostępu.SELECT * FROM azure_storage.account_list();account_name | allowed_users ------------------+--------------- mystorageaccount | {support} (1 row)Jeśli kiedykolwiek zdecydujesz, że użytkownik nie powinien już mieć dostępu. Wystarczy wywołać
account_user_remove.SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');
Następne kroki
Gratulacje. Wiesz już, jak załadować dane do usługi Azure Cosmos DB for PostgreSQL bezpośrednio z usługi Azure Blob Storage.
- Dowiedz się, jak utworzyć pulpit nawigacyjny w czasie rzeczywistym za pomocą usługi Azure Cosmos DB for PostgreSQL.
- Dowiedz się więcej o pg_azure_storage.
- Dowiedz się więcej o obsłudze funkcji Postgres COPY.