Share via


Extensión de Azure Storage en Azure Database for PostgreSQL: Servidor flexible

SE APLICA A: Azure Database for PostgreSQL: servidor flexible

Un caso de uso común para los clientes de Microsoft es la capacidad de importar y exportar datos entre Azure Blob Storage y una instancia de servidor flexible de Azure Database for PostgreSQL. La extensión de Azure Storage (azure_storage) en el servidor flexible de Azure Database for PostgreSQL simplifica este caso de uso.

Azure Blob Storage

Azure Blob Storage es una solución de almacenamiento de objetos para la nube. Blob Storage está optimizado para el almacenamiento de cantidades masivas de datos no estructurados. Los datos no estructurados son datos que no se ciñen a ningún un modelo de datos o definición concretos, como texto o datos binarios.

Blob Storage ofrece una jerarquía de tres tipos de recursos:

  • La cuenta de almacenamiento es una entidad administrativa que contiene servicios para elementos como blobs, archivos, colas, tablas o discos.

    Al crear una cuenta de almacenamiento en Azure, obtendrá un espacio de nombres único para los recursos de almacenamiento. Ese espacio de nombres único forma parte de la dirección URL. El nombre de la cuenta de almacenamiento debe ser único en todos los nombres de cuenta de almacenamiento existentes en Azure.

  • Un contenedor está dentro de una cuenta de almacenamiento. Un contenedor es como una carpeta donde se almacenan los blobs.

    Puede definir directivas de seguridad y asignar directivas al contenedor. Esas directivas se aplican en cascada a todos los blobs del contenedor.

    Una cuenta de almacenamiento puede contener un número ilimitado de contenedores. Cada contenedor puede contener un número ilimitado de blobs, hasta el tamaño máximo de la cuenta de almacenamiento de 500 TB.

    Después de colocar un blob en un contenedor que se encuentra dentro de una cuenta de almacenamiento, puede hacer referencia al blob mediante una dirección URL en este formato: protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>.

  • Un blob es un fragmento de datos que reside en el contenedor.

En el siguiente diagrama se muestra la relación entre estos recursos.

Diagrama que muestra un ejemplo de recursos de almacenamiento.

Principales ventajas de almacenar datos como blobs en Azure Blob Storage

Azure Blob Storage puede proporcionar las siguientes ventajas:

  • Es una solución de almacenamiento en la nube escalable y rentable. Puede usarlo para almacenar datos de cualquier tamaño y escalar o reducir verticalmente en función de sus necesidades.
  • Proporciona capas de seguridad para ayudar a proteger los datos, como el cifrado en reposo y en tránsito.
  • Se comunica con otros servicios de Azure y aplicaciones asociadas. Es una solución versátil para una amplia gama de casos de uso, como la copia de seguridad y la recuperación ante desastres, el archivado y el análisis de datos.
  • Es una solución rentable para administrar y almacenar grandes cantidades de datos en la nube, tanto si la organización es una pequeña empresa como una empresa grande. Solo paga por el almacenamiento que necesita.

Importación de datos de Azure Blob Storage al servidor flexible de Azure Database for PostgreSQL

Para cargar datos desde Azure Blob Storage, debe lista de permitidos la extensión azure_storage PostgreSQL. A continuación, instale la extensión en la base de datos mediante el comando CREATE EXTENSION:

 CREATE EXTENSION azure_storage;

Cuando se crea una cuenta de almacenamiento, Azure genera dos claves de acceso de cuenta de almacenamiento de 512 bits para esa cuenta. Puede usar estas claves para autorizar el acceso a los datos de la cuenta de almacenamiento a través de la autorización de clave compartida.

Para poder importar los datos, debe asignar la cuenta de almacenamiento mediante el método account_add. Proporcione la clave de acceso de la cuenta que se definió al crear la cuenta. En el ejemplo de código siguiente se asigna la cuenta de almacenamiento mystorageaccount y se usa la cadena SECRET_ACCESS_KEY como parámetro de clave de acceso:

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

