Compartir a través de


Ingerir datos en el almacenamiento mediante Transact-SQL

Se aplica a:✅Almacenamiento de Microsoft Fabric

El lenguaje Transact-SQL ofrece opciones que puede usar para cargar datos a gran escala desde tablas existentes en el lago y el almacenamiento a nuevas tablas en el almacenamiento. Estas opciones son convenientes si necesita crear nuevas versiones de una tabla con datos agregados, versiones de tablas con un subconjunto de filas o para crear una tabla como resultado de una consulta compleja. Pongamos algunos ejemplos.

Creación de una tabla con el resultado de una consulta mediante CREATE TABLE AS SELECT (CTAS)

La instrucción CREATE TABLE AS SELECT (CTAS) permite crear una nueva tabla en el almacenamiento a partir de la salida de una instrucción SELECT. Ejecuta la operación de ingesta en la nueva tabla en paralelo, lo que hace que sea muy eficaz para la transformación de datos y la creación de nuevas tablas en el área de trabajo.

Nota:

En los ejemplos de este artículo se usa el conjunto de datos de ejemplo de COVID-19 de Bing. Para cargar el conjunto de datos de ejemplo, siga los pasos descritos en Ingesta de datos en el almacenamiento mediante la instrucción COPY para crear los datos de ejemplo en el almacenamiento.

En el primer ejemplo se muestra cómo crear una nueva tabla que es una copia de la tabla existente dbo.[bing_covid-19_data_2023], pero filtrada solo a los datos del año 2023:

CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT * 
FROM [dbo].[bing_covid-19_data] 
WHERE DATEPART(YEAR,[updated]) = '2023';

También puede crear una nueva tabla con nuevas columnas year, month y dayofmonth con valores obtenidos de la columna updated de la tabla de origen. Esto puede ser útil si está intentando visualizar los datos de infección por año, o para ver los meses en los que se observan más casos de COVID-19:

CREATE TABLE [dbo].[bing_covid-19_data_with_year_month_day]
AS
SELECT DATEPART(YEAR,[updated]) [year], DATEPART(MONTH,[updated]) [month], DATEPART(DAY,[updated]) [dayofmonth], * 
FROM [dbo].[bing_covid-19_data];

Otro ejemplo: puede crear una nueva tabla que resuma el número de casos observados en cada mes, independientemente del año, para evaluar cómo afecta la estacionalidad a la propagación en un país o región determinados. Usa la tabla creada en el ejemplo anterior con la nueva columna month como origen:

CREATE TABLE [dbo].[infections_by_month]
AS
SELECT [country_region],[month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM [dbo].[bing_covid-19_data_with_year_month_day]
GROUP BY [country_region],[month];

Según esta nueva tabla, podemos ver que Estados Unidos observó más casos confirmados en todos los años en el mes de January, seguido de December y October. April es el mes con el número más bajo de casos en total:

SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;

Captura de pantalla de los resultados de la consulta que muestra el número de infecciones por mes en Estados Unidos, ordenadas por mes, en orden descendente. El mes número 1 se muestra en la parte superior.

Para obtener más ejemplos y una referencia sintáctica, consulte CREATE TABLE AS SELECT (Transact-SQL).

Ingesta de datos en tablas existentes con consultas T-SQL

En los ejemplos anteriores se crean nuevas tablas basadas en el resultado de una consulta. Para replicar los ejemplos pero en tablas existentes, se puede utilizar el patrón INSERT...SELECT. Por ejemplo, el código siguiente ingiere datos nuevos en una tabla existente:

INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data] 
WHERE [updated] > '2023-02-28';

Los criterios de consulta de la instrucción SELECT pueden ser cualquier consulta válida, siempre y cuando los tipos de columna de consulta resultantes se alineen con las columnas de la tabla de destino. Si se especifican nombres de columna e incluyen solo un subconjunto de las columnas de la tabla de destino, todas las demás columnas se cargan como NULL. Para obtener más información, consulte Usar INSERT INTO…SELECT para realizar una importación masiva de datos con registros y paralelismos mínimos.

Ingesta de datos de tablas en diferentes almacenamientos y almacenes de lago

Para CREATE TABLE AS SELECT e INSERT... SELECT, la instrucción SELECT también puede hacer referencia a tablas en almacenamientos que son diferentes del almacenamiento donde se almacena la tabla de destino mediante consultas entre almacenes. Esto se puede lograr mediante la convención de nomenclatura de tres partes [warehouse_or_lakehouse_name.][schema_name.]table_name. Por ejemplo, supongamos que tiene los siguientes recursos de área de trabajo:

  • Una instancia de lago de datos denominada cases_lakehouse con los datos de casos más recientes.
  • Un almacén denominado reference_warehouse con tablas usadas para los datos de referencia.
  • Almacén denominado research_warehouse donde se crea la tabla de destino.

Se puede crear una nueva tabla que use nombres de tres partes para combinar datos de tablas en estos recursos del área de trabajo:

CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT 
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];

Para obtener más información sobre las consultas entre almacenamientos, consulte Escribir una consulta SQL entre bases de datos.