Sdílet prostřednictvím


rozšíření pg_azure_storage

PLATÍ PRO: Azure Cosmos DB for PostgreSQL (využívající rozšíření databáze Citus do PostgreSQL)

Rozšíření pg_azure_storage umožňuje načíst data ve více formátech souborů přímo z úložiště objektů blob v Azure do clusteru Azure Cosmos DB for PostgreSQL. Povolení rozšíření také odemkne nové funkce příkazu COPY . Kontejnery s úrovní přístupu Private nebo Blob vyžadují přidání privátního přístupového klíče.

Rozšíření můžete vytvořit spuštěním následujícího příkazu:

SELECT create_extension('azure_storage');

azure_storage.account_add

Funkce umožňuje přidat přístup k účtu úložiště.

azure_storage.account_add
        (account_name_p text
        ,account_key_p text);

Argumenty

account_name_p

Účet služby Azure Blob Storage (ABS) obsahuje všechny objekty ABS: objekty blob, soubory, fronty a tabulky. Účet úložiště poskytuje jedinečný obor názvů pro abs, který je přístupný odkudkoli na světě přes HTTPS.

account_key_p

Přístupové klíče služby Azure Blob Storage (ABS) se podobají kořenovému heslu vašeho účtu úložiště. Vždy buďte opatrní při ochraně přístupových klíčů. Pomocí služby Azure Key Vault můžete klíče bezpečně spravovat a otáčet. Klíč účtu je uložen v tabulce, která je přístupná superuživatelem postgres, azure_storage_admin a všem rolím uděleným těmto oprávněním správce. Pokud chcete zjistit, které účty úložiště existují, použijte funkci account_list.

azure_storage.account_remove

Funkce umožňuje odvolání přístupu k účtu úložiště.

azure_storage.account_remove
        (account_name_p text);

Argumenty

account_name_p

Účet služby Azure Blob Storage (ABS) obsahuje všechny objekty ABS: objekty blob, soubory, fronty a tabulky. Účet úložiště poskytuje jedinečný obor názvů pro abs, který je přístupný odkudkoli na světě přes HTTPS.

azure_storage.account_user_add

Tato funkce umožňuje přidat přístup pro roli k účtu úložiště.

azure_storage.account_user_add
        ( account_name_p text
        , user_p regrole);

Argumenty

account_name_p

Účet služby Azure Blob Storage (ABS) obsahuje všechny objekty ABS: objekty blob, soubory, fronty a tabulky. Účet úložiště poskytuje jedinečný obor názvů pro abs, který je přístupný odkudkoli na světě přes HTTPS.

user_p

Role vytvořená uživatelem viditelná v clusteru

Poznámka:

account_user_addaccount_removeaccount_user_remove Funkceaccount_add vyžadují nastavení oprávnění pro jednotlivé uzly v clusteru.

azure_storage.account_user_remove

Tato funkce umožňuje odebrat přístup pro roli k účtu úložiště.

azure_storage.account_user_remove
        (account_name_p text
        ,user_p regrole);

Argumenty

account_name_p

Účet služby Azure Blob Storage (ABS) obsahuje všechny objekty ABS: objekty blob, soubory, fronty a tabulky. Účet úložiště poskytuje jedinečný obor názvů pro abs, který je přístupný odkudkoli na světě přes HTTPS.

user_p

Role vytvořená uživatelem viditelná v clusteru

azure_storage.account_list

Tato funkce zobrazí seznam účtů a rolí, které mají přístup k úložišti objektů blob v Azure.

azure_storage.account_list
        (OUT account_name text
        ,OUT allowed_users regrole[]
        )
Returns TABLE;

Argumenty

account_name

Účet služby Azure Blob Storage (ABS) obsahuje všechny objekty ABS: objekty blob, soubory, fronty a tabulky. Účet úložiště poskytuje jedinečný obor názvů pro abs, který je přístupný odkudkoli na světě přes HTTPS.

allowed_users

Zobrazí seznam uživatelů, kteří mají přístup k úložišti objektů blob v Azure.

Návratový typ

TABULKA

azure_storage.blob_list

Funkce zobrazí seznam dostupných souborů objektů blob v kontejneru uživatele se svými vlastnostmi.

azure_storage.blob_list
        (account_name text
        ,container_name text
        ,prefix text DEFAULT ''::text
        ,OUT path text
        ,OUT bytes bigint
        ,OUT last_modified timestamp with time zone
        ,OUT etag text
        ,OUT content_type text
        ,OUT content_encoding text
        ,OUT content_hash text
        )