Después de asignar el almacenamiento, puede enumerar el contenido de la cuenta de almacenamiento y elegir los datos para la importación. En el ejemplo siguiente se supone que creó una cuenta de almacenamiento denominada mystorageaccount y un contenedor de blobs denominado mytestblob:

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

Puede filtrar la salida de esta instrucción mediante una cláusula SQL WHERE normal o el parámetro prefix del método blob_list. La enumeración del contenido del contenedor requiere una cuenta y una clave de acceso o un contenedor con acceso anónimo habilitado.

Por último, puede usar la instrucción COPY o la función blob_get para importar datos de Azure Blob Storage en una tabla de servidor flexible de Azure Database for PostgreSQL existente.

Importación de datos mediante una instrucción COPY

En el ejemplo siguiente se muestra la importación de datos desde un archivo de employee.csv que reside en el contenedor de blobs mytestblob en la misma cuenta de almacenamiento de Azure mystorageaccount a través del comando COPY:

  1. Cree una tabla de destino que coincida con el esquema de archivo de origen:

    CREATE TABLE employees (
      EmployeeId int PRIMARY KEY,
      LastName VARCHAR ( 50 ) UNIQUE NOT NULL,
      FirstName VARCHAR ( 50 ) NOT NULL
    );
    
  2. Use una instrucción COPY para copiar datos en la tabla de destino. Especifique que la primera fila es encabezados.

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

Importación de datos mediante la función blob_get

La función blob_get recupera un archivo de Blob Storage. Para asegurarse de que blob_get puede analizar los datos, puede pasar un valor con un tipo que corresponda a las columnas del archivo o definir explícitamente las columnas de la cláusula FROM.

Puede usar la función blob_get con el siguiente formato:

azure_storage.blob_get(account_name, container_name, path)

En el ejemplo siguiente se muestra la misma acción del mismo origen al mismo destino mediante la función 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))

El comando COPY y la función blob_get admiten las siguientes extensiones de archivo para la importación:

Formato de archivo Descripción
.csv Formato de valores separados por comas usado por PostgreSQL COPY
.tsv Valores separados por tabulaciones, el formato COPY de PostgreSQL predeterminado
binario Formato de COPY binario de PostgreSQL
text Archivo que contiene un valor de texto único (por ejemplo, JSON grande o XML)

Exportación de datos desde el servidor flexible de Azure Database for PostgreSQL a Azure Blob Storage

Para exportar datos desde el servidor flexible de Azure Database for PostgreSQL a Azure Blob Storage, debe lista de permitidos la extensión azure_storage. A continuación, instale la extensión azure_storage PostgreSQL en la base de datos mediante el comando CREATE EXTENSION:

CREATE EXTENSION azure_storage;

Cuando se crea una cuenta de almacenamiento, Azure genera dos claves de acceso de cuenta de almacenamiento de 512 bits para esa cuenta. Puede usar estas claves para autorizar el acceso a los datos de la cuenta de almacenamiento a través de la autorización de clave compartida o a través de tokens de firma de acceso compartido (SAS) firmados con la clave compartida.

Para poder importar los datos, debe asignar la cuenta de almacenamiento mediante el método account_add. Proporcione la clave de acceso de la cuenta que se definió al crear la cuenta. En el ejemplo de código siguiente se asigna la cuenta de almacenamiento mystorageaccount y se usa la cadena SECRET_ACCESS_KEY como parámetro de clave de acceso:

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

Puede usar la instrucción COPY o la función blob_put para exportar datos de una tabla de Azure Database for PostgreSQL a Azure Blob Storage. En el ejemplo siguiente se muestra la exportación de datos de una tabla de empleados a un nuevo archivo denominado employee2.csv a través del comando COPY. El archivo reside en el contenedor de blobs mytestblob en la misma cuenta de almacenamiento de Azure mystorageaccount.

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

