Egyéni Azure Stream Analytics-blobkimenet particionálása
Az Azure Stream Analytics egyéni mezőkkel vagy attribútumokkal és egyéni DateTime elérésiút-mintákkal támogatja az egyéni blobkimenet particionálását.
Egyéni mező vagy attribútumok
Az egyéni mező- vagy bemeneti attribútumok javítják az alsóbb rétegbeli adatfeldolgozási és jelentéskészítési munkafolyamatokat azáltal, hogy nagyobb mértékben szabályozják a kimenetet.
Partíciókulcs beállításai
A bemeneti adatok particionálásához használt partíciókulcs vagy oszlopnév tartalmazhat a blobnevekhez elfogadott karaktereket. A beágyazott mezők nem használhatók partíciókulcsként, kivéve, ha aliasokkal együtt használják, de bizonyos karakterek használatával fájlhierarchiát hozhat létre. Az alábbi lekérdezéssel például létrehozhat egy oszlopot, amely két másik oszlopból származó adatokat kombinálva egyedi partíciókulcsot hoz létre.
SELECT name, id, CONCAT(name, "/", id) AS nameid
A partíciókulcsnak NVARCHAR(MAX), BIGINT, FLOAT vagy BIT (1.2 kompatibilitási szint vagy magasabb) kell lennie. A DateTime, a Tömb és a Rekord típus nem támogatott, de partíciókulcsként is használható, ha sztringekké konvertálják őket. További információ: Azure Stream Analytics-adattípusok.
Példa
Tegyük fel, hogy egy feladat egy külső videojáték-szolgáltatáshoz csatlakoztatott élő felhasználói munkamenetekből származó bemeneti adatokat vesz fel, ahol a betöltött adatok egy oszlopot tartalmaznak client_id a munkamenetek azonosításához. Az adatok client_id szerinti particionálásához állítsa be a Blob Elérési út mintája mezőt úgy, hogy a feladat létrehozásakor szerepeljen egy partíció jogkivonata ({client_id} ). A különböző client_id értékekkel rendelkező adatok a Stream Analytics-feladaton keresztül haladnak végig, a kimeneti adatok mappánkénti egyetlen client_id érték alapján külön mappákba lesznek mentve.
Hasonlóképpen, ha a feladat bemenete több millió érzékelő érzékelőadataiból származik, ahol minden érzékelőnek volt egy sensor_id, az elérésiút-minta {sensor_id} lesz, amely az egyes érzékelők adatait különböző mappákba particionálja.
A REST API használatakor a kérelemhez használt JSON-fájl kimeneti szakasza a következő képhez hasonlóan néz ki:
A feladat futásának megkezdése után a tároló a clients
következő képhez hasonlóan nézhet ki:
Minden mappa több blobot tartalmazhat, amelyekben minden blob egy vagy több rekordot tartalmaz. A fenti példában egyetlen blob található egy "060000000" címkével ellátott mappában a következő tartalommal:
Figyelje meg, hogy a blob minden rekordja rendelkezik egy client_id oszloptal, amely megegyezik a mappa nevével, mivel a kimeneti útvonal kimenetének particionálásához használt oszlop client_id.
Korlátozások
Az Elérési út minta blob kimeneti tulajdonságában csak egy egyéni partíciókulcs engedélyezett. Az alábbi elérésiút-minták mindegyike érvényes:
- cluster1/{date}/{aFieldInMyData}
- cluster1/{time}/{aFieldInMyData}
- cluster1/{aFieldInMyData}
- cluster1/{date}/{time}/{aFieldInMyData}
Ha az ügyfelek egynél több bemeneti mezőt szeretnének használni, a CONCAT használatával létrehozhatnak egy összetett kulcsot a blobkimenet egyéni elérésiút-partíciójának lekérdezésében. Például: a bemenetből válassza az összefűzést (col1, col2) compositeColumn in blobOutput értékre. Ezután megadhatja a compositeColumn értéket egyéni elérési útként a Blob Storage-ban.
A partíciókulcsok nem érzéketlenek a kis- és nagybetűkre, ezért a partíciókulcsok hasonlóak
John
ésjohn
egyenértékűek. A kifejezések partíciókulcsként sem használhatók. A(z) {columnA + columnB} például nem működik.Ha egy bemeneti adatfolyam olyan rekordokból áll, amelyek partíciókulcs-számossága 8000 alatt van, a rekordok hozzá lesznek fűzve a meglévő blobokhoz, és csak szükség esetén hoznak létre új blobokat. Ha a számosság meghaladja a 8000-et, nincs garancia arra, hogy a meglévő blobok írása folyamatban van, és nem jönnek létre új blobok tetszőleges számú, azonos partíciókulccsal rendelkező rekordhoz.
Ha a blobkimenet nem módosíthatóként van konfigurálva, a Stream Analytics minden egyes adatküldéskor létrehoz egy új blobot.
Egyéni DateTime-elérésiút-minták
Az egyéni DateTime elérésiút-minták lehetővé teszik a Hive Streaming-konvenciókhoz igazodó kimeneti formátum megadását, így az Azure Stream Analytics képes adatokat küldeni az Azure HDInsightnak és az Azure Databricksnek továbbfeldolgozás céljából. Az egyéni DateTime-elérésiút-minták egyszerűen implementálhatóak a datetime
blobkimenet Elérésiút-előtag mezőjében található kulcsszó és a formátumkijelölő használatával. Például: {datetime:yyyy}
.
Támogatott jogkivonatok
A következő formátumkijelölő jogkivonatok használhatók önállóan vagy kombinálva az egyéni DateTime-formátumok eléréséhez:
Formátumkijelölő | Description | Eredmények a 2018-01-02T10:06:08 példaidőn |
---|---|---|
{datetime:yyyy} | Az év négyjegyű számként | 2018 |
{datetime:MM} | Hónap 01 és 12 között | 01 |
{datetime:M} | Hónap 1 és 12 között | 1 |
{datetime:dd} | Nap 01 és 31 között | 02 |
{datetime:d} | Nap 1 és 31 között | 2 |
{datetime:HH} | Óra 24 órás formátumban, 00 és 23 között | 10 |
{datetime:mm} | Percek 00 és 60 között | 06 |
{datetime:m} | Percek 0 és 60 között | 6 |
{datetime:ss} | Másodperc 00 és 60 között | 08 |
Ha nem szeretne egyéni DateTime-mintákat használni, hozzáadhatja a(z) {date} és/vagy {time} tokent az Elérési út előtaghoz, hogy létrehozhassa a beépített DateTime-formátumokat tartalmazó legördülő listát.
Bővíthetőség és korlátozások
Annyi tokent használhat, {datetime:<specifier>}
amennyit csak szeretne az elérésiút-mintában, amíg el nem éri az Elérési út előtag karakterkorlátját. A formátumkijelölők nem kombinálhatók egyetlen jogkivonaton belül a dátum- és idő legördülő listákban már felsorolt kombinációkon túl.
A következő elérésiút-partícióhoz logs/MM/dd
:
Érvényes kifejezés | Érvénytelen kifejezés |
---|---|
logs/{datetime:MM}/{datetime:dd} |
logs/{datetime:MM/dd} |
Ugyanazt a formátumkijelölőt többször is használhatja az Elérési út előtagban. A jogkivonatot minden alkalommal meg kell ismételni.
Hive Streaming-konvenciók
A Blob Storage egyéni elérésiút-mintái a Hive Streaming-konvencióval használhatók, amely elvárja, hogy a mappák címkéje column=
szerepeljen a mappanévben.
Például: year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}
.
Az egyéni kimenet kiküszöböli a táblák módosítását és a partíciók manuális hozzáadását az Azure Stream Analytics és a Hive közötti portadatokhoz. Ehelyett számos mappa adható hozzá automatikusan a következő használatával:
MSCK REPAIR TABLE while hive.exec.dynamic.partition true
Példa
Hozzon létre egy tárfiókot, egy erőforráscsoportot, egy Stream Analytics-feladatot és egy bemeneti forrást az Azure Stream Analytics Azure Portal rövid útmutató alapján. Használja ugyanazokat a mintaadatokat, amelyeket a rövid útmutatóban is használt, a GitHubon is.
Hozzon létre egy blobkimeneti fogadót a következő konfigurációval:
A teljes útvonalminta a következő:
year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}
A feladat indításakor a blobtárolóban létrejön egy elérésiút-minta alapján létrehozott mappastruktúra. Lehatolást végezhet a napi szintig.