Compartir a través de


Virtualización de datos con Azure SQL Managed Instance

Se aplica a:Azure SQL Managed Instance

En este artículo se describe la característica de virtualización de datos de Azure SQL Managed Instance. La virtualización de datos permite ejecutar consultas de Transact-SQL (T-SQL) en archivos que almacenan datos en formatos de datos comunes en Azure Data Lake Storage Gen2 o Azure Blob Storage. Puede combinar estos datos con datos relacionales almacenados localmente mediante combinaciones. Con la virtualización de datos, puede acceder de forma transparente a datos externos en modo de solo lectura, a la vez que lo mantiene en su formato y ubicación originales.

Información general

La virtualización de datos proporciona dos maneras de consultar archivos diseñados para diferentes conjuntos de escenarios:

  • Sintaxis OPENROWSET: optimizado para consultas ad hoc de archivos. Normalmente se usa para explorar rápidamente el contenido y la estructura de un nuevo conjunto de archivos.
  • Sintaxis CREATE EXTERNAL TABLE: optimizado para consultas repetitivas de archivos con sintaxis idéntica como si los datos se almacenaran localmente en la base de datos. La preparación de las tablas externas requiere de varios pasos en comparación con la sintaxis de OPENROWSET, pero permite controlar más el acceso a los datos. Use tablas externas para cargas de trabajo analíticas e informes.

En cualquier caso, cree un origen de datos externo mediante la sintaxis T-SQL CREATE EXTERNAL DATA SOURCE , como se muestra en este artículo.

La sintaxis CREATE EXTERNAL TABLE AS SELECT también está disponible para Azure SQL Managed Instance. Esto es para exportar los resultados de una instrucción T-SQL SELECT a los archivos Parquet o CSV en Azure Blob Storage o Azure Data Lake Storage Gen 2 y crear una tabla externa sobre esos archivos.

Formatos de archivo

Se admiten directamente los formatos de archivo Parquet y de texto delimitado (CSV). El formato de archivo JSON se admite indirectamente al especificar el formato de archivo CSV en el que las consultas devuelven cada documento como una fila independiente. Puede analizar las filas con JSON_VALUE y OPENJSON.

Tipos de almacenamiento

Almacene archivos en Azure Data Lake Storage Gen2 o Azure Blob Storage. Para consultar archivos, proporcione la ubicación en un formato específico y use el prefijo de tipo de ubicación que corresponde al tipo de origen externo y punto de conexión o protocolo, como los ejemplos siguientes:

--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

--Data Lake endpoint
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.parquet

Importante

El prefijo de tipo location proporcionado se usa para elegir el protocolo óptimo para la comunicación y usar las funcionalidades avanzadas que ofrece el tipo de almacenamiento determinado. El uso del prefijo https:// genérico está deshabilitado. Use siempre prefijos específicos del punto de conexión.

Introducción

Si no está familiarizado con la virtualización de datos y quiere probar rápidamente la funcionalidad, empiece consultando conjuntos de datos públicos disponibles en Azure Open Datasets, como el conjunto de datos Bing COVID-19 que permite el acceso anónimo.

Use los puntos de conexión siguientes para consultar los conjuntos de datos Bing COVID-19:

  • Parquet: abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet
  • CSV: abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv

Para obtener un inicio rápido, ejecute una consulta de T-SQL para obtener la primera información sobre el conjunto de datos. Esta consulta usa OPENROWSET para consultar un archivo almacenado en una cuenta de almacenamiento disponible públicamente:

--Quick query on a file stored in a publicly available storage account:
SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
 FORMAT = 'parquet'
) AS filerows

Puede continuar la exploración del conjunto de datos anexando WHERE, GROUP BYy otras cláusulas basadas en el conjunto de resultados de la primera consulta.

Si se produce un error en la primera consulta en la instancia administrada de SQL, es probable que esa instancia tenga acceso restringido a las cuentas de Azure Storage. Hable con su experto en redes para habilitar el acceso antes de continuar con la consulta.

Cuando esté familiarizado con la consulta de conjuntos de datos públicos, considere la posibilidad de cambiar a conjuntos de datos no públicos que requieren proporcionar credenciales, conceder derechos de acceso y configurar reglas de firewall. En muchos escenarios reales, opera principalmente con conjuntos de datos privados.

Acceso a cuentas de almacenamiento no públicas

Un usuario que inicie sesión en una instancia administrada de SQL debe estar autorizado para acceder a los archivos de consulta almacenados en una cuenta de almacenamiento no pública. Los pasos de autorización dependen de cómo se autentica la instancia administrada de SQL en la cuenta de almacenamiento. El tipo de autenticación y los parámetros relacionados no se proporcionan directamente con cada consulta. El objeto de credencial con ámbito de base de datos almacenado en la base de datos de usuario encapsula esta información. La base de datos usa la credencial para acceder a la cuenta de almacenamiento en cualquier momento en que se ejecute la consulta.

Instancia administrada de Azure SQL admite los dos tipos de autenticación siguientes:

  • Identidad administrada
  • Firma de acceso compartido (SAS)

Una identidad administrada es una característica de Microsoft Entra ID (anteriormente Azure Active Directory) que proporciona servicios de Azure, como Azure SQL Managed Instance, con una identidad administrada en Microsoft Entra ID. Puede usar esta identidad para autorizar solicitudes de acceso a datos en cuentas de almacenamiento no pública. Los servicios como Azure SQL Managed Instance tienen una identidad administrada asignada por el sistema y también pueden tener una o varias identidades administradas asignadas por el usuario. Puede usar identidades administradas asignadas por el sistema o identidades administradas asignadas por el usuario para la virtualización de datos con Azure SQL Managed Instance.

Para acceder a los datos, el administrador de almacenamiento de Azure primero debe conceder permisos a la identidad administrada. Conceda permisos a la identidad administrada asignada por el sistema de la instancia administrada de SQL de la misma manera que conceda permisos a cualquier otro usuario de Microsoft Entra. Por ejemplo:

  1. En Azure Portal, en la página Control de acceso (IAM) de una cuenta de almacenamiento, seleccione Agregar asignación de roles.
  2. Elija el rol RBAC de Azure integrado Lector de datos de blobs de almacenamiento. Este rol proporciona acceso de lectura a la identidad administrada para los contenedores de Azure Blob Storage necesarios.
    • En lugar de conceder el rol RBAC de Azure de Lector de datos de blobs de almacenamiento, también puede conceder permisos más específicos sobre un subconjunto de archivos. Todos los usuarios que necesitan acceso a Leer archivos individuales de estos datos también deben tener el permiso Ejecutar en todas las carpetas primarias hasta la raíz (el contenedor). Para más información, consulte Establecimiento de ACL en Azure Data Lake Storage Gen2.
  3. En la página siguiente, seleccione Asignar acceso aIdentidad administrada. Seleccione + Seleccionar miembros y, en la lista desplegable Identidad administrada , seleccione la identidad administrada deseada. Para más información, consulte Asignación de roles de Azure mediante Azure Portal.
  4. A continuación, cree una credencial de ámbito de base de datos para la autenticación de una identidad administrada. Tenga en cuenta en el ejemplo siguiente que 'Managed Identity' es una cadena codificada de forma rígida.
-- Optional: Create MASTER KEY if it doesn't exist in the database:
-- CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Some Very Strong Password Here>'
GO
CREATE DATABASE SCOPED CREDENTIAL MyCredential
WITH IDENTITY = 'Managed Identity'

Origen de datos externo

Un origen de datos externo es una abstracción que proporciona una referencia sencilla a una ubicación de archivo en varias consultas. Para consultar ubicaciones públicas, especifique la ubicación del archivo al crear un origen de datos externo:

CREATE EXTERNAL DATA SOURCE MyExternalDataSource
WITH (
    LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
)

Para acceder a las cuentas de almacenamiento no pública, especifique la ubicación y haga referencia a una credencial con ámbito de base de datos con parámetros de autenticación encapsulados. El script siguiente crea un origen de datos externo que apunta a la ruta de acceso del archivo y hace referencia a una credencial con ámbito de base de datos:

