Dotazování dat ve službě Azure Data Lake pomocí Azure Data Explorer

Azure Data Lake Storage je vysoce škálovatelné a nákladově efektivní řešení datového jezera pro analýzy velkých dat. Kombinuje výkon vysoce výkonného systému souborů s obrovským měřítkem a ekonomikou, aby vám pomohl zkrátit čas k přehledům. Data Lake Storage Gen2 rozšiřuje možnosti azure blob Storage a je optimalizovaný pro analytické úlohy.

Azure Data Explorer se integruje s Azure Blob Storage a Azure Data Lake Storage (Gen1 a Gen2) a poskytuje rychlý, uložený a indexovaný přístup k datům uloženým v externím úložišti. Data můžete analyzovat a dotazovat bez předchozího příjmu dat Azure Data Explorer. Můžete se také dotazovat na ingestovaná a neingestovaná externí data současně.

Tip

Nejlepší výkon dotazů vyžaduje příjem dat do Azure Data Explorer. Možnost dotazování externích dat bez předchozího příjmu dat by se měla používat pouze pro historická data nebo zřídka dotazovaná data. Optimalizujte výkon dotazů na externí data, aby byly výsledky co nejlepší.

Vytvoření externí tabulky

Řekněme, že máte velké množství souborů CSV obsahujících historické informace o produktech uložených ve skladu a chcete provést rychlou analýzu, abyste našli pět nejoblíbenějších produktů z minulého roku. V tomto příkladu vypadají soubory CSV jako:

Timestamp ProductId ProductDescription
2019-01-01 11:21:00 TO6050 3.5in DS/HD Floppy Disk
2019-01-01 11:30:55 YDX1 Družová syntezátor DX1
... ... ...

Soubory se ukládají do úložiště objektů blob v Azure mycompanystorage v kontejneru s názvem archivedproducts , který je rozdělený podle 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
...

Pokud chcete spustit dotaz KQL přímo na tyto soubory CSV, pomocí příkazu definujte externí tabulku v .create external table Azure Data Explorer. Další informace o možnostech příkazu pro vytvoření externí tabulky najdete v tématu příkazy externí tabulky.

.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'
)    

Externí tabulka je teď viditelná v levém podokně webového uživatelského rozhraní:

Externí tabulka ve webovém uživatelském rozhraní

Oprávnění k externí tabulce

  • Uživatel databáze může vytvořit externí tabulku. Tvůrce tabulky se automaticky stane správcem tabulky.
  • Cluster, databáze nebo správce tabulek může upravit existující tabulku.
  • Externí tabulku může dotazovat libovolný uživatel nebo čtenář databáze.

Dotazování externí tabulky

Jakmile je externí tabulka definovaná, můžete na tuto funkci external_table() odkazovat. Zbývající část dotazu je standardní dotazovací jazyk Kusto.

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

Dotazování externích a ingestovaných dat najednou

V rámci stejného dotazu se můžete dotazovat jak na externí tabulky, tak na tabulky ingestovaných dat. Můžete nebo join externí union tabulku s dalšími daty z Azure Data Explorer, SQL servery nebo jiných zdrojů. K let( ) statement přiřazení zkrácené názvu externímu odkazu na tabulku použijte .

V následujícím příkladu je Products (Produkty) tabulka ingestovaných dat a ArchivedProducts je externí tabulka, kterou jsme definovali dříve:

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

Dotazování na hierarchické formáty dat

Azure Data Explorer umožňuje dotazování hierarchických formátů, jako jsou JSON , Parquet , a AvroORC . Pokud chcete namapovat schéma hierarchických dat na schéma externí tabulky (pokud se liší), použijte příkazy mapování externích tabulek. Pokud například chcete dotazovat soubory protokolů JSON v následujícím formátu:

{
  "timestamp": "2019-01-01 10:00:00.238521",   
  "data": {    
    "tenant": "e1ef54a6-c6f2-4389-836e-d289b37bcfe0",   
    "method": "RefreshTableMetadata"   
  }   
}   
{
  "timestamp": "2019-01-01 10:00:01.845423",   
  "data": {   
    "tenant": "9b49d0d7-b3e6-4467-bb35-fa420a25d324",   
    "method": "GetFileList"   
  }   
}
...

Definice externí tabulky vypadá takhle:

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

Definujte mapování JSON, které mapuje datová pole na pole definice externí tabulky:

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

