Compartilhar via


Consultar dados em Azure Data Lake usando Azure Data Explorer

Azure Data Lake Storage é uma solução data lake altamente escalonável e econômica para análise de Big Data. Ele combina o poder de um sistema de arquivos de alto desempenho com grande escala e economia a fim de ajudar a reduzir o tempo para obter insights. Data Lake Storage Gen2 estende os recursos de Armazenamento de Blobs do Azure e é otimizado para cargas de trabalho de análise.

Azure Data Explorer integra-se com Armazenamento de Blobs do Azure e Azure Data Lake Storage (Gen1 e Gen2), fornecendo acesso rápido, armazenado em cache e indexado aos dados armazenados no armazenamento externo. Você pode analisar e consultar dados sem ingestão prévia em Azure Data Explorer. Você também pode consultar dados externos ingeridos e não ingeridos simultaneamente. Para obter mais informações, consulte como criar uma tabela externa usando o assistente de interface do usuário da Web Azure Data Explorer. Para obter uma breve visão geral, consulte tabelas externas.

Dica

O melhor desempenho de consulta requer a ingestão de dados em Azure Data Explorer. A capacidade de consultar dados externos sem ingestão prévia deve ser usada somente para dados históricos ou para dados que raramente são consultados. Otimize o desempenho da consulta de dados externos para obter melhores resultados.

Criar uma tabela externa

Digamos que você tenha muitos arquivos CSV contendo informações históricas sobre produtos armazenados em um depósito e queira fazer uma análise rápida para encontrar os cinco produtos mais populares do ano anterior. Neste exemplo, os arquivos CSV são semelhantes ao seguinte:

Timestamp ID do Produto Descrição do Produto
2019-01-01 11:21:00 TO6050 Disquete DS/HD de 3,5 pol.
2019-01-01 11:30:55 YDX1 Sintetizador DX1 Yamaha
... ... ...

Os arquivos são armazenados no armazenamento de Blobs Azure mycompanystorage em um contêiner chamado archivedproducts, particionado por data:

https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/01/part-00000-7e967c99-cf2b-4dbb-8c53-ce388389470d.csv.gz
https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/01/part-00001-ba356fa4-f85f-430a-8b5a-afd64f128ca4.csv.gz
https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/01/part-00002-acb644dc-2fc6-467c-ab80-d1590b23fc31.csv.gz
https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/01/part-00003-cd5fad16-a45e-4f8c-a2d0-5ea5de2f4e02.csv.gz
https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/02/part-00000-ffc72d50-ff98-423c-913b-75482ba9ec86.csv.gz
...

Para executar uma consulta KQL diretamente nesses arquivos CSV, use o comando .create external table para definir uma tabela externa no Azure Data Explorer. Para obter mais informações sobre as opções de comando para criação de tabela externa, confira Comandos de tabela externa.

.create external table ArchivedProducts(Timestamp:datetime, ProductId:string, ProductDescription:string)
kind=blob
partition by (Date:datetime = bin(Timestamp, 1d))
dataformat=csv
(
  h@'https://mycompanystorage.blob.core.windows.net/archivedproducts;StorageSecretKey'
)

A tabela externa agora está visível no painel esquerdo da interface do usuário da Web Azure Data Explorer:

Captura de tela que mostra a tabela externa na interface web do Azure Data Explorer.

Permissões da tabela externa

Examine as seguintes permissões de tabela:

  • O usuário do banco de dados pode criar uma tabela externa. O criador da tabela se torna automaticamente o administrador da tabela.
  • O administrador do cluster, do banco de dados ou da tabela pode editar uma tabela existente.
  • Qualquer usuário ou leitor de banco de dados pode consultar uma tabela externa.

Consultando uma tabela externa

Depois que uma tabela externa é definida, a função external_table() pode ser usada para fazer referência a ela. O restante da consulta corresponde à linguagem de consulta Kusto padrão.

external_table("ArchivedProducts")
| where Timestamp > ago(365d)
| summarize Count=count() by ProductId,
| top 5 by Count

Consultando dados externos e ingeridos juntos

Você pode consultar tabelas externas e tabelas de dados ingeridos dentro da mesma consulta. Você pode join ou union a tabela externa com outros dados do Azure Data Explorer, servidores SQL ou outras fontes. Use um let( ) statement para atribuir um nome abreviado a uma referência de tabela externa.

No exemplo abaixo, Produtos é uma tabela de dados ingerida e ArchivedProducts é uma tabela externa que definimos:

let T1 = external_table("ArchivedProducts") |  where TimeStamp > ago(100d);
let T = Products; //T is an internal table
T1 | join T on ProductId | take 10

Consultando formatos de dados hierárquicos

Azure Data Explorer permite consultar formatos hierárquicos, como JSON, Parquet, Avro e ORC. Para mapear o esquema de dados hierárquicos para um esquema de tabela externa (se for diferente), use os comandos de mapeamento de tabela externa. Por exemplo, se você quiser consultar arquivos de log JSON com o seguinte formato:

{
  "timestamp": "2019-01-01 10:00:00.238521",
  "data": {
    "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "method": "RefreshTableMetadata"
  }
}
{
  "timestamp": "2019-01-01 10:00:01.845423",
  "data": {
    "tenant": "bbbbcccc-1111-dddd-2222-eeee3333ffff",
    "method": "GetFileList"
  }
}
...

A definição da tabela externa será semelhante a esta:

.create external table ApiCalls(Timestamp: datetime, TenantId: guid, MethodName: string)
kind=blob
dataformat=multijson
(
   h@'https://storageaccount.blob.core.windows.net/container1;StorageSecretKey'
)

Defina um mapeamento JSON que correlacione os campos de dados aos campos de definição da tabela externa:

.create external table ApiCalls json mapping 'MyMapping' '[{"Column":"Timestamp","Properties":{"Path":"$.timestamp"}},{"Column":"TenantId","Properties":{"Path":"$.data.tenant"}},{"Column":"MethodName","Properties":{"Path":"$.data.method"}}]'

Quando você consulta a tabela externa, o mapeamento é invocado, e os dados relevantes são mapeados para as colunas da tabela externa.

external_table('ApiCalls') | take 10

Para obter mais informações sobre a sintaxe de mapeamento, confira mapeamentos de dados.

Consultar a tabela externa TaxiRides no cluster de ajuda

Use o cluster de teste chamado help para experimentar diferentes recursos de Azure Data Explorer. O cluster ajuda contém uma definição de tabela externa para um conjunto de dados de táxis da cidade de Nova York que inclui bilhões de corridas de táxi.

Criar a tabela externa TaxiRides

Esta seção mostra a consulta usada para criar a tabela externa TaxiRides no cluster ajuda. Como você já criou essa tabela, você pode ignorar esta seção e ir diretamente para consultar dados da tabela externa TaxiRides.

.create external table TaxiRides
(
  trip_id: long,
  vendor_id: string,
  pickup_datetime: datetime,
  dropoff_datetime: datetime,
  store_and_fwd_flag: string,
  rate_code_id: int,
  pickup_longitude: real,
  pickup_latitude: real,
  dropoff_longitude: real,
  dropoff_latitude: real,
  passenger_count: int,
  trip_distance: real,
  fare_amount: real,
  extra: real,
  mta_tax: real,
  tip_amount: real,
  tolls_amount: real,
  ehail_fee: real,
  improvement_surcharge: real,
  total_amount: real,
  payment_type: string,
  trip_type: int,
  pickup: string,
  dropoff: string,
  cab_type: string,
  precipitation: int,
  snow_depth: int,
  snowfall: int,
  max_temperature: int,
  min_temperature: int,
  average_wind_speed: int,
  pickup_nyct2010_gid: int,
  pickup_ctlabel: string,
  pickup_borocode: int,
  pickup_boroname: string,
  pickup_ct2010: string,
  pickup_boroct2010: string,
  pickup_cdeligibil: string,
  pickup_ntacode: string,
  pickup_ntaname: string,
  pickup_puma: string,
  dropoff_nyct2010_gid: int,
  dropoff_ctlabel: string,
  dropoff_borocode: int,
  dropoff_boroname: string,
  dropoff_ct2010: string,
  dropoff_boroct2010: string,
  dropoff_cdeligibil: string,
  dropoff_ntacode: string,
  dropoff_ntaname: string,
  dropoff_puma: string
)
kind=blob
partition by (Date:datetime = bin(pickup_datetime, 1d))
dataformat=csv
(
    h@'https://storageaccount.blob.core.windows.net/container1;secretKey'
)

Você pode encontrar a tabela TaxiRides criada examinando o painel esquerdo da interface do usuário da Web Azure Data Explorer.

Consultar os dados da tabela externa TaxiRides

Entrar no https://dataexplorer.azure.com/clusters/help/databases/Samples.

Consultar a tabela externa TaxiRides sem particionamento

Execute essa consulta na tabela externa TaxiRides para mostrar as corridas de cada dia da semana, em todo o conjunto de dados.

external_table("TaxiRides")
| summarize count() by dayofweek(pickup_datetime)
| render columnchart

Essa consulta mostra o dia da semana mais ocupado. Como os dados não estão particionados, a consulta pode levar vários minutos para retornar os resultados.

Representação gráfica para renderizar consultas não particionadas.

Consultar a tabela externa TaxiRides com particionamento

Execute esta consulta na tabela externa TaxiRides para mostrar os tipos de táxi (amarelo ou verde) usados em janeiro de 2017.

external_table("TaxiRides")
| where pickup_datetime between (datetime(2017-01-01) .. datetime(2017-02-01))
| summarize count() by cab_type
| render piechart

Essa consulta usa particionamento, o que otimiza o tempo e o desempenho da consulta. A consulta filtra com base em uma coluna particionada (pickup_datetime) e retorna os resultados em poucos segundos.

Diagrama para renderizar consultas particionadas.

Você pode escrever outras consultas a serem executadas na tabela externa TaxiRides e saber mais sobre os dados.

Otimizar o desempenho da consulta

Otimize o desempenho da consulta no lake usando as seguintes melhores práticas para consultar dados externos.

Formato de dados

  • Use um formato colunar para consultas analíticas, pelos seguintes motivos:
    • Somente as colunas relevantes para uma consulta podem ser lidas.
    • As técnicas de codificação de coluna podem reduzir significativamente o tamanho dos dados.
  • Explorador de Dados do Azure suporta os formatos colunais Parquet e ORC. O formato Parquet é recomendado devido à implementação otimizada.

Azure região

Verifique se os dados externos estão na mesma região Azure que o cluster Azure Data Explorer. Essa configuração reduz o custo e o tempo de busca de dados.

Tamanho do arquivo

O tamanho do arquivo ideal é de centenas de MB (até 1 GB) por arquivo. Evite muitos arquivos pequenos que exijam sobrecarga desnecessária, como o processo de enumeração de arquivos mais lento e o uso limitado do formato de coluna. O número de arquivos deve ser maior do que o número de núcleos de CPU em seu cluster Azure Data Explorer.

Compactação

Use a compactação para reduzir a quantidade de dados que estão sendo buscados do armazenamento remoto. Para o formato Parquet, utilize o mecanismo interno de compactação do Parquet, que comprime os grupos de colunas de forma individual, permitindo sua leitura isolada. Para validar o uso do mecanismo de compactação, verifique se os arquivos estão nomeados da seguinte maneira: <filename>.gz.parquet ou <filename>.snappy.parquet e não <filename>.parquet.gz.

Particionamento

Organize os dados usando partições de "pasta" que permitam à consulta ignorar caminhos irrelevantes. Ao planejar o particionamento, considere o tamanho do arquivo e os filtros comuns das consultas, como carimbo de data/hora ou ID do locatário.

Tamanho da VM

Selecione os SKUs de VM com mais núcleos e maior taxa de transferência de rede (a memória é menos importante). Para obter mais informações, consulte Selecione a SKU de VM correta para o cluster Azure Data Explorer.