-- Create external data source that points to the file path, and that references a database scoped credential:
CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
WITH (
    LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential];
)

Consulta de orígenes de datos mediante OPENROWSET

La sintaxis de OPENROWSET permite realizar consultas ad hoc instantáneas a la vez que solo se crea la cantidad mínima necesaria de objetos de base de datos.

OPENROWSET solo requiere crear el origen de datos externo (y, posiblemente, la credencial), a diferencia del enfoque de tabla externa, que requiere un formato de archivo externo y la tabla externa misma.

El valor del parámetro DATA_SOURCE se antepone automáticamente al parámetro BULK para formar la ruta de acceso completa al archivo.

Al usar OPENROWSET, proporcione el formato del archivo, como el ejemplo siguiente, que consulta un único archivo:

SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'bing_covid-19_data.parquet',
 DATA_SOURCE = 'MyExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

Consulta de varios archivos y carpetas

El comando OPENROWSET también permite consultar varios archivos o carpetas mediante el uso de caracteres comodín en la ruta de acceso BULK.

En el ejemplo siguiente, se usa el conjunto de datos abierto de registros de viajes NYC Yellow Taxi.

En primer lugar, cree el origen de datos externo:

--Create the data source first:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');

Ahora, puede consultar todos los archivos con .parquet extensión en carpetas. Por ejemplo, la siguiente consulta solo es para esos archivos que coincidan con un patrón de nombre:

--Query all files with .parquet extension in folders matching name pattern:
SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

Cuando se consultan varios archivos o carpetas, todos los archivos a los que se accede con OPENROWSET único deben tener la misma estructura (como la misma cantidad de columnas y tipos de datos). Las carpetas no se pueden recorrer de manera recursiva.

Inferencia de esquemas

La inferencia automática de esquemas ayuda a escribir rápidamente consultas y a explorar los datos cuando no se conocen los esquemas de archivo. La inferencia de esquemas solo funciona con los archivos de formato Parquet.

Aunque es conveniente, los tipos de datos inferidos pueden ser mayores que los tipos de datos reales, ya que es posible que no haya suficiente información en los archivos de origen para asegurarse de que se usa el tipo de datos adecuado. Esto puede provocar un rendimiento deficiente de las consultas. Por ejemplo, los archivos parquet no contienen metadatos sobre la longitud máxima de columna de caracteres, por lo que la instancia lo deduce como varchar(8000).

Utilice el procedimiento almacenado sp_describe_first_results_set para comprobar los tipos de datos resultantes de su consulta, como en el ejemplo siguiente:

EXEC sp_describe_first_result_set N'
 SELECT
 vendorID, tpepPickupDateTime, passengerCount
 FROM
 OPENROWSET(
  BULK ''yellow/*/*/*.parquet'',
  DATA_SOURCE = ''NYCTaxiExternalDataSource'',
  FORMAT=''parquet''
 ) AS nyc';

Una vez que conozca los tipos de datos, especifíquelos mediante la cláusula para mejorar el WITH rendimiento:

SELECT TOP 100
 vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
 BULK 'yellow/*/*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT='PARQUET'
 )
WITH (
vendorID varchar(4), -- we're using length of 4 instead of the inferred 8000
tpepPickupDateTime datetime2,
passengerCount int
) AS nyc;

Dado que el esquema de los archivos CSV no se puede determinar automáticamente, especifique siempre las columnas mediante la WITH cláusula :

SELECT TOP 10 id, updated, confirmed, confirmed_change
FROM OPENROWSET(
 BULK 'bing_covid-19_data.csv',
 DATA_SOURCE = 'MyExternalDataSource',
 FORMAT = 'CSV',
 FIRSTROW = 2
)
WITH (
 id int,
 updated date,
 confirmed int,
 confirmed_change int
) AS filerows;

Funciones de metadatos del archivo

Al consultar varios archivos o carpetas, puede usar las funciones filepath() y filename() para leer los metadatos de los archivos y obtener parte de la ruta de acceso (o la ruta de acceso completa) y el nombre del archivo del que se origina la fila del conjunto de resultados:

--Query all files and project file path and file name information for each row:
SELECT TOP 10 filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder],
filerows.filename() as [File_name], filerows.filepath() as [Full_Path], *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet') AS filerows;
--List all paths:
SELECT DISTINCT filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet') AS filerows;

Cuando se la llama sin ningún parámetro, la función filepath() devuelve la ruta de acceso al archivo del que se origina la fila. Cuando se usa DATA_SOURCE en OPENROWSET, devuelve la ruta de acceso relativa a DATA_SOURCE; de lo contrario, devuelve la ruta de acceso completa al archivo.

Cuando se la llama con un parámetro, devuelve la parte de la ruta de acceso que coincide con el carácter comodín en la posición especificada del parámetro. Por ejemplo, el valor de parámetro 1 devuelve parte de la ruta de acceso que coincide con el primer carácter comodín.

La función filepath() también se puede usar para filtrar y agregar filas:

SELECT
 r.filepath() AS filepath
 ,r.filepath(1) AS [year]
 ,r.filepath(2) AS [month]
 ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
 ) AS r
WHERE
 r.filepath(1) IN ('2017')
 AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
 r.filepath()
 ,r.filepath(1)
 ,r.filepath(2)
ORDER BY
 filepath;

Creación de una vista sobre OPENROWSET

Puede crear y usar vistas para encapsular las consultas OPENROWSET a fin de reutilizar fácilmente la consulta subyacente:

CREATE VIEW TaxiRides AS
SELECT *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows

También resulta conveniente agregar columnas con los datos de ubicación del archivo a una vista mediante la función filepath() para lograr un filtrado más sencillo y con mejor rendimiento. El uso de vistas puede reducir el número de archivos y la cantidad de datos que la consulta necesita leer y procesar cuando se filtra por cualquiera de esas columnas.

CREATE VIEW TaxiRides AS
SELECT *
 , filerows.filepath(1) AS [year]
 , filerows.filepath(2) AS [month]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows

Las vistas también permiten que herramientas de informes y análisis, como Power BI, consuman los resultados de OPENROWSET.

Tablas externas

Las tablas externas encapsulan el acceso a los archivos, por lo que consultarlos se siente casi igual que consultar datos relacionales locales almacenados en tablas de usuario. Para crear una tabla externa, debe tener un origen de datos externo y objetos de formato de archivo externos en su lugar:

--Create external file format
CREATE EXTERNAL FILE FORMAT DemoFileFormat
WITH (
 FORMAT_TYPE=PARQUET
)
GO

--Create external table:
CREATE EXTERNAL TABLE tbl_TaxiRides(
 vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
 tpepPickupDateTime DATETIME2,
 tpepDropoffDateTime DATETIME2,
 passengerCount INT,
 tripDistance FLOAT,
 puLocationId VARCHAR(8000),
 doLocationId VARCHAR(8000),
 startLon FLOAT,
 startLat FLOAT,
 endLon FLOAT,
 endLat FLOAT,
 rateCodeId SMALLINT,
 storeAndFwdFlag VARCHAR(8000),
 paymentType VARCHAR(8000),
 fareAmount FLOAT,
 extra FLOAT,
 mtaTax FLOAT,
 improvementSurcharge VARCHAR(8000),
 tipAmount FLOAT,
 tollsAmount FLOAT,
 totalAmount FLOAT
)
WITH (
 LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = NYCTaxiExternalDataSource,
 FILE_FORMAT = DemoFileFormat
);
GO

Después de crear la tabla externa, puede consultarla igual que cualquier otra tabla:

SELECT TOP 10 *
FROM tbl_TaxiRides;

Al igual que OPENROWSET, las tablas externas admiten la consulta de varios archivos y carpetas con caracteres comodín. Sin embargo, las tablas externas no admiten la inferencia de esquema.

Consideraciones de rendimiento

No hay ningún límite estricto para el número de archivos o la cantidad de datos que puede consultar, pero el rendimiento de las consultas depende de la cantidad de datos, el formato de datos, la forma en que se organizan los datos y la complejidad de las consultas y combinaciones.

Consulta de datos con particiones

Los datos se suelen organizar en subcarpetas, también denominadas particiones. Puede indicar a instancia administrada de SQL que consulte solo carpetas y archivos concretos. De este modo, se reduce el número de archivos y la cantidad de datos que la consulta tiene que leer y procesar, lo que proporciona un mejor rendimiento. Este tipo de optimización de consultas se conoce como eliminación de particiones. Puede eliminar las particiones de la ejecución de consultas mediante la función filepath() de metadatos en la WHERE cláusula de la consulta.

En el ejemplo de consulta siguiente se leen archivos de datos de NYC Yellow Taxi solo para los últimos tres meses de 2017:

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'yellow/puYear=*/puMonth=*/*.parquet',
        DATA_SOURCE = 'NYCTaxiExternalDataSource',
        FORMAT = 'parquet'
    )
WITH (
    vendorID INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;

Si los datos almacenados no tienen particiones, considere la posibilidad de crear particiones para mejorar el rendimiento de las consultas.

Si utiliza tablas externas, las funciones filepath() y filename() se admiten, pero no en la cláusula WHERE. Todavía puede filtrar por filename o filepath si los usa en columnas calculadas, como se muestra en el ejemplo siguiente:

CREATE EXTERNAL TABLE tbl_TaxiRides (
 vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
 tpepPickupDateTime DATETIME2,
 tpepDropoffDateTime DATETIME2,
 passengerCount INT,
 tripDistance FLOAT,
 puLocationId VARCHAR(8000),
 doLocationId VARCHAR(8000),
 startLon FLOAT,
 startLat FLOAT,
 endLon FLOAT,
 endLat FLOAT,
 rateCodeId SMALLINT,
 storeAndFwdFlag VARCHAR(8000),
 paymentType VARCHAR(8000),
 fareAmount FLOAT,
 extra FLOAT,
 mtaTax FLOAT,
 improvementSurcharge VARCHAR(8000),
 tipAmount FLOAT,
 tollsAmount FLOAT,
 totalAmount FLOAT,
 [Year]  AS CAST(filepath(1) AS INT), --use filepath() for partitioning
 [Month]  AS CAST(filepath(2) AS INT) --use filepath() for partitioning
)
WITH (
 LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = NYCTaxiExternalDataSource,
 FILE_FORMAT = DemoFileFormat
);
GO

SELECT *
      FROM tbl_TaxiRides
WHERE
      [year]=2017
      AND [month] in (10,11,12);

Si los datos almacenados no tienen particiones, considere la posibilidad de crear particiones para mejorar el rendimiento de las consultas.

Estadísticas

La recopilación de estadísticas de los datos externos es una de las cosas más importantes que puede hacer para la optimización de las consultas. Cuanto más sepa la instancia sobre los datos, más rápido puede ejecutar consultas. El optimizador de consultas del motor de SQL está basado en el costo. Compara el costo de varios planes de consulta y elige el menor de ellos. En la mayoría de los casos, elige el plan que se ejecuta más rápidamente.

Creación automática de estadísticas

Azure SQL Managed Instance analiza las consultas de usuario entrantes para buscar las estadísticas que faltan. Si faltan las estadísticas, el optimizador de consultas crea automáticamente las estadísticas en columnas individuales en el predicado de consulta o en la condición de combinación para mejorar las estimaciones de cardinalidad del plan de consulta. La creación automática de estadísticas se realiza de forma sincrónica, por lo que puede suponer una ligera degradación del rendimiento de consulta si a las columnas les faltan estadísticas. El tiempo necesario para crear estadísticas de una sola columna depende del tamaño de los archivos de destino.

Estadísticas manuales de OPENROWSET

Las estadísticas de una sola columna para la ruta OPENROWSET se pueden crear mediante el procedimiento almacenado sys.sp_create_openrowset_statistics, pasando la consulta SELECT con una sola columna como parámetro.

EXEC sys.sp_create_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
 BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
 FORMAT = ''parquet'') AS filerows
';

De manera predeterminada, la instancia utiliza el 100 % de los datos proporcionados en el conjunto de datos para crear estadísticas. También puede especificar el tamaño de la muestra como un porcentaje con las opciones TABLESAMPLE. A fin de crear estadísticas de columna única para varias columnas, ejecute sys.sp_create_openrowset_statistics para cada una de las columnas. No se pueden crear estadísticas de varias columnas para la ruta de acceso OPENROWSET.

Si desea actualizar las estadísticas existentes, anúlelas primero con el procedimiento almacenado sys.sp_drop_openrowset_statistics y, luego, vuelva a crearlas con sys.sp_create_openrowset_statistics:

EXEC sys.sp_drop_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
 BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
 FORMAT = ''parquet'') AS filerows
';

Estadísticas manuales de tablas externas

La sintaxis para crear estadísticas en tablas externas es similar a la que se utiliza para las tablas de usuario normales. Para crear estadísticas en una columna, indique un nombre para el objeto de estadísticas y el nombre de la columna:

CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;

Las opciones WITH son obligatorias y, para el tamaño de la muestra, las opciones permitidas son FULLSCAN y SAMPLE n por ciento.

  • A fin de crear estadísticas de columna única para varias columnas, ejecute CREATE STATISTICS para cada una de las columnas.
  • No se admiten estadísticas de varias columnas.

Solución de problemas

Los problemas con la ejecución de consultas suelen producirse cuando la instancia administrada de SQL no puede acceder a la ubicación del archivo. Los mensajes de error relacionados pueden notificar derechos de acceso insuficientes, una ubicación que no existe, un archivo que usa otro proceso o que ese directorio no se puede enumerar. En la mayoría de los casos, estos errores indican que las directivas de control de tráfico de red bloquean el acceso a los archivos o el usuario carece de derechos de acceso. Compruebe los siguientes elementos:

  • Si la ruta de acceso a la ubicación es incorrecta o está mal escrita.
  • Validez de la clave SAS. Podría expirar, contener un error tipográfico o empezar con un signo de interrogación.
  • Se permiten permisos de clave SAS. Lea como mínimo y Enumere si se usan caracteres comodín.
  • Es posible que el tráfico entrante esté bloqueado en la cuenta de almacenamiento. Consulte Administración de reglas de red virtual para Azure Storage para más información y asegúrese de que se permite el acceso desde la red virtual de instancia administrada de SQL.
  • Se bloqueó el tráfico saliente en la instancia administrada de SQL mediante la directiva de punto de conexión de almacenamiento. Permita el tráfico saliente a la cuenta de almacenamiento.
  • Derechos de acceso a identidad gestionada. Asegúrese de que la identidad administrada de la instancia tiene derechos de acceso a la cuenta de almacenamiento.
  • El nivel de compatibilidad de la base de datos debe ser 130 o superior para que funcionen las consultas de virtualización de datos.

CREAR TABLA EXTERNA COMO SELECCIONAR (CETAS)

CREATE EXTERNAL TABLE AS SELECT (CETAS) permite exportar datos de la instancia administrada de SQL a una cuenta de almacenamiento externa. Puede usar CETAS para crear una tabla externa sobre archivos Parquet o CSV en Azure Blob Storage o Azure Data Lake Storage (ADLS) Gen2. CETAS también puede exportar, en paralelo, los resultados de una instrucción T-SQL SELECT en la tabla externa creada. Existe la posibilidad de riesgo de filtración de datos con estas funcionalidades, por lo que Azure SQL Managed Instance deshabilita CETAS de forma predeterminada. Para habilitarlo, consulte CREATE EXTERNAL TABLE AS SELECT (CETAS).

Limitaciones

Problemas conocidos

  • Cuando la parametrización para Always Encrypted está habilitada en SQL Server Management Studio (SSMS), las consultas de virtualización de datos generan un mensaje de error Incorrect syntax near 'PUSHDOWN'.