Del mismo modo, puede exportar datos desde una tabla de empleados a través de la función blob_put, lo que proporciona un control aún más finito sobre los datos exportados. En el ejemplo siguiente solo se exporta dos columnas de la tabla, EmployeeId y LastName. Omite la columna FirstName.

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

El comando COPY y la función blob_put admiten las siguientes extensiones de archivo para la exportación:

Formato de archivo Descripción
.csv Formato de valores separados por comas usado por PostgreSQL COPY
.tsv Valores separados por tabulaciones, el formato COPY de PostgreSQL predeterminado
binario Formato de COPY binario de PostgreSQL
text Un archivo que contiene un valor de texto único (por ejemplo, JSON grande o XML)

Enumeración de objetos en Azure Storage

Para enumerar objetos en Azure Blob Storage, debe lista de permitidos la extensión azure_storage. A continuación, instale la extensión azure_storage PostgreSQL en la base de datos mediante el comando CREATE EXTENSION:

CREATE EXTENSION azure_storage;

Cuando se crea una cuenta de almacenamiento, Azure genera dos claves de acceso de cuenta de almacenamiento de 512 bits para esa cuenta. Puede usar estas claves para autorizar el acceso a los datos de la cuenta de almacenamiento a través de la autorización de clave compartida o a través de tokens de SAS firmados con la clave compartida.

Para poder importar los datos, debe asignar la cuenta de almacenamiento mediante el método account_add. Proporcione la clave de acceso de la cuenta que se definió al crear la cuenta. En el ejemplo de código siguiente se asigna la cuenta de almacenamiento mystorageaccount y se usa la cadena SECRET_ACCESS_KEY como parámetro de clave de acceso:

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

La extensión de Azure Storage proporciona un método blob_list. Puede usar este método para enumerar objetos en Blob Storage con el formato siguiente:

azure_storage.blob_list(account_name, container_name, prefix)

En el ejemplo siguiente se muestra cómo enumerar objetos en Azure Storage mediante el método blob_list de una cuenta de almacenamiento denominada mystorageaccount y un contenedor de blobs denominado mytestbob. Los archivos del contenedor tienen la cadena employee.

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

Asignación de permisos a una cuenta no administrativa para acceder a datos desde Azure Storage

De forma predeterminada, solo el rol administrativo de azure_pg_admin puede agregar una clave de cuenta y acceder a la cuenta de almacenamiento en el servidor flexible de Azure Database for PostgreSQL.

Puede conceder los permisos para acceder a los datos de Azure Storage a usuarios de servidores flexibles de Azure Database for PostgreSQL no administrativos de dos maneras, en función de la granularidad de permisos:

  • Asigne azure_storage_admin al usuario no administrativo. Este rol se agrega con la instalación de la extensión de Azure Storage. En el ejemplo siguiente se concede este rol a un usuario no administrativo llamado support:

    -- Allow adding/list/removing storage accounts
    GRANT azure_storage_admin TO support;
    
  • Llame a la función account_user_add. En el ejemplo siguiente se agregan permisos al rol support en el servidor flexible de Azure Database for PostgreSQL. Es un permiso más finito, ya que proporciona acceso de usuario solo a una cuenta de Almacenamiento de Azure denominada mystorageaccount.

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

Los usuarios administrativos del servidor flexible de Azure Database for PostgreSQL pueden obtener una lista de cuentas de almacenamiento y permisos en la salida de la función account_list. Esta función muestra todas las cuentas con claves de acceso definidas.

SELECT * FROM azure_storage.account_list();

Cuando el administrador del servidor flexible de Azure Database for PostgreSQL decide que el usuario ya no debe tener acceso, el administrador puede usar el método o la función account_user_remove para quitar este acceso. En el ejemplo siguiente se quita el rol support de acceso a la cuenta de almacenamiento mystorageaccount:

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

Pasos siguientes

  • Si no ve una extensión que desea usar, háganoslo saber. Vote por las solicitudes existentes o cree nuevos comentarios y solicitudes en nuestro foro de comentarios.