Returns SETOF record;

Argumenty

account_name

Poskytuje storage account name jedinečný obor názvů pro vaše data úložiště Azure, která jsou přístupná odkudkoli na světě přes HTTPS.

container_name

Kontejner slouží k uspořádání sady objektů blob podobně, jako se v systému souborů používají adresáře. Účet úložiště může zahrnovat neomezený počet kontejnerů a v každém kontejneru může být neomezený počet objektů blob. Název kontejneru musí být platný název DNS, protože je součástí jedinečného identifikátoru URI použitého k adresování kontejneru nebo jeho objektů blob. Při pojmenování kontejneru postupujte podle těchto pravidel:

  • Názvy kontejnerů můžou mít délku 3 až 63 znaků.
  • Názvy kontejnerů musí začínat písmenem nebo číslicí a mohou obsahovat pouze malá písmena, číslice a znak pomlčky (-).
  • V názvech kontejnerů nejsou povolené dva nebo více po sobě jdoucích pomlček.

Identifikátor URI kontejneru je podobný následujícímu: https://myaccount.blob.core.windows.net/mycontainer

předpona

Vrátí soubor z kontejneru objektů blob s odpovídajícími řetězcovými iniciály.

path

Úplná cesta k adresáři objektů blob Azure.

bajtů

Velikost objektu souboru v bajtech

last_modified

Kdy byl obsah souboru naposledy změněn.

etag

Vlastnost ETag se používá k optimistické souběžnosti během aktualizací. Nejedná se o časové razítko, protože existuje jiná vlastnost s názvem Timestamp, která ukládá čas poslední aktualizace záznamu. Pokud například načtete entitu a chcete ji aktualizovat, musí eTag odpovídat aktuálně uložené entitě. Nastavení příslušné značky ETag je důležité, protože pokud máte více uživatelů, kteří upravují stejnou položku, nechcete, aby přepsali změny ostatních uživatelů.

content_type

Objekt blob představuje objekt blob, což je objekt podobný souboru neměnných nezpracovaných dat. Dají se číst jako textová nebo binární data nebo je převést na ReadableStream, aby se jejich metody mohly použít ke zpracování dat. Objekty blob můžou představovat data, která nemusí být nutně v nativním javascriptovém formátu.

content_encoding

Azure Storage umožňuje definovat vlastnost Kódování obsahu v objektu blob. U komprimovaného obsahu můžete nastavit vlastnost na GZIP. Když prohlížeč přistupuje k obsahu, automaticky dekomprimuje obsah.

content_hash

Tato hodnota hash se používá k ověření integrity objektu blob během přenosu. Pokud je tato hlavička zadaná, služba úložiště zkontroluje hodnotu hash, která přišla s hodnotou, která byla odeslána. Pokud se dvě hodnoty hash neshoduje, operace selže s kódem chyby 400 (Chybný požadavek).

Návratový typ

SETOF – záznam

Poznámka:

Oprávnění teď můžete vypsat kontejnery nastavené na úrovně přístupu k privátním objektům a objektům blob pro toto úložiště, ale pouze jako kontejnery citus user, které mají přiřazenou azure_storage_admin roli. Pokud vytvoříte nového uživatele s názvem support, ve výchozím nastavení nebude mít povolený přístup k obsahu kontejneru.

azure_storage.blob_get

Funkce umožňuje načtení obsahu souborů \ souborů z kontejneru s přidanou podporou filtrování nebo manipulace s daty před importem.

azure_storage.blob_get
        (account_name text
        ,container_name text
        ,path text
        ,decoder text DEFAULT 'auto'::text
        ,compression text DEFAULT 'auto'::text
        ,options jsonb DEFAULT NULL::jsonb
        )
RETURNS SETOF record;

Existuje přetížená verze funkce, která obsahuje parametr rec, který umožňuje pohodlně definovat záznam výstupního formátu.

azure_storage.blob_get
        (account_name text
        ,container_name text
        ,path text
        ,rec anyelement
        ,decoder text DEFAULT 'auto'::text
        ,compression text DEFAULT 'auto'::text
        ,options jsonb DEFAULT NULL::jsonb
        )
RETURNS SETOF anyelement;

Argumenty

account

Účet úložiště poskytuje jedinečný obor názvů pro vaše data Azure Storage, která jsou přístupná odkudkoli na světě přes HTTPS.

kontejner

