Consulta de archivos de almacenamiento mediante un grupo de SQL sin servidor
El grupo de SQL sin servidor permite consultar los datos del lago de datos. Ofrece un área expuesta de consultas de Transact-SQL (T-SQL) que admite consultas de datos semiestructurados y no estructurados. Para realizar consultas, se admiten los siguientes aspectos de T-SQL:
- Área expuesta SELECT completa, que incluye la mayoría de los operadores y funciones de SQL.
- CREATE EXTERNAL TABLE AS SELECT (CETAS) crea una tabla externa y, después, exporta en paralelo los resultados de una instrucción SELECT de T-SQL a Azure Storage.
Para más información sobre lo que se admite o no actualmente, lea el artículo Introducción al grupo de SQL sin servidor o los artículos siguientes:
- Desarrollo de acceso al almacenamiento, donde puede aprender a usar tabla externas y la función OPENROWSET para leer datos del almacenamiento.
- Control del acceso al almacenamiento, donde puede aprender a habilitar Synapse SQL para acceder al almacenamiento mediante la autenticación de SAS o la identidad administrada del área de trabajo.
Información general
Para tener una experiencia fluida en las consultas en contexto de los datos que se encuentran en los archivos de Azure Storage, el grupo de SQL sin servidor usa la función OPENROWSET con funcionalidades adicionales:
- Consulta de archivos de PARQUET
- Consulta de archivos CSV y texto delimitado (terminador de campo, terminador de fila, carácter de escape)
- Consulta de archivos con el formato DELTA LAKE
- Lectura de un subconjunto de columnas elegido
- Inferencia de esquemas
- Consulta de varios archivos o carpetas
- Función filename
- Función filepath
- Uso con tipos complejos y estructuras de datos anidadas o repetidas
Consulta de archivos de PARQUET
Para consultar los datos de origen de Parquet, use FORMAT = 'PARQUET'
:
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Para ver ejemplos de uso, consulte Consulta de archivos Parquet.
Consulta de archivo CSV
Para consultar los datos de origen de CSV, use FORMAT = 'CSV'
. Cuando consulte archivos CSV puede especificar el esquema del archivo CSV como parte de la función OPENROWSET
:
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.csv', FORMAT = 'CSV', PARSER_VERSION='2.0')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Hay algunas opciones adicionales que se pueden usar para ajustar las reglas de análisis al formato CSV personalizado:
-
ESCAPE_CHAR = 'char'
especifica el carácter del archivo que se usa como carácter de escape de sí mismo y de todos los valores de delimitador del archivo. Si el carácter de escape va seguido de un valor distinto de sí mismo o de cualquiera de los valores de delimitador, se quita al leer el valor. El parámetroESCAPE_CHAR
se aplica siFIELDQUOTE
está habilitado o no. No se utilizará como carácter de escape el carácter de comillas. El carácter de comillas se debe escapar con otro carácter de comillas. El carácter de comillas solo puede aparecer dentro del valor de la columna si el valor se encapsula entre caracteres de comillas. -
FIELDTERMINATOR ='field_terminator'
especifica el terminador de campo que se va a usar. El terminador de campo predeterminado es una coma (,
). -
ROWTERMINATOR ='row_terminator'
especifica el terminador de fila que se va a usar. El terminador de fila predeterminado es un carácter de nueva línea (\r\n
).
Consulta de archivos con el formato DELTA LAKE
Para consultar los datos de origen de Delta Lake, use FORMAT = 'DELTA'
y haga referencia a la carpeta raíz que contiene los archivos de Delta Lake.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder', FORMAT = 'DELTA')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
La carpeta raíz debe contener una subcarpeta denominada _delta_log
. Para ver ejemplos de uso, consulte Consulta de archivos de Delta Lake (v1).
Esquema de archivos
El lenguaje SQL de Synapse SQL permite definir el esquema del archivo como parte de la función OPENROWSET
y leer todas las columnas o un subconjunto de ellas, o intenta determinar automáticamente los tipos de columna del archivo mediante la inferencia de esquemas.
Lectura de un subconjunto de columnas elegido
Para especificar las columnas que desea leer, puede especificar una cláusula WITH
opcional en la instrucción OPENROWSET
.
- Si hay archivos de datos CSV, especifique los nombres de columna y sus tipos de datos para leer todas las columnas. Si desea un subconjunto de columnas, use números ordinales para seleccionar las columnas en los archivos de datos de origen por ordinal. Las columnas se enlazan por la designación ordinal.
- Si hay archivos de datos con formato Parquet, especifique nombres de columna que coincidan con los de los archivos de datos de origen. Las columnas se enlazan por nombre.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (
C1 int,
C2 varchar(20),
C3 varchar(max)
) as rows;
Para cada columna debe especificar el nombre y el tipo de columna en la cláusula WITH
. Para ver algunos ejemplos, consulte Leer archivos CSV sin especificar todas las columnas.
Inferencia de esquemas
Si omite la cláusula WITH
de la instrucción OPENROWSET
, puede indicar al servicio que detecte automáticamente (infiera) el esquema a partir de los archivos subyacentes.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
Asegúrese de que se usan tipos de datos inferidos adecuados para obtener un rendimiento óptimo.
Consulta de varios archivos o carpetas
Para ejecutar una consulta de T-SQL en un conjunto de archivos de una carpeta o un conjunto de carpetas, y tratarlos como una sola entidad o conjunto de filas, especifique una ruta de acceso a una carpeta o un patrón (mediante caracteres comodín) en un conjunto de archivos o carpetas.
Se aplican las reglas siguientes:
- Los patrones pueden aparecer en parte de una ruta de acceso de un directorio o en un nombre de archivo.
- Pueden aparecer varios patrones en el mismo nombre de archivo o paso de directorio.
- Si hay varios caracteres comodín, los archivos de todas las rutas de acceso coincidentes se incluirán en el conjunto de archivos resultante.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows
Para ver ejemplos de uso, consulte Consulta de carpetas y de varios archivos.
Funciones de metadatos del archivo
Función Filename
Esta función devuelve el nombre de archivo del que se origina la fila.
Para consultar archivos concretos, lea la sección Filename del artículo en el que se indica cómo consultar archivos específicos.
El tipo de datos devuelto es nvarchar (1024). Para obtener un rendimiento óptimo, convierta siempre el resultado de la función filename al tipo de datos adecuado. Si usa un tipo de datos de caracteres, asegúrese de que se usa la longitud apropiada.
Función Filepath
Esta función devuelve una ruta de acceso completa o una parte de una ruta de acceso:
- Cuando se llama sin parámetro, devuelve la ruta de acceso completa al archivo del que se origina una fila.
- Cuando se llama sin 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 1 del parámetro devolverá la parte de la ruta de acceso que coincide con el primer carácter comodín.
Para más información, lea la sección Filepath del artículo en el que se indica cómo consultar archivos específicos.
El tipo de datos devuelto es nvarchar (1024). Para obtener un rendimiento óptimo, convierta siempre el resultado de la función filepath al tipo de datos adecuado. Si usa un tipo de datos de caracteres, asegúrese de que se usa la longitud apropiada.
Uso con tipos complejos y estructuras de datos anidadas o repetidas
Para tener una experiencia fluida con los datos almacenados en tipos de datos anidados o repetidos como, por ejemplo, en los archivos con formato Parquet, el grupo de SQL sin servidor ha agregado las siguientes extensiones.
Proyección de datos anidados o repetidos de proyecto
Para proyectar datos, ejecute una instrucción SELECT
sobre el archivo Parquet que contiene las columnas de los tipos de datos anidados. En la salida, los valores anidados se serializarán en JSON y se devolverán en forma de tipo de datos SQL varchar(8000).
SELECT * FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Para obtener información más detallada, consulte la sección Proyectar datos anidados o repetidos del artículo Consulta de tipos anidados en Parquet.
Acceso a elementos de columnas anidadas
Para acceder a elementos anidados de una columna anidada, como Struct, utilice la notación de puntos para concatenar los nombres de campo en la ruta de acceso. Proporcione la ruta de acceso como column_name
en la cláusula WITH
de la función OPENROWSET
.
Este es un ejemplo de un fragmento de la sintaxis:
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
WITH ('column_name' 'column_type')
[AS alias]
'column_name' ::= '[field_name.] field_name'
De manera predeterminada, la función OPENROWSET
hace coincidir el nombre de campo y la ruta de acceso de origen con los nombres de columna que se proporcionan en la cláusula WITH
. Para acceder a los elementos que se encuentren en distintos niveles de anidamiento del mismo archivo de Parquet de origen, se debe usar la cláusula WITH
.
Valores devueltos
- La función devuelve un valor escalar, como
int
,decimal
yvarchar
, desde el elemento especificado y en la ruta de acceso especificada para todos los tipos de archivo con formato Parquet que no están en el grupo Tipos anidados. - Si la ruta de acceso apunta a un elemento de un tipo anidado, la función devuelve un fragmento de JSON que comienza en el elemento superior de la ruta de acceso especificada. Este fragmento JSON es del tipo varchar(8000).
- Si la propiedad no se puede encontrar en la línea de
column_name
especificada, la función devuelve un error. - Si la propiedad no se encuentra en la línea de
column_path
especificada, que depende del modo de la ruta, la función devuelve un error cuando está en modo strict o null cuando está en modo lax.
Para obtener ejemplos de consultas, consulte la sección Leer propiedades de columnas de objeto anidadas en el artículo Consulta de tipos anidados Parquet.
Acceso a elementos de columnas repetidas
Para acceder a los elementos de una columna repetida, como un elemento de una matriz o una asignación, use la función JSON_VALUE para todos los elementos escalares que necesite proyectar y proporcionar:
- Columna anidada o repetida, como primer parámetro
- Una ruta de acceso JSON que especifica el elemento o la propiedad a la que se va a acceder, como segundo parámetro
Para acceder a los elementos no escalares de una columna repetida, use la función JSON_QUERY para todos los elementos no escalares que necesite proyectar y proporcionar:
- Columna anidada o repetida, como primer parámetro
- Una ruta de acceso JSON que especifica el elemento o la propiedad a la que se va a acceder, como segundo parámetro
Vea el fragmento de sintaxis siguiente:
SELECT
JSON_VALUE (column_name, path_to_sub_element),
JSON_QUERY (column_name [ , path_to_sub_element ])
FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Puede encontrar ejemplos de consultas para acceder a los elementos de las columnas repetidas en el artículo en el que se explica cómo consultar tipos anidados con formato Parquet.
Contenido relacionado
Para más información sobre cómo consultar diferentes tipos de archivo y crear y usar vistas, consulte los siguientes artículos: