Share via


Ingerir dados em seu Warehouse usando Transact-SQL

Aplica-se a: Armazém no Microsoft Fabric

A linguagem Transact-SQL oferece opções que você pode usar para carregar dados em escala de tabelas existentes em sua casa de lago e armazém em novas tabelas em seu depósito. Essas opções são convenientes se você precisar criar novas versões de uma tabela com dados agregados, versões de tabelas com um subconjunto das linhas ou criar uma tabela como resultado de uma consulta complexa. Vamos explorar alguns exemplos.

Criar uma nova tabela com o resultado de uma consulta usando CREATE TABLE AS SELECT (CTAS)

A instrução CREATE TABLE AS SELECT (CTAS) permite que você crie uma nova tabela em seu depósito a partir da saída de uma SELECT instrução. Ele executa a operação de ingestão na nova tabela em paralelo, tornando-a altamente eficiente para a transformação de dados e criação de novas tabelas em seu espaço de trabalho.

Nota

Os exemplos neste artigo usam o conjunto de dados de exemplo do Bing COVID-19. Para carregar o conjunto de dados de exemplo, siga as etapas em Ingerir dados em seu depósito usando a instrução COPY para criar os dados de amostra em seu depósito.

O primeiro exemplo ilustra como criar uma nova tabela que é uma cópia da tabela existente dbo.[bing_covid-19_data_2023] , mas filtrada apenas para dados do ano de 2023:

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

Você também pode criar uma nova tabela com novas yearcolunas , month, dayofmonth com valores obtidos da coluna na tabela de updated origem. Isso pode ser útil se você estiver tentando visualizar dados de infeção por ano ou para ver os meses em que a maioria dos casos de COVID-19 são observados:

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];

Como outro exemplo, você pode criar uma nova tabela que resume o número de casos observados em cada mês, independentemente do ano, para avaliar como a sazonalidade afeta a propagação em um determinado país/região. Ele usa a tabela criada no exemplo anterior com a nova month coluna como fonte:

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];

Com base nesta nova tabela, podemos ver que os Estados Unidos observaram mais casos confirmados em todos os anos no mês de January, seguido por December e October. April é o mês com o menor número de casos em geral:

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

Captura de ecrã dos resultados da consulta que mostra o número de infeções por mês nos Estados Unidos, ordenadas por mês, por ordem decrescente. O mês número 1 é mostrado no topo.

Para obter mais exemplos e referência de sintaxe, consulte CREATE TABLE AS SELECT (Transact-SQL).

Ingerir dados em tabelas existentes com consultas T-SQL

Os exemplos anteriores criam novas tabelas com base no resultado de uma consulta. Para replicar os exemplos, mas em tabelas existentes, o INSERT... O padrão SELECT pode ser usado. Por exemplo, o código a seguir ingere novos dados em uma tabela existente:

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

Os critérios de consulta para a SELECT instrução podem ser qualquer consulta válida, desde que os tipos de coluna de consulta resultantes estejam alinhados com as colunas na tabela de destino. Se os nomes das colunas forem especificados e incluírem apenas um subconjunto das colunas da tabela de destino, todas as outras colunas serão carregadas como NULL. Para obter mais informações, consulte Usando INSERT INTO... SELECT para importar dados em massa com o mínimo de registro em log e paralelismo.

Ingerir dados de tabelas em diferentes armazéns e lagos

Para CREATE TABLE AS SELECT e INSERT... SELECT, a SELECT instrução também pode fazer referência a tabelas em armazéns diferentes do depósito onde a tabela de destino está armazenada, usando consultas entre depósitos. Isto pode ser conseguido usando a convenção [warehouse_or_lakehouse_name.][schema_name.]table_namede nomenclatura em três partes. Por exemplo, suponha que você tenha os seguintes ativos de espaço de trabalho:

  • Uma casa de lago nomeada cases_lakehouse com os dados de casos mais recentes.
  • Um armazém nomeado reference_warehouse com tabelas usadas para dados de referência.
  • Um depósito chamado research_warehouse onde a tabela de destino é criada.

Uma nova tabela pode ser criada que usa nomenclatura de três partes para combinar dados de tabelas nesses ativos de espaço de trabalho:

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 saber mais sobre consultas entre depósitos, consulte Escrever uma consulta SQL entre bancos de dados.