Kontejner slouží k uspořádání sady objektů blob podobně, jako se v systému souborů používají adresáře. Účet úložiště může zahrnovat neomezený počet kontejnerů a v každém kontejneru může být neomezený počet objektů blob. Název kontejneru musí být platný název DNS, protože je součástí jedinečného identifikátoru URI použitého k adresování kontejneru nebo jeho objektů blob.

path

Název objektu blob existující v kontejneru

Rec

Definujte výstupní strukturu záznamu.

dekodér

Určení dekodéru formátu objektu blob lze nastavit na automatické (výchozí) nebo na některou z následujících hodnot.

popis dekodéru

Formát Popis
csv Formát hodnot oddělených čárkami používaný nástrojem PostgreSQL COPY
tsv Hodnoty oddělené tabulátory, výchozí formát PostgreSQL COPY
binární Binární formát PostgreSQL COPY
text Soubor obsahující jednu textovou hodnotu (například velký JSON nebo XML)

komprese

Definuje formát komprese. Dostupné možnosti jsou auto, gzip & none. Použití možnosti (výchozí) auto uhodne kompresi na základě přípony souboru (.gz == gzip). Možnost none vynutí ignorovat rozšíření a nepokouší se dekódovat. I když gzip vynutí použití dekodéru gzip (pro kdy máte gzipped soubor s nestandardní příponou). V současné době nepodporujeme žádné jiné formáty komprese rozšíření.

options

Pro zpracování vlastních hlaviček, vlastních oddělovačů, řídicích znaků atd., options funguje podobně jako COPY příkaz v PostgreSQL parametr blob_get funkce.

Návratový typ

SETOF Record / anyelement

Poznámka:

V rámci blob_get existují čtyři utility funkce, které se nazývají jako parametr, které pomáhají vytvářet hodnoty pro něj. Každá funkce nástroje je určena pro dekodér odpovídající jeho názvu.

azure_storage.options_csv_get

Funkce funguje jako utility funkce volaná jako parametr v rámci blob_get, což je užitečné pro dekódování obsahu csv.

azure_storage.options_csv_get
        (delimiter text DEFAULT NULL::text
        ,null_string text DEFAULT NULL::text
        ,header boolean DEFAULT NULL::boolean
        ,quote text DEFAULT NULL::text
        ,escape text DEFAULT NULL::text
        ,force_not_null text[] DEFAULT NULL::text[]
        ,force_null text[] DEFAULT NULL::text[]
        ,content_encoding text DEFAULT NULL::text
        )
Returns jsonb;

Argumenty

oddělovač

Určuje znak, který odděluje sloupce v každém řádku (řádku) souboru. Výchozí hodnota je znak tabulátoru v textovém formátu, čárka ve formátu CSV. Musí to být jeden bajtový znak.

null_string

Určuje řetězec, který představuje hodnotu null. Výchozí hodnota je \N (zpětné lomítko-N) v textovém formátu a necitovaný prázdný řetězec ve formátu CSV. Prázdný řetězec můžete preferovat i v textovém formátu v případech, kdy nechcete rozlišovat hodnoty null od prázdných řetězců.

Určuje, že soubor obsahuje řádek záhlaví s názvy jednotlivých sloupců v souboru. Ve výstupu první řádek obsahuje názvy sloupců z tabulky.

citát

Určuje znak uvozování, který se má použít při uvozování datové hodnoty. Výchozí hodnota je dvojitá uvozovka. Musí to být jeden bajtový znak.

escape

Určuje znak, který se má zobrazit před datovým znakem, který odpovídá hodnotě QUOTE. Výchozí hodnota je stejná jako hodnota QUOTE (aby se znak uvozovek zdvojnásobil, pokud se zobrazí v datech). Musí to být jeden bajtový znak.

force_not_null

Neodpovídají hodnotám zadaných sloupců s řetězcem null. Ve výchozím případě, kdy je řetězec null prázdný, znamená to, že prázdné hodnoty se čtou jako řetězce nulové délky místo hodnot null, i když nejsou v uvozovácích.

force_null

Porovná hodnoty zadaných sloupců s řetězcem null, i když byl uvozován, a pokud je nalezena shoda, nastavte hodnotu na HODNOTU NULL. Ve výchozím případě, kdy je řetězec null prázdný, převede uvozovaný prázdný řetězec na hodnotu NULL.

content_encoding

Určuje, že soubor je kódován v encoding_name. Pokud je tato možnost vynechána, použije se aktuální kódování klienta.

Návratový typ

jsonb

azure_storage.options_copy

Funkce funguje jako utility funkce volaná jako parametr v rámci blob_get.

azure_storage.options_copy
        (delimiter text DEFAULT NULL::text
        ,null_string text DEFAULT NULL::text
        ,header boolean DEFAULT NULL::boolean
        ,quote text DEFAULT NULL::text
        ,escape text DEFAULT NULL::text
        ,force_quote text[] DEFAULT NULL::text[]
        ,force_not_null text[] DEFAULT NULL::text[]
        ,force_null text[] DEFAULT NULL::text[]
        ,content_encoding text DEFAULT NULL::text
        )
Returns jsonb;

Argumenty

oddělovač

Určuje znak, který odděluje sloupce v každém řádku (řádku) souboru. Výchozí hodnota je znak tabulátoru v textovém formátu, čárka ve formátu CSV. Musí to být jeden bajtový znak.

null_string

Určuje řetězec, který představuje hodnotu null. Výchozí hodnota je \N (zpětné lomítko-N) v textovém formátu a necitovaný prázdný řetězec ve formátu CSV. Prázdný řetězec můžete preferovat i v textovém formátu v případech, kdy nechcete rozlišovat hodnoty null od prázdných řetězců.

záhlaví

Určuje, že soubor obsahuje řádek záhlaví s názvy jednotlivých sloupců v souboru. Ve výstupu první řádek obsahuje názvy sloupců z tabulky.

citát

Určuje znak uvozování, který se má použít při uvozování datové hodnoty. Výchozí hodnota je dvojitá uvozovka. Musí to být jeden bajtový znak.

escape

Určuje znak, který se má zobrazit před datovým znakem, který odpovídá hodnotě QUOTE. Výchozí hodnota je stejná jako hodnota QUOTE (aby se znak uvozovek zdvojnásobil, pokud se zobrazí v datech). Musí to být jeden bajtový znak.

force_quote

Vynutí použití uvozování pro všechny hodnoty, které nejsou null v každém zadaném sloupci. Výstup NULL se nikdy neuvozuje. Pokud je zadána hodnota *, hodnoty, které nemají hodnotu NULL, se uvozují ve všech sloupcích.

force_not_null

Neodpovídají hodnotám zadaných sloupců s řetězcem null. Ve výchozím případě, kdy je řetězec null prázdný, znamená to, že prázdné hodnoty se čtou jako řetězce nulové délky místo hodnot null, i když nejsou v uvozovácích.

force_null

Porovná hodnoty zadaných sloupců s řetězcem null, i když byl uvozován, a pokud je nalezena shoda, nastavte hodnotu na HODNOTU NULL. Ve výchozím případě, kdy je řetězec null prázdný, převede uvozovaný prázdný řetězec na hodnotu NULL.

content_encoding

Určuje, že soubor je kódován v encoding_name. Pokud je tato možnost vynechána, použije se aktuální kódování klienta.

Návratový typ

jsonb

azure_storage.options_tsv

Funkce funguje jako utility funkce volaná jako parametr v rámci blob_get. Je užitečné pro dekódování obsahu tsv.

azure_storage.options_tsv
        (delimiter text DEFAULT NULL::text
        ,null_string text DEFAULT NULL::text
        ,content_encoding text DEFAULT NULL::text
        )
Returns jsonb;

Argumenty

oddělovač

Určuje znak, který odděluje sloupce v každém řádku (řádku) souboru. Výchozí hodnota je znak tabulátoru v textovém formátu, čárka ve formátu CSV. Musí to být jeden bajtový znak.

null_string

Určuje řetězec, který představuje hodnotu null. Výchozí hodnota je \N (zpětné lomítko-N) v textovém formátu a necitovaný prázdný řetězec ve formátu CSV. Prázdný řetězec můžete preferovat i v textovém formátu v případech, kdy nechcete rozlišovat hodnoty null od prázdných řetězců.

content_encoding

Určuje, že soubor je kódován v encoding_name. Pokud je tato možnost vynechána, použije se aktuální kódování klienta.

Návratový typ

jsonb

azure_storage.options_binary

Funkce funguje jako utility funkce volaná jako parametr v rámci blob_get. Je užitečné dekódovat binární obsah.

azure_storage.options_binary
        (content_encoding text DEFAULT NULL::text)
Returns jsonb;

Argumenty

content_encoding

Určuje, že soubor je kódován v encoding_name. Pokud tuto možnost vynecháte, použije se aktuální kódování klienta.

Návratový typ

jsonb

Poznámka:

Oprávnění teď můžete vypsat kontejnery nastavené na úrovně přístupu k privátním objektům a objektům blob pro toto úložiště, ale pouze jako kontejnery citus user, které mají přiřazenou azure_storage_admin roli. Pokud vytvoříte novou podporu pojmenovanou uživatelem, nebude mít ve výchozím nastavení povolený přístup k obsahu kontejneru.

Příklady

Použité příklady využívají ukázkový účet (pgquickstart) úložiště Azure s vlastními soubory nahranými k přidání pokrytí různých případů použití. Můžeme začít vytvořením tabulky použité v sadě použitých příkladů.

CREATE TABLE IF NOT EXISTS public.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
        );

Přidání přístupového klíče účtu úložiště (povinné pro úroveň přístupu = privátní)

Příklad znázorňuje přidání přístupového klíče pro účet úložiště pro získání přístupu k dotazování z relace v clusteru Azure Cosmos DB for Postgres.

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

Tip

V účtu úložiště otevřete přístupové klíče. Zkopírujte název účtu úložiště a zkopírujte klíč z oddílu key1 (musíte nejprve vybrat Zobrazit vedle klíče).

Snímek obrazovky části Zabezpečení a přístupové klíče sítě > na stránce Azure Blob Storage na webu Azure Portal

Odebrání přístupového klíče účtu úložiště

Příklad ukazuje odebrání přístupového klíče pro účet úložiště. Výsledkem této akce by bylo odebrání přístupu k souborům hostovaným v privátním kontejneru v kontejneru.

SELECT azure_storage.account_remove('pgquickstart');

Přidání přístupu pro roli do služby Azure Blob Storage

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

Výpis všech rolí s přístupem ve službě Azure Blob Storage

SELECT * FROM azure_storage.account_list();

Odebrání rolí s přístupem ke službě Azure Blob Storage

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

Výpis objektů v rámci kontejneru public

SELECT * FROM azure_storage.blob_list('pgquickstart','publiccontainer');

Výpis objektů v rámci kontejneru private

SELECT * FROM azure_storage.blob_list('pgquickstart','privatecontainer');

Poznámka:

Přidání přístupového klíče je povinné.

Výpis objektů s konkrétními řetězcovými iniciály v rámci veřejného kontejneru

SELECT * FROM azure_storage.blob_list('pgquickstart','publiccontainer','e');

Alternativně

SELECT * FROM azure_storage.blob_list('pgquickstart','publiccontainer') WHERE path LIKE 'e%';

Čtení obsahu z objektu v kontejneru

Funkce blob_get načte soubor z úložiště objektů blob. Pokud chcete blob_get vědět, jak analyzovat data, můžete předat hodnotu (NULL::table_name), která má stejný formát jako soubor.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events.csv.gz'
        , NULL::events)
LIMIT 5;

Alternativně můžeme explicitně definovat sloupce v FROM klauzuli.

SELECT * FROM azure_storage.blob_get('pgquickstart','publiccontainer','events.csv')
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;

Použití možnosti dekodéru

Příklad znázorňuje použití decoder možnosti. Obvykle se formát odvodí z přípony souboru, ale pokud obsah souboru nemá odpovídající příponu, můžete předat argument dekodéru.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events'
        , NULL::events
        , decoder := 'csv')
LIMIT 5;

Použití komprese s možností dekodéru

Příklad ukazuje, jak vynutit použití komprese gzip u komprimovaného souboru gzip bez standardního rozšíření .gz.

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events-compressed'
        , NULL::events
        , decoder := 'csv'
        , compression := 'gzip')
LIMIT 5;

Import filtrovaného obsahu a úpravy před načtením z objektu formátu CSV

Příklad ukazuje možnost filtrovat a upravit obsah importovaný z objektu v kontejneru před načtením do tabulky SQL.

SELECT concat('P-',event_id::text) FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events.csv'
        , NULL::events)
WHERE event_type='PushEvent'
LIMIT 5;

Dotazování obsahu ze souboru pomocí hlaviček, vlastních oddělovačů, řídicích znaků

Vlastní oddělovače a řídicí znaky můžete použít předáním výsledku azure_storage.options_copy argumentu options .

SELECT * FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events_pipe.csv'
        ,NULL::events
        ,options := azure_storage.options_csv_get(delimiter := '|' , header := 'true')
        );

Agregační dotaz na obsah objektu v kontejneru

Tímto způsobem můžete dotazovat data bez importu.

SELECT event_type,COUNT(1) FROM azure_storage.blob_get
        ('pgquickstart'
        ,'publiccontainer'
        ,'events.csv'
        , NULL::events)
GROUP BY event_type
ORDER BY 2 DESC
LIMIT 5;

Další kroky