Поделиться через


расширение служба хранилища Azure в База данных Azure для PostgreSQL — гибкий сервер

Область применения: гибкий сервер Базы данных Azure для PostgreSQL

Распространенный вариант использования для клиентов Майкрософт — возможность импортировать и экспортировать данные между Хранилище BLOB-объектов Azure и База данных Azure для PostgreSQL гибким экземпляром сервера. Расширение служба хранилища Azure (azure_storage) в База данных Azure для PostgreSQL гибком сервере упрощает этот вариант использования.

Хранилище BLOB-объектов Azure

Хранилище BLOB-объектов Azure — это решение для хранения объектов в облаке. Хранилище BLOB-объектов оптимизировано для хранения больших объемов неструктурированных данных. Неструктурированные данные — это данные, которые не соответствуют определенной модели данных или определению, например текстовых или двоичных данных.

Хранилище BLOB-объектов предлагает иерархию трех типов ресурсов:

  • Учетная запись хранения — это административная сущность, которая содержит службы для таких элементов, как большие двоичные объекты, файлы, очереди, таблицы или диски.

    При создании учетной записи хранения в Azure вы получаете уникальное пространство имен для ресурсов хранилища. Это уникальное пространство имен является частью URL-адреса. Имя учетной записи хранения должно быть уникальным для всех существующих имен учетных записей хранения в Azure.

  • Контейнер находится в учетной записи хранения. Контейнер похож на папку, в которой хранятся большие двоичные объекты.

    Вы можете определить политики безопасности и назначить политики контейнеру. Эти политики каскадно для всех больших двоичных объектов в контейнере.

    Учетная запись хранения может содержать неограниченное количество контейнеров. Каждый контейнер может содержать неограниченное количество больших двоичных объектов до максимального размера учетной записи хранения размером 500 ТБ.

    После размещения большого двоичного объекта в контейнер, который находится в учетной записи хранения, можно ссылаться на большой двоичный объект с помощью URL-адреса в следующем формате: protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>

  • Большой двоичный объект — это часть данных, которые находятся в контейнере.

На следующей схеме показана связь между этими ресурсами.

Схема, показывающая пример ресурсов хранилища.

Основные преимущества хранения данных в виде БОЛЬШИХ двоичных объектов в Хранилище BLOB-объектов Azure

Хранилище BLOB-объектов Azure могут обеспечить следующие преимущества:

  • Это масштабируемое и экономичное решение облачного хранилища. Вы можете использовать его для хранения данных любого размера и увеличения или уменьшения масштаба в зависимости от ваших потребностей.
  • Он предоставляет уровни безопасности для защиты данных, таких как шифрование неактивных и передаваемых данных.
  • Он взаимодействует с другими службами Azure и партнерскими приложениями. Это универсальное решение для широкого спектра вариантов использования, таких как резервное копирование и аварийное восстановление, архивация и анализ данных.
  • Это экономичное решение для управления и хранения больших объемов данных в облаке, независимо от того, является ли организация небольшим бизнесом или крупным предприятием. Вы платите только за необходимое хранилище.

Импорт данных из Хранилище BLOB-объектов Azure в гибкий сервер База данных Azure для PostgreSQL

Чтобы загрузить данные из Хранилище BLOB-объектов Azure, необходимо разрешить списокazure_storage расширения PostgreSQL. Затем вы устанавливаете расширение в базе данных с помощью CREATE EXTENSION команды:

 CREATE EXTENSION azure_storage;

При создании учетной записи хранения Azure создает два 512-разрядных ключа доступа к учетной записи хранения для этой учетной записи. Эти ключи можно использовать для авторизации доступа к данным в учетной записи хранения с помощью авторизации общего ключа.

Прежде чем импортировать данные, необходимо сопоставить учетную запись хранения с помощью account_add метода. Укажите ключ доступа к учетной записи, определенный при создании учетной записи. Следующий пример кода сопоставляет учетную запись mystorageaccount хранения и использует строку SECRET_ACCESS_KEY в качестве параметра ключа доступа:

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

После сопоставления хранилища можно перечислить содержимое учетной записи хранения и выбрать данные для импорта. В следующем примере предполагается, что вы создали учетную запись хранения с именем mystorageaccount и контейнер BLOB-объектов с именем mytestblob:

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

Выходные данные этой инструкции можно отфильтровать с помощью регулярного SQL WHEREblob_list предложения или prefix параметра метода. Для перечисления содержимого контейнера требуется ключ учетной записи и доступа или контейнер с включенным анонимным доступом.

Наконец, можно использовать инструкцию COPY или blob_get функцию для импорта данных из Хранилище BLOB-объектов Azure в существующую База данных Azure для PostgreSQL гибкую таблицу сервера.

Импорт данных с помощью инструкции COPY

В следующем примере показано импорт данных из файла employee.csv , который находится в контейнере mytestblob BLOB-объектов в той же mystorageaccount учетной записи хранения Azure с помощью COPY команды:

  1. Создайте целевую таблицу, которая соответствует схеме исходного файла:

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. Используйте инструкцию для копирования данных в целевую COPY таблицу. Укажите, что первая строка — заголовки.

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

Импорт данных с помощью функции blob_get

Функция blob_get извлекает файл из хранилища BLOB-объектов. Чтобы убедиться, что blob_get данные можно проанализировать, можно передать значение с типом, соответствующим столбцам в файле, или явно определить столбцы в предложении FROM .

Функцию blob_get можно использовать в следующем формате:

azure_storage.blob_get(account_name, container_name, path)

В следующем примере показано то же действие из одного источника в тот же целевой объект с помощью blob_get функции:

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

Команда COPY и blob_get функция поддерживают следующие расширения файлов для импорта:

File format Description
.csv Формат разделенных запятыми значений, используемый PostgreSQL COPY
.tsv Значения, разделенные табуляции, формат PostgreSQL COPY по умолчанию
binary Формат Binary PostgreSQL COPY
text Файл, содержащий одно текстовое значение (например, большой json или XML)

Экспорт данных из гибкого сервера База данных Azure для PostgreSQL в Хранилище BLOB-объектов Azure

Чтобы экспортировать данные из гибкого сервера База данных Azure для PostgreSQL в Хранилище BLOB-объектов Azure, необходимо разрешить список расширенийazure_storage. Затем вы устанавливаете azure_storage расширение PostgreSQL в базе данных с помощью CREATE EXTENSION команды:

CREATE EXTENSION azure_storage;

При создании учетной записи хранения платформа Azure создает два 512-разрядных ключа доступа к учетной записи хранения для этой учетной записи. Эти ключи можно использовать для авторизации доступа к данным в учетной записи хранения с помощью авторизации общего ключа или маркеров подписанного URL-адреса (SAS), подписанных общим ключом.

Прежде чем импортировать данные, необходимо сопоставить учетную запись хранения с помощью account_add метода. Укажите ключ доступа к учетной записи, определенный при создании учетной записи. Следующий пример кода сопоставляет учетную запись mystorageaccount хранения и использует строку SECRET_ACCESS_KEY в качестве параметра ключа доступа:

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

Инструкцию COPY или blob_put функцию можно использовать для экспорта данных из таблицы База данных Azure для PostgreSQL в Хранилище BLOB-объектов Azure. В следующем примере показано экспорт данных из таблицы сотрудников в новый файл с именем employee2.csv с помощью COPY команды. Файл находится в контейнере mytestblob BLOB-объектов в той же mystorageaccount учетной записи хранения Azure.

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

Аналогичным образом можно экспортировать данные из таблицы сотрудников с помощью blob_put функции, что обеспечивает еще более ограниченный контроль над экспортируемыми данными. В следующем примере экспортируются только два столбца таблицы и EmployeeIdLastName. Он пропускает FirstName столбец.

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

Команда COPY и blob_put функция поддерживают следующие расширения файлов для экспорта:

File format Description
.csv Формат разделенных запятыми значений, используемый PostgreSQL COPY
.tsv Значения, разделенные табуляции, формат PostgreSQL COPY по умолчанию
binary Формат Binary PostgreSQL COPY
text Файл, содержащий одно текстовое значение (например, большой json или XML)

Вывод списка объектов в служба хранилища Azure

Чтобы перечислить объекты в Хранилище BLOB-объектов Azure, необходимо разрешить список расширенийazure_storage. Затем вы устанавливаете azure_storage расширение PostgreSQL в базе данных с помощью CREATE EXTENSION команды:

CREATE EXTENSION azure_storage;

При создании учетной записи хранения платформа Azure создает два 512-разрядных ключа доступа к учетной записи хранения для этой учетной записи. Эти ключи можно использовать для авторизации доступа к данным в учетной записи хранения с помощью авторизации общего ключа или маркеров SAS, подписанных общим ключом.

Прежде чем импортировать данные, необходимо сопоставить учетную запись хранения с помощью account_add метода. Укажите ключ доступа к учетной записи, определенный при создании учетной записи. Следующий пример кода сопоставляет учетную запись mystorageaccount хранения и использует строку SECRET_ACCESS_KEY в качестве параметра ключа доступа:

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

Расширение служба хранилища Azure предоставляет blob_list метод. Этот метод можно использовать для перечисления объектов в хранилище BLOB-объектов в следующем формате:

azure_storage.blob_list(account_name, container_name, prefix)

В следующем примере показаны объекты перечисления в служба хранилища Azure с помощью blob_list метода из учетной записи хранения с именем mystorageaccount и контейнером mytestbobBLOB-объектов. Файлы в контейнере имеют строку employee.

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

Назначение разрешений неадминистративной учетной записи для доступа к данным из служба хранилища Azure

По умолчанию только роль администратора azure_pg_admin может добавить ключ учетной записи и получить доступ к учетной записи хранения в База данных Azure для PostgreSQL гибком сервере.

Вы можете предоставить разрешения на доступ к данным в служба хранилища Azure неадминистрационным База данных Azure для PostgreSQL гибким пользователям сервера двумя способами в зависимости от детализации разрешений:

  • Назначьте azure_storage_admin неадминистраторному пользователю. Эта роль добавляется с установкой расширения служба хранилища Azure. В следующем примере эта роль предоставляется supportнеадминистраторному пользователю:

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • Вызовите функцию account_user_add. В следующем примере добавляются разрешения на роль support в База данных Azure для PostgreSQL гибком сервере. Это более ограниченное разрешение, так как оно предоставляет пользователю доступ только к учетной записи хранения Azure с именем mystorageaccount.

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

Администраторы База данных Azure для PostgreSQL гибкого сервера могут получить список учетных записей хранения и разрешений в выходных данных account_list функции. Эта функция отображает все учетные записи с определенными ключами доступа.

SELECT * FROM azure_storage.account_list();

Когда администратор гибкого сервера База данных Azure для PostgreSQL решает, что у пользователя больше нет доступа, администратор может использовать account_user_remove метод или функцию для удаления этого доступа. В следующем примере роль support удаляется из доступа к учетной записи mystorageaccountхранения:

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

Следующие шаги

  • Если вы не видите расширение, которое вы хотите использовать, сообщите нам об этом. Вы можете проголосовать за существующие запросы или оставить свои предложения на нашем форуме отзывов.