Při dotazování externí tabulky se vyvolá mapování a relevantní data se namapují na sloupce externí tabulky:

external_table('ApiCalls') | take 10

Další informace o syntaxi mapování najdete v tématu mapování dat.

Dotazování externí tabulky TaxiRides v clusteru nápovědy

K vyzkoušení různých možností testování použijte testovací Azure Data Explorer. Cluster nápovědy obsahuje definici externí tabulky pro datovou sadu taxislužby města New York obsahující miliardy jízd taxíkem.

Vytvoření externí tabulky TaxiRides

Tato část ukazuje dotaz použitý k vytvoření externí tabulky TaxiRides v clusteru nápovědy. Vzhledem k tomu, že tato tabulka už je vytvořená, můžete tuto část přeskočit a přejít přímo k dotazování na externí tabulková data 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'
)

Vytvořenou tabulku TaxiRides najdete v levém podokně webového uživatelského rozhraní:

Taxislužby vyjížďuje externí tabulku.

Dotazování externích tabulkových dat TaxiRides

Přihlaste se k webu https://dataexplorer.azure.com/clusters/help/databases/Samples.

Dotazování externí tabulky TaxiRides bez dělení

Spusťte tento dotaz na externí tabulku TaxiRides a zobrazte jízdy za každý den v týdnu v celé datové sadě.

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

Tento dotaz zobrazí nejrušnější den v týdnu. Vzhledem k tomu, že data nejsou rozdělená, může vrácení výsledků dotazu trvat až několik minut.

vykreslit dotaz bez oddílů.

Dotazování externí tabulky TaxiRides s dělením

Spusťte tento dotaz na externí tabulku TaxiRides a zobrazte typy taxislužby (žluté nebo zelené), které jste použili v lednu 2017.

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

Tento dotaz používá dělení, což optimalizuje čas a výkon dotazu. Dotaz filtruje dělený sloupec (pickup_datetime) a vrací výsledky během několika sekund.

Vykreslení dělené dotazu

Můžete napsat další dotazy ke spuštění v externí tabulce TaxiRides a získat další informace o datech.

Optimalizace výkonu dotazů

Optimalizujte výkon dotazů v jezeře s využitím následujících osvědčených postupů pro dotazování externích dat.

Formát dat

  • Pro analytické dotazy použijte sloupcový formát, a to z následujících důvodů:
    • Číst lze pouze sloupce, které jsou pro dotaz relevantní.
    • Techniky kódování sloupců mohou výrazně snížit velikost dat.
  • Azure Data Explorer podporuje sloupcové formáty Parquet a ORC. Kvůli optimalizované implementaci se navrhuje formát Parquet.

Oblast Azure

Zkontrolujte, že se externí data nachází ve stejné oblasti Azure jako váš Azure Data Explorer clusteru. Toto nastavení snižuje náklady a čas načítání dat.

Velikost souboru

Optimální velikost souboru je stovky Mb (až 1 GB) na soubor. Vyhněte se mnoha malým souborům, které vyžadují nepožadované režijní náklady, jako je pomalejší proces výčtu souborů a omezené použití sloupcového formátu. Počet souborů by měl být větší než počet jader procesoru ve vašem Azure Data Explorer clusteru.

Komprese

Pomocí komprese můžete snížit množství dat načítáných ze vzdáleného úložiště. Pro formát Parquet použijte interní kompresní mechanismus Parquet, který komprimuje skupiny sloupců samostatně, což vám umožní je číst samostatně. Pokud chcete ověřit použití kompresního mechanismu, zkontrolujte, že jsou soubory pojmenovány takto: název souboru > .gz.parquet nebo název souboru > a ne název souboru <

Dělení

Uspořádejte data pomocí oddílů složek, které umožňují dotazu přeskočit irelevantní cesty. Při plánování dělení zvažte velikost souboru a běžné filtry v dotazech, jako je časové razítko nebo ID tenanta.

Velikost virtuálního počítače

Vyberte skladové položky virtuálních počítače s více jádry a vyšší propustností sítě (paměť je méně důležitá). Další informace najdete v tématu Výběr správné SKU virtuálního počítače pro váš Azure Data Explorer cluster.

Další kroky

  • Dotazování na data v Azure Data Lake pomocí Azure Data Explorer. Naučte se psát dotazy a odvozovat z dat další přehledy.