Sdílet prostřednictvím


Dotazování dat v Azure Data Lake pomocí Azure Data Explorer

Azure Data Lake Storage je vysoce škálovatelné a nákladově efektivní řešení Data Lake pro analýzy velkých objemů dat. Kombinuje výkon vysoce výkonného systému souborů s obrovským měřítkem a úsporností, což vám pomůže zkrátit dobu potřebnou k získání přehledu. 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), 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 do Azure Data Explorer. Můžete se také dotazovat na ingestovaná a neingestovaná externí data současně. Další informace najdete v tématu vytvoření externí tabulky pomocí průvodce webovým uživatelským rozhraním Azure Data Explorer. Stručný přehled najdete v externích tabulkách.

Návod

Nejlepší výkon dotazů vyžaduje příjem dat do Azure Data Explorer. Možnost dotazovat se na externí data 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, abyste se docílili nejlepších výsledků.

Vytvoření externí tabulky

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

Časové razítko ID produktu Popis produktu
2019-01-01 11:21:00 TO6050 3,5 palcová disketa DS/HD
2019-01-01 11:30:55 YDX1 Yamaha DX1 Syntetizátor
... ... ...

Soubory jsou uložené v Azure úložišti objektů blob mycompanystorage v kontejneru s názvem archivedproducts 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
...

K přímému spuštění dotazu KQL na tyto soubory CSV použijte příkaz .create external table k definování externí tabulky v 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í Azure Data Explorer:

Screenshot, která zobrazuje externí tabulku Azure Data Explorer ve webovém uživatelském rozhraní.

Externí oprávnění tabulek

Zkontrolujte následující oprávnění tabulky:

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

Dotazování na externí tabulku

Jakmile je definována externí tabulka, funkci external_table() lze použít k odkazu na ni. Zbytek 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 přijatých dat najednou

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

V následujícím příkladu je Products ingestovanou tabulkou dat a ArchivedProducts je externí tabulkou, kterou jsme definovali:

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í hierarchických formátů dat

Azure Data Explorer umožňuje dotazování hierarchických formátů, jako jsou JSON, Parquet, Avro a ORC. Pokud chcete mapovat hierarchické schéma dat na schéma externí tabulky (pokud je jiné), použijte příkazy mapování externích tabulek. Pokud například chcete dotazovat soubory protokolu JSON s následujícím formátem:

{
  "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"
  }
}
...

Definice externí tabulky vypadá takto:

.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í na externí tabulku se vyvolá mapování a relevantní data se mapují na sloupce externí tabulky.

external_table('ApiCalls') | take 10

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

Dotazování na externí tabulku TaxiRides v pomocném clusteru

K vyzkoušení různých možností Azure Data Explorer použijte testovací cluster s názvem help. Cluster nápovědy obsahuje definici externí tabulky pro datovou sadu taxislužby v New Yorku 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 jste tuto tabulku už vytvořili, můžete tuto část přeskočit a přejít přímo na dotazy na data externí tabulky 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í Azure Data Explorer.

Dotazování na data externí tabulky TaxiRides

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

Provádět dotazování na externí tabulku TaxiRides bez dělení

Spuštěním tohoto dotazu na externí tabulku TaxiRides zobrazte jízdy pro každý den v týdnu v celé datové sadě.

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

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

Reprezentace grafu pro vykreslení nedělených dotazů

Dotazování externí tabulky TaxiRides pomocí particionování

Spuštěním tohoto dotazu na externí tabulce TaxiRides zobrazíte typy taxislužby (žluté nebo zelené) použité 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í, které optimalizuje čas a výkon dotazů. Dotaz filtruje dělený sloupec (pickup_datetime) a vrátí výsledky za několik sekund.

Diagram pro vykreslení dělených dotazů

Můžete napsat další dotazy ke spuštění na 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 z následujících důvodů:
    • Číst se dají jenom sloupce relevantní pro dotaz.
    • Techniky kódování sloupců můžou výrazně snížit velikost dat.
  • Azure Data Explorer podporuje sloupcové formáty Parquet a ORC. Doporučuje se formát Parquet kvůli optimalizovanému provedení.

Azure oblast

Zkontrolujte, jestli jsou externí data ve stejné Azure oblasti jako váš cluster Azure Data Explorer. Toto nastavení snižuje náklady a dobu 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í nepotřebné režijní náklady, například 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 clusteru Azure Data Explorer.

Komprese

Komprese slouží ke snížení množství dat načtených ze vzdáleného úložiště. Pro formát Parquet použijte interní mechanismus komprese Parquet, který komprimuje skupiny sloupců samostatně, takže je můžete číst samostatně. Pokud chcete ověřit použití mechanismu komprese, zkontrolujte, zda jsou soubory pojmenovány takto: <filename>.gz.parquet nebo <filename>.snappy.parquet a nikoli <filename>.parquet.gz.

dělení na části

Uspořádejte svá data pomocí „složkových“ oddílů, které umožňují dotazům přeskočit nerelevantní 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čů s více jádry a vyšší propustností sítě (paměť je méně důležitá). Další informace najdete v tématu Vyberte správnou skladovou položku virtuálního počítače pro váš cluster Azure Data Explorer.