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

O Warehouse no Microsoft Fabric permite que você crie facilmente uma nova tabela com base em um resultado da consulta T-SQL usando as seguintes instruções T-SQL:

  • CREATE TABLE AS SELECT Instrução (CTAS) que permite criar uma nova tabela em seu armazém de dados com base na saída de uma instrução SELECT.
  • SELECT INTO cláusula de consulta que permite selecionar resultados de qualquer fonte de tabela e redirecionar os resultados para uma nova tabela. Esse é um recurso padrão na linguagem T-SQL.

Essas duas instruções são semelhantes, portanto, os exemplos a seguir se concentram na instrução CTAS.

A instrução CTAS executa a operação de ingestão na nova tabela em paralelo, tornando-a altamente eficiente para a transformação de dados e a criação de novas tabelas em seu workspace.

Você pode usar as seguintes opções para a parte SELECT da instrução CTAS:

  • Lendo uma tabela do warehouse como uma tabela de preparo.
  • Lendo uma pasta Delta Lake no Lakehouse usando uma tabela gerada automaticamente no endpoint de análise SQL para o Lakehouse.
  • Lendo arquivos CSV, Parquet ou JSONL diretamente do Azure Data Lake ou do Azure Blob Storage usando a função OPENROWSET.

Para carregar um conjunto de dados de exemplo, siga as etapas em Ingerir dados em seu Warehouse usando a instrução COPY para criar os dados de exemplo em seu warehouse.

Criar tabela a partir da tabela Armazém

O primeiro exemplo mostra como criar uma nova tabela que é uma cópia da tabela existente dbo.TaxiTrips , mas filtrada para incluir apenas dados do ano de 2023:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Criar tabela a partir da pasta Delta Lake

As pastas do Delta Lake que são persistidas no OneLake são automaticamente representadas como tabelas se estiverem armazenadas na pasta /Tables em uma lakehouse. O código a seguir cria uma nova tabela TaxiTrips_2023 da pasta do Delta Lake /Tables/TaxiTrips no lakehouse MyLakehouse:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Você pode referenciar a pasta Delta Lake usando a notação de nome de três partes que faz referência ao lakehouse em que os arquivos são armazenados. Todos os exemplos mostrados na seção anterior são aplicáveis às pastas Delta Lake.

Criar tabela do arquivo CSV/Parquet/JSONL

Você também pode criar uma nova tabela diretamente de um arquivo externo usando a OPENROWSET função. Por exemplo, o exemplo de T-SQL a seguir usa marcadores de posição para demonstrar como importar um arquivo Parquet público.

CREATE TABLE dbo.<table_name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;

Você pode criar uma nova tabela transformando dados de um arquivo CSV externo disponível publicamente:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.csv') AS data;

Ou você pode criar uma nova tabela transformando dados de um arquivo JSONL externo disponível publicamente:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl') AS data;

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.

Ingerir dados da tabela Armazém

O código a seguir ingere novos dados de uma tabela de warehouse em uma tabela existente:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

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 uso mínimo de registro e paralelismo.

Ingerir dados da pasta Delta Lake

As pastas delta lake que são mantidas no OneLake são automaticamente representadas como tabelas se forem armazenadas em /Tables pasta em uma lakehouse.

O código a seguir ingere novos dados da seção da pasta do Delta Lake /Tables/TaxiTrips no lakehouse MyLakehouse*.

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Ingerir dados do arquivo CSV/Parquet/JSONL

Você pode usar a OPENROWSET função como fonte para ingerir arquivos Parquet, CSV ou JSON do armazenamento:

INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>') AS data
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Você pode ler vários arquivos usando curingas como *.parquet, ou direcionando diretórios particionados, como /year=*/month=*. Para otimizar o desempenho, aplique filtros na cláusula WHERE para eliminar linhas e partições desnecessárias durante a execução da consulta.

Este exemplo é semelhante aos usados na ingestão com COPY INTO. O comando COPY INTO é mais fácil de usar, especialmente para cargas de dados de origem para destino simples. No entanto, se você precisar transformar dados de origem (como converter valores ou juntar com outras tabelas), o uso do INSERT ... SELECT conferirá a flexibilidade para executar transformações durante a ingestão.

Ingerir dados do OneLake

Você pode usar a OPENROWSET função como fonte para ingerir dados do armazenamento do Fabric OneLake. Substitua {workspaceId} e {lakehouseId} pelos GUIDs de espaço de trabalho e lakehouse correspondentes no exemplo a seguir:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{lakehouseId}/Files/year=*/month=*/*.parquet') AS data
WHERE data.filepath(1) = '2023'

Este exemplo baseia-se no anterior que lê dados do Azure Data Lake Storage. Use essa abordagem quando precisar transformar dados de origem, por exemplo, convertendo valores, unindo-se a outras tabelas ou lendo partições específicas. Nesses casos, o uso INSERT ... SELECT fornece a flexibilidade para aplicar transformações durante a ingestão de dados.

Ingerir dados de tabelas em diferentes warehouses e lakehouses

Para ambos CREATE TABLE AS SELECT e INSERT ... SELECT, a instrução SELECT também pode referenciar tabelas em armazéns diferentes daqueles onde a tabela de destino está armazenada, usando consultas entre diferentes armazéns. 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:

  • Uma lakehouse chamada taxi_lakehouse com os dados mais recentes.
  • Um armazém 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.taxi_trips
AS
SELECT *
FROM taxi_lakehouse.dbo.TaxiTrips AS latest
INNER JOIN reference_warehouse.dbo.TaxiTrips AS reference
ON latest.vendorId_lpep = reference.vendorId_lpep;

Para saber mais sobre consultas entre warehouses, consulte Gravar uma consulta SQL entre bancos de dados.

Auditar e monitorar a ingestão de T-SQL

Tanto as operações CTAS quanto as INSERT ... SELECT executadas por meio do T-SQL aparecem no histórico de consultas/atividade do depósito e podem ser monitoradas junto com outras operações de depósito.

Opções de ingestão de dados

Outras maneiras de ingerir dados em seu warehouse incluem: