Ingerir dados no warehouse usando o Transact-SQL

Aplica-se a:✅Warehouse no Microsoft Fabric

A linguagem Transact-SQL oferece opções que você pode usar para carregar dados em escala de tabelas existentes em seu lakehouse e warehouse em novas tabelas em seu warehouse. Essas opções serã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 warehouse a partir da saída de uma instrução SELECT. Ele executa a operação de ingestão na nova tabela em paralelo, tornando-a altamente eficiente para transformação de dados e criação de novas tabelas em seu workspace.

Observação

Os exemplos nesse artigo usam o conjunto de dados de exemplo da covid-19 do Bing. Para carregar o conjunto de dados de exemplo, siga as etapas em Como ingerir dados em seu Warehouse usando a instrução COPY para criar os dados de exemplo em seu warehouse.

O primeiro exemplo ilustra como criar uma nova tabela que é uma cópia da tabela dbo.[bing_covid-19_data_2023] existente, 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 colunas year, month, dayofmonth com valores obtidos da coluna updated na tabela de origem. Isso pode ser útil se você estiver tentando visualizar dados de infecção por ano ou ver 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 coluna month 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 nessa nova tabela, podemos ver que o Estados Unidos observou casos mais confirmados ao longo de todos os anos no mês de January, seguido por December e October. April é o mês com o menor número de casos no geral:

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

Captura de tela dos resultados da consulta mostrando o número de infecções por mês nos Estados Unidos, ordenados por mês, em ordem decrescente. O número do mês 1 é mostrado na parte superior.

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 padrão INSERT... 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 instrução SELECT podem ser qualquer consulta válida, desde que os tipos de coluna de consulta resultantes se alinhem com as colunas na tabela de destino. Se os nomes de coluna forem especificados e incluirem 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 registro e paralelismo mínimos.

Ingerir dados de tabelas em diferentes warehouses e lakehouses

Para CREATE TABLE AS SELECT e INSERT... SELECT, a SELECT instrução também pode referenciar tabelas em warehouses diferentes do warehouse onde sua tabela de destino está armazenada, usando consultas entre warehouses. Isso pode ser obtido usando a convenção de nomenclatura de três partes [warehouse_or_lakehouse_name.][schema_name.]table_name. Por exemplo, suponha que você tenha os seguintes ativos de workspace:

  • Um lakehouse chamado cases_lakehouse com os dados mais recentes do caso.
  • Um warehouse chamado reference_warehouse com tabelas usadas para dados de referência.
  • Um warehouse 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 workspace:

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 warehouses, consulte Gravar uma consulta SQL entre bancos de dados.