karıştırma sorgusu
Şunlar için geçerlidir: ✅Microsoft Fabric✅
Sorgu shuffle
, stratejiyi destekleyen bir dizi işleçle kullanılan anlamsal koruma dönüşümüdür shuffle
. İlgili verilere bağlı olarak, stratejiyle shuffle
sorgulama daha iyi performans sağlayabilir. Anahtar (shuffle
anahtar, anahtar, join
summarize
anahtar veya make-series
anahtar) yüksek kardinaliteye sahip olduğunda partition
ve normal işleç sorgusu sorgu sınırlarına ulaştığında karıştırma sorgu stratejisini kullanmak daha iyidir.
Karıştırma komutuyla aşağıdaki işleçleri kullanabilirsiniz:
Sorgu stratejisini shuffle
kullanmak için veya hint.strategy = shuffle
ifadesini hint.shufflekey = <key>
ekleyin. kullandığınızda hint.strategy=shuffle
, işleç verileri tüm anahtarlar tarafından karıştırılır. Bileşik anahtar benzersiz olduğunda ancak her anahtar yeterince benzersiz olmadığında bu ifadeyi kullanın, bu nedenle karıştırılmış işlecin tüm anahtarlarını kullanarak verileri karıştıracaksınız.
Verileri karıştırma stratejisiyle bölümlere ayırırken, veri yükü tüm küme düğümlerinde paylaşılır. Her düğüm, verilerin bir bölümünü işler. Varsayılan bölüm sayısı, küme düğümlerinin sayısına eşittir.
Bölüm numarası, bölüm sayısını denetleyen söz dizimi hint.num_partitions = total_partitions
kullanılarak geçersiz kılınabilir. Bu, kümede az sayıda küme düğümü olduğunda ve varsayılan bölüm sayısı küçük olduğunda ve sorgu başarısız olduğunda veya uzun bir yürütme süresi aldığında kullanışlıdır.
Not
Birçok bölüm kullanmak daha fazla küme kaynağı tüketebilir ve performansı düşürebilir. ile hint.strategy = shuffle
başlayarak bölüm numarasını dikkatlice seçin ve bölümleri aşamalı olarak artırmaya başlayın.
Bazı durumlarda, hint.strategy = shuffle
yok sayılır ve sorgu stratejide shuffle
çalışmaz. Bu, aşağıdaki durumlarda oluşabilir:
- işlecinin
join
sol tarafında veyashuffle
sağ tarafında başka birjoin
uyumlu işleci (summarize
,make-series
partition
veya ) vardır. - İşleç
summarize
, sorguda başka birshuffle
uyumlu işleç (join
,summarize
veyamake-series
partition
) sonra görünür.
Sözdizimi
İle hint.strategy
= shuffle
T|
DataExpression|
join
hint.strategy
= shuffle
(
DataExpression)
T|
summarize
hint.strategy
= shuffle
DataExpression
T|
Sorgu|
bölümü hint.strategy
= shuffle
(
Alt Sorgusu)
Anahtarla hint.shufflekey
=
T|
DataExpression|
join
hint.shufflekey
= tuşu(
DataExpression)
T|
summarize
hint.shufflekey
= tuşuDataExpression
T|
make-series
hint.shufflekey
= tuşuDataExpression
T|
Sorgu|
bölüm hint.shufflekey
= anahtarı(
Alt Sorgusu)
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Zorunlu | Açıklama |
---|---|---|---|
T | string |
✔️ | Verileri işleç tarafından işlenecek tablosal kaynak. |
DataExpression | string |
Örtük veya açık bir tablosal dönüşüm ifadesi. | |
Sorgu | string |
T kayıtlarında bir dönüştürme ifadesi çalıştırılır. | |
key | string |
Anahtar join , anahtar, summarize make-series anahtar veya partition anahtar kullanın. |
|
Alt Sorgu | string |
Dönüştürme ifadesi. |
Not
Seçilen söz dizimine bağlı olarak DataExpression veya Query belirtilmelidir.
Örnekler
Bu bölümdeki örnekte, kullanmaya başlamanıza yardımcı olması için söz diziminin nasıl kullanılacağı gösterilmektedir.
Bu makaledeki örneklerde, Örnekleri veritabanındaki
StormEvents
tablosu gibi yardım kümesiiçindeki genel kullanıma açık tablolar kullanılır.
Bu makaledeki örneklerde, Weather analytics örnek veriiçindeki
StormEvents
tablosu gibi genel kullanıma açık tablolar kullanılır.
Karışık olarak özetle özelliğini kullanma
shuffle
işleci ile summarize
strateji sorgusu, her düğümün verilerin bir bölümünü işlediği tüm küme düğümlerindeki yükü paylaşır.
StormEvents
| summarize hint.strategy = shuffle count(), avg(InjuriesIndirect) by State
| count
Çıktı
Sayı |
---|
67 |
Karıştırma ile birleştirmeyi kullanma
StormEvents
| where State has "West"
| where EventType has "Flood"
| join hint.strategy=shuffle
(
StormEvents
| where EventType has "Hail"
| project EpisodeId, State, DamageProperty
)
on State
| count
Çıktı
Sayı |
---|
103 |
Karıştırma ile make-series kullanma
StormEvents
| where State has "North"
| make-series hint.shufflekey = State sum(DamageProperty) default = 0 on StartTime in range(datetime(2007-01-01 00:00:00.0000000), datetime(2007-01-31 23:59:00.0000000), 15d) by State
Çıktı
State | sum_DamageProperty | StartTime |
---|---|---|
KUZEY DAKOTA | [60000,0,0] | ["2006-12-31T00:00:00.0000000Z","2007-01-15T00:15T00:100:00.00000000Z","2007-01-30T00:00:00.0000000Z"] |
NORTH CAROLINA | [20000,0,1000] | ["2006-12-31T00:00:00.0000000Z","2007-01-15T00:15T00:100:00.00000000Z","2007-01-30T00:00:00.0000000Z"] |
ATLANTIK KUZEY | [0,0,0] | ["2006-12-31T00:00:00.0000000Z","2007-01-15T00:15T00:100:00.00000000Z","2007-01-30T00:00:00.0000000Z"] |
Bölümü karıştırma ile kullanma
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Çıktı
Sayı |
---|
22345 |
hint.strategy=shuffle ve hint.shufflekey=key karşılaştırması
kullandığınızda hint.strategy=shuffle
, karıştırılan işleç tüm anahtarlar tarafından karıştırılır. Aşağıdaki örnekte sorgu, hem hem de EpisodeId
EventId
anahtar olarak kullanarak verileri karıştırıyor:
StormEvents
| where StartTime > datetime(2007-01-01 00:00:00.0000000)
| join kind = inner hint.strategy=shuffle (StormEvents | where DamageCrops > 62000000) on EpisodeId, EventId
| count
Çıktı
Sayı |
---|
14 |
Aşağıdaki sorguda kullanılır hint.shufflekey = key
. Yukarıdaki sorgu bu sorguyla eşdeğerdir.
StormEvents
| where StartTime > datetime(2007-01-01 00:00:00.0000000)
| join kind = inner hint.shufflekey = EpisodeId hint.shufflekey = EventId (StormEvents | where DamageCrops > 62000000) on EpisodeId, EventId
Çıktı
Sayı |
---|
14 |
Verileri birden çok anahtarla karıştırma
Bazı durumlarda, hint.strategy=shuffle
yok sayılır ve sorgu karıştırma stratejisinde çalışmaz. Örneğin, aşağıdaki örnekte birleştirme sol tarafında özetlemiştir, bu nedenle kullanımı hint.strategy=shuffle
sorguya karıştırma stratejisi uygulamaz:
StormEvents
| where StartTime > datetime(2007-01-01 00:00:00.0000000)
| summarize count() by EpisodeId, EventId
| join kind = inner hint.strategy=shuffle (StormEvents | where DamageCrops > 62000000) on EpisodeId, EventId
Çıktı
EpisodeId | EventId | ... | EpisodeId1 | EventId1 | ... |
---|---|---|---|---|---|
1030 | 4407 | ... | 1030 | 4407 | ... |
1030 | 13721 | ... | 1030 | 13721 | ... |
2477 | 12530 | ... | 2477 | 12530 | ... |
2103 | 10237 | ... | 2103 | 10237 | ... |
2103 | 10239 | ... | 2103 | 10239 | ... |
... | ... | ... | ... | ... | ... |
Bu sorunun üstesinden gelmek ve karıştırma stratejisinde çalıştırmak için ve summarize
işlemleri için join
ortak olan anahtarı seçin. Bu durumda, bu anahtar şeklindedir EpisodeId
. üzerinde karıştırma anahtarını hint.shufflekey
join
belirtmek için ipucunu hint.shufflekey = EpisodeId
kullanın:
StormEvents
| where StartTime > datetime(2007-01-01 00:00:00.0000000)
| summarize count() by EpisodeId, EventId
| join kind = inner hint.shufflekey=EpisodeId (StormEvents | where DamageCrops > 62000000) on EpisodeId, EventId
Çıktı
EpisodeId | EventId | ... | EpisodeId1 | EventId1 | ... |
---|---|---|---|---|---|
1030 | 4407 | ... | 1030 | 4407 | ... |
1030 | 13721 | ... | 1030 | 13721 | ... |
2477 | 12530 | ... | 2477 | 12530 | ... |
2103 | 10237 | ... | 2103 | 10237 | ... |
2103 | 10239 | ... | 2103 | 10239 | ... |
... | ... | ... | ... | ... | ... |
Performansı geliştirmek için karıştırma ile özetleme özelliğini kullanma
Bu örnekte, işleci stratejiyle summarize
shuffle
kullanmak performansı artırır. Kaynak tabloda 150M kayıt vardır ve anahtara göre gruplandırma kardinalitesi 10 küme düğümüne yayılan 10M'dir.
Strateji olmadan summarize
işleç kullanıldığında shuffle
sorgu 1:08'in ardından sona erer ve bellek kullanımı en yüksek değeri yaklaşık 3 GB'tır:
orders
| summarize arg_max(o_orderdate, o_totalprice) by o_custkey
| where o_totalprice < 1000
| count
Çıktı
Sayı |
---|
1086 |
ile shuffle
strateji kullanılırken summarize
sorgu yaklaşık 7 saniye sonra sona erer ve bellek kullanımı 0,43 GB olur:
orders
| summarize hint.strategy = shuffle arg_max(o_orderdate, o_totalprice) by o_custkey
| where o_totalprice < 1000
| count
Çıktı
Sayı |
---|
1086 |
Aşağıdaki örnek, anahtara göre grup kardinalitesinin 2M olduğu, 60M kayıtları olan bir tabloyla iki küme düğümü olan bir kümede performansı gösterir.
Sorguyu olmadan hint.num_partitions
çalıştırmak yalnızca iki bölüm (küme düğüm numarası olarak) kullanır ve aşağıdaki sorgu yaklaşık 1:10 dakika sürer:
lineitem
| summarize hint.strategy = shuffle dcount(l_comment), dcount(l_shipdate) by l_partkey
| consume
Bölüm numarası 10 olarak ayarlanırsa, sorgu 23 saniye sonra sona erer:
lineitem
| summarize hint.strategy = shuffle hint.num_partitions = 10 dcount(l_comment), dcount(l_shipdate) by l_partkey
| consume
Performansı geliştirmek için karıştırma ile birleştirmeyi kullanma
Aşağıdaki örnekte, işleç ile shuffle
strateji kullanmanın join
performansı nasıl geliştirdiği gösterilmektedir.
Örnekler, verilerin tüm bu düğümlere yayıldığı 10 düğüme sahip bir kümede örneklendi.
Sorgunun sol tarafındaki kaynak tablo, anahtarın kardinalitesinin join
yaklaşık 14M olduğu 15M kayda sahiptir. Sorgunun sağ tarafındaki kaynakta 150M kayıt vardır ve anahtarın join
kardinalitesi 10M'dir. Sorgu yaklaşık 28 saniye sonra sona erer ve bellek kullanımı 1,43 GB'tır:
customer
| join
orders
on $left.c_custkey == $right.o_custkey
| summarize sum(c_acctbal) by c_nationkey
Bir işleçle shuffle
strateji kullanılırken join
sorgu yaklaşık 4 saniye sonra sona erer ve bellek kullanımı 0,3 GB olur:
customer
| join
hint.strategy = shuffle orders
on $left.c_custkey == $right.o_custkey
| summarize sum(c_acctbal) by c_nationkey
Başka bir örnekte, aşağıdaki koşullara sahip daha büyük bir veri kümesinde aynı sorguları deniyoruz:
- öğesinin
join
sol tarafındaki kaynak 150M, anahtarın kardinalitesi ise 148M'dir. - sağ tarafındaki kaynak
join
1,5B ve anahtarın kardinalitesi ~100M'dir.
Yalnızca işleci olan join
sorgu 4 dakika sonra sınırlara isabet eder ve zaman aşımına uğradı. Ancak, işleç ile shuffle
strateji kullanılırken join
sorgu yaklaşık 34 saniye sonra sona erer ve bellek kullanımı 1,23 GB olur.
Aşağıdaki örnekte iki küme düğümü olan ve anahtarın kardinalitesinin 2M olduğu 60M kayıt tablosuna sahip bir kümedeki join
iyileştirme gösterilmektedir.
Sorguyu olmadan hint.num_partitions
çalıştırmak yalnızca iki bölüm (küme düğüm numarası olarak) kullanır ve aşağıdaki sorgu yaklaşık 1:10 dakika sürer:
lineitem
| summarize dcount(l_comment), dcount(l_shipdate) by l_partkey
| join
hint.shufflekey = l_partkey part
on $left.l_partkey == $right.p_partkey
| consume
Bölüm numarası 10 olarak ayarlandığında, sorgu 23 saniye sonra sona erer:
lineitem
| summarize dcount(l_comment), dcount(l_shipdate) by l_partkey
| join
hint.shufflekey = l_partkey hint.num_partitions = 10 part
on $left.l_partkey == $right.p_partkey
| consume