Självstudie: Utforska och analysera datasjöar med en serverlös SQL-pool
I den här självstudien får du lära dig hur du utför undersökande dataanalys. Du kombinerar olika Azure Open Datasets med hjälp av en serverlös SQL-pool. Sedan visualiserar du resultatet i Synapse Studio för Azure Synapse Analytics.
Med OPENROWSET(BULK...)
funktionen kan du komma åt filer i Azure Storage.
[OPENROWSET](develop-openrowset.md)
läser innehållet i en fjärrdatakälla, till exempel en fil, och returnerar innehållet som en uppsättning rader.
Automatisk schemainferens
Eftersom data lagras i Parquet-filformatet är automatisk schemainferens tillgänglig. Du kan köra frågor mot data utan att ange datatyperna för alla kolumner i filerna. Du kan också använda mekanismen filepath
för virtuella kolumner och funktionen för att filtrera bort en viss delmängd av filer.
Anteckning
Standardsortering är SQL_Latin1_General_CP1_CI_ASIf
. För en icke-standardsortering bör du ta hänsyn till skiftlägeskänslighet.
Om du skapar en databas med skiftlägeskänslig sortering när du anger kolumner ska du se till att använda rätt namn på kolumnen.
Ett kolumnnamn tpepPickupDateTime
skulle vara korrekt medan tpeppickupdatetime
det inte skulle fungera i en sortering som inte är standard.
I den här självstudien används en datauppsättning om New York City (NYC) Taxi:
- Datum och tider för upphämtning och avlämning
- Platser för upphämtning och avlämning
- Reseavstånd
- Specificerade priser
- Frekvenstyper
- Betalningstyper
- Antal passagerare som rapporterats av föraren
Om du vill bekanta dig med NYC Taxi-data kör du följande fråga:
SELECT TOP 100 * FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',
FORMAT='PARQUET'
) AS [nyc]
På samma sätt kan du köra frågor mot datauppsättningen för helgdagar med hjälp av följande fråga:
SELECT TOP 100 * FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/holidaydatacontainer/Processed/*.parquet',
FORMAT='PARQUET'
) AS [holidays]
Du kan också fråga datamängden Väderdata med hjälp av följande fråga:
SELECT
TOP 100 *
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/isdweatherdatacontainer/ISDWeather/year=*/month=*/*.parquet',
FORMAT='PARQUET'
) AS [weather]
Du kan lära dig mer om innebörden av de enskilda kolumnerna i beskrivningarna av datauppsättningarna:
Tidsserier, säsongsvariationer och avvikande analys
Du kan sammanfatta det årliga antalet taxiresor med hjälp av följande fråga:
SELECT
YEAR(tpepPickupDateTime) AS current_year,
COUNT(*) AS rides_per_year
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',
FORMAT='PARQUET'
) AS [nyc]
WHERE nyc.filepath(1) >= '2009' AND nyc.filepath(1) <= '2019'
GROUP BY YEAR(tpepPickupDateTime)
ORDER BY 1 ASC
Följande kodfragment visar resultatet för det årliga antalet taxiresor:
Data kan visualiseras i Synapse Studio genom att växla från tabellen till diagramvyn. Du kan välja bland olika diagramtyper, till exempel Område, Stapel, Kolumn, Linje, Cirkel och Punkt. I det här fallet ritar du stapeldiagrammet med kolumnen Kategori inställd på current_year:
Från den här visualiseringen kan du se en trend med att minska antalet turer genom åren. Förmodligen beror denna minskning på den senaste tidens ökade popularitet hos samåkningsföretag.
Anteckning
När den här självstudien skrivs är data för 2019 ofullständiga. Som ett resultat finns det en enorm minskning av antalet åkattraktioner för det året.
Du kan fokusera analysen på ett enda år, till exempel 2016. Följande fråga returnerar det dagliga antalet turer under det året:
SELECT
CAST([tpepPickupDateTime] AS DATE) AS [current_day],
COUNT(*) as rides_per_day
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',
FORMAT='PARQUET'
) AS [nyc]
WHERE nyc.filepath(1) = '2016'
GROUP BY CAST([tpepPickupDateTime] AS DATE)
ORDER BY 1 ASC
Följande kodfragment visar resultatet för den här frågan:
Återigen kan du visualisera data genom att rita kolumndiagrammet med kolumnen Kategori inställd på current_day och kolumnen Förklaring (serie) inställd på rides_per_day.
I diagrammet kan du se att det finns ett veckomönster med lördagar som toppdag. Under sommarmånaderna är det färre taxiresor på grund av semester. Observera också några betydande droppar i antalet taxiresor utan ett tydligt mönster av när och varför de inträffar.
Därefter ser du om minskningen av åkattraktioner korrelerar med helgdagar. Kontrollera om det finns en korrelation genom att ansluta datauppsättningen nyc taxi rides med datauppsättningen Helgdagar:
WITH taxi_rides AS (
SELECT
CAST([tpepPickupDateTime] AS DATE) AS [current_day],
COUNT(*) as rides_per_day
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=*/puMonth=*/*.parquet',
FORMAT='PARQUET'
) AS [nyc]
WHERE nyc.filepath(1) = '2016'
GROUP BY CAST([tpepPickupDateTime] AS DATE)
),
public_holidays AS (
SELECT
holidayname as holiday,
date
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/holidaydatacontainer/Processed/*.parquet',
FORMAT='PARQUET'
) AS [holidays]
WHERE countryorregion = 'United States' AND YEAR(date) = 2016
),
joined_data AS (
SELECT
*
FROM taxi_rides t
LEFT OUTER JOIN public_holidays p on t.current_day = p.date
)
SELECT
*,
holiday_rides =
CASE
WHEN holiday is null THEN 0
WHEN holiday is not null THEN rides_per_day
END
FROM joined_data
ORDER BY current_day ASC
Markera antalet taxiresor under helgdagar. För det ändamålet väljer du current_day för kolumnen Kategori och rides_per_day och holiday_rides som kolumnerna Förklaring (serie).
I diagrammet kan du se att antalet taxiresor är lägre under helgdagarna. Det finns fortfarande en oförklarlig stor nedgång den 23 januari. Nu ska vi kontrollera vädret i NYC den dagen genom att fråga datauppsättningen Väderdata:
SELECT
AVG(windspeed) AS avg_windspeed,
MIN(windspeed) AS min_windspeed,
MAX(windspeed) AS max_windspeed,
AVG(temperature) AS avg_temperature,
MIN(temperature) AS min_temperature,
MAX(temperature) AS max_temperature,
AVG(sealvlpressure) AS avg_sealvlpressure,
MIN(sealvlpressure) AS min_sealvlpressure,
MAX(sealvlpressure) AS max_sealvlpressure,
AVG(precipdepth) AS avg_precipdepth,
MIN(precipdepth) AS min_precipdepth,
MAX(precipdepth) AS max_precipdepth,
AVG(snowdepth) AS avg_snowdepth,
MIN(snowdepth) AS min_snowdepth,
MAX(snowdepth) AS max_snowdepth
FROM
OPENROWSET(
BULK 'https://azureopendatastorage.blob.core.windows.net/isdweatherdatacontainer/ISDWeather/year=*/month=*/*.parquet',
FORMAT='PARQUET'
) AS [weather]
WHERE countryorregion = 'US' AND CAST([datetime] AS DATE) = '2016-01-23' AND stationname = 'JOHN F KENNEDY INTERNATIONAL AIRPORT'
Resultatet av frågan visar att minskningen av antalet taxiresor inträffade eftersom:
- Det var en snöstorm den dagen i NYC med tung snö (~ 30 cm).
- Det var kallt (temperaturen var under noll grader Celsius).
- Det var blåsigt (~10 m/s).
Den här självstudien har visat hur en dataanalytiker snabbt kan utföra undersökande dataanalys. Du kan kombinera olika datauppsättningar med hjälp av en serverlös SQL-pool och visualisera resultatet med hjälp av Azure Synapse Studio.
Nästa steg
Information om hur du ansluter serverlös SQL-pool för att Power BI Desktop och skapa rapporter finns i Ansluta serverlös SQL-pool för att Power BI Desktop och skapa rapporter.
Information om hur du använder externa tabeller i en serverlös SQL-pool finns i Använda externa tabeller med Synapse SQL