D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
lib
/
monaco
/
min
/
vs
/
language
/
kusto
/
Filename :
kusto.javascript.client.min.js
back
Copy
Bridge.assembly("Kusto.JavaScript.Client",function(u,G){"use strict";Bridge.define("Kusto.Charting.AnomalyDataHelper2",{statics:{props:{TimestampColumnName:null,ValueColumnName:null,SeriesColumnName:null,AnomalySerieSuffix:null},ctors:{init:function(){this.TimestampColumnName="Timestamp",this.ValueColumnName="Value",this.SeriesColumnName="Series",this.AnomalySerieSuffix="(anomaly)"}},methods:{EnchanceDataWithAnomalyDataFromServiceAsync:function(e,t){var n=0,r,s,a,i=new System.Threading.Tasks.TaskCompletionSource,l,o,d,m,c,p,h,g=Bridge.fn.bind(this,function(){try{for(;;)switch(n=System.Array.min([0,1],n),n){case 0:if(o=new Kusto.Charting.AnomalyDataHelper2.AnomalyDataFromServiceResult,e==null){o.Data=t,o.HasErrors=!0,o.Message="Failed sending the request for anomalies to the service",i.setResult(o);return}if(d=Kusto.Charting.AnomalyDataHelper2.DataItemsToDataTableLiteral(t),m=(d||"")+(System.String.format(`| summarize dt = makelist({0}, 100000), y=makelist({1}, 100000) by {2}\r | extend (anomalies, scores, baseline)=series_decompose_anomalies(y)\r | project dt, y, anomalies, Series\r | mvexpand dt to typeof(datetime), y to typeof(double), anomalies to typeof(double) limit 1000000\r | where anomalies != 0\r | project dt, anomaly_value = (anomalies * anomalies)*y, Series`,Kusto.Charting.AnomalyDataHelper2.TimestampColumnName,Kusto.Charting.AnomalyDataHelper2.ValueColumnName,Kusto.Charting.AnomalyDataHelper2.SeriesColumnName)||""),System.Text.Encoding.UTF8.GetByteCount$2(m)>2e6){o.Data=t,o.HasErrors=!0,o.Message="The anomalies request to the service exceeds the 2MB limit, consider adding more filters",i.setResult(o);return}if(r=e.Kusto$Charting$IKustoClientContext$ExecuteQueryAsync(Kusto.Charting.AnomalyDataHelper2.AnomalyInputOutputRecord,m),n=1,r.isCompleted())continue;r.continue(g);return;case 1:if(s=r.getAwaitedResult(),c=s,c=(p=Kusto.Charting.AnomalyDataHelper2.AnomalyInputOutputRecord,System.Linq.Enumerable.from(c,p).ToArray(p)),c==null||!System.Linq.Enumerable.from(c,Kusto.Charting.AnomalyDataHelper2.AnomalyInputOutputRecord).any()){o.Data=t,o.HasErrors=!0,o.Message="Failed retrieving the anomalies result from the service",i.setResult(o);return}t.AddRange(System.Linq.Enumerable.from(c,Kusto.Charting.AnomalyDataHelper2.AnomalyInputOutputRecord).select(u.$.Kusto.Charting.AnomalyDataHelper2.f1)),o.Data=t,o.HasErrors=!1,o.Message="",i.setResult(o);return;default:i.setResult(null);return}}catch(S){h=System.Exception.create(S),i.setException(h)}},arguments);return g(),i.task},DataItemsToDataTableLiteral:function(e){var t,n=new System.Text.StringBuilder,r,s;n.append("datatable"),n.appendLine(System.String.format("({0}:datetime,{1}:double,{2}:string)",Kusto.Charting.AnomalyDataHelper2.TimestampColumnName,Kusto.Charting.AnomalyDataHelper2.ValueColumnName,Kusto.Charting.AnomalyDataHelper2.SeriesColumnName)),n.append("["),t=Bridge.getEnumerator(e,Kusto.Charting.DataItem);try{for(;t.moveNext();)r=t.Current,n.append("datetime("),n.append(System.DateTime.format(r.ArgumentDateTime,"o")),n.append("),"),n.append("double("),n.append(System.Double.format(r.ValueData)),n.append("),"),s=Kusto.Cloud.Platform.Text.StringLiteral.GetLiteral(r.SeriesName),n.append(s),n.appendLine(",")}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return n.appendLine("]"),n.toString()},EnchanceDataWithAnomalyDataFromColumns:function(e,t,n){var r,s,a,i,l,o,d,m,c,p,h,g;n.v=new(System.Collections.Generic.Dictionary$2(System.String,System.String)).ctor;var S=new(System.Collections.Generic.List$1(Kusto.Charting.DataItem)).ctor,y=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(t),f=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(function(A){return!y.contains(A.ValueName)}).select(u.$.Kusto.Charting.AnomalyDataHelper2.f2).firstOrDefault(null,null);if(System.String.isNullOrEmpty(f))return e;S.AddRange(System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(function(A){return!y.contains(A.ValueName)})),a=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(function(A){return System.String.equals(A.ValueName,f)}).ToArray(Kusto.Charting.DataItem),r=Bridge.getEnumerator(t);try{for(;r.moveNext();){if(i={v:r.Current},l=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(function(A,C){return function(T){return System.String.equals(T.ValueName,C.v)}}(this,i)).ToArray(Kusto.Charting.DataItem),a.length!==l.length)return e;for(o=0,d=0;d<a.length;d=d+1|0)m=a[System.Array.index(d,a)],c=l[System.Array.index(d,l)],c.ValueData!==0&&(o=o+1|0,p=(c.SeriesName||"")+(Kusto.Charting.AnomalyDataHelper2.AnomalySerieSuffix||""),h=(s=new Kusto.Charting.DataItem.ctor,s.ArgumentDateTime=c.ArgumentDateTime,s.ArgumentData=c.ArgumentData,s.SeriesName=p,s.ValueData=m.ValueData,s.PrefferredChartKind=Kusto.Charting.ChartKind.Point,s),S.add(h),n.v.containsKey(p)||n.v.add(p,m.SeriesName));o===0&&(g=(s=new Kusto.Charting.DataItem.ctor,s.ArgumentDateTime=l[System.Array.index(0,l)].ArgumentDateTime,s.ArgumentData=null,s.SeriesName=(l[System.Array.index(0,l)].SeriesName||"")+(Kusto.Charting.AnomalyDataHelper2.AnomalySerieSuffix||""),s.ValueData=Number.NaN,s.PrefferredChartKind=Kusto.Charting.ChartKind.Point,s),S.add(g))}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}return S}}}}),Bridge.ns("Kusto.Charting.AnomalyDataHelper2",u.$),Bridge.apply(u.$.Kusto.Charting.AnomalyDataHelper2,{f1:function(e){var t;return t=new Kusto.Charting.DataItem.ctor,t.ArgumentDateTime=e.Timestamp,t.ArgumentData=System.DateTime.format(e.Timestamp,"o"),t.SeriesName=(e.Series||"")+(Kusto.Charting.AnomalyDataHelper2.AnomalySerieSuffix||""),t.ValueData=e.Value,t.PrefferredChartKind=Kusto.Charting.ChartKind.Point,t},f2:function(e){return e.ValueName}}),Bridge.define("Kusto.Charting.AnomalyDataHelper2.AnomalyDataFromServiceResult",{$kind:"nested class",fields:{Data:null,HasErrors:!1,Message:null}}),Bridge.define("Kusto.Charting.AnomalyDataHelper2.AnomalyInputOutputRecord",{$kind:"nested class",fields:{Timestamp:null,Value:0,Series:null},ctors:{init:function(){this.Timestamp=System.DateTime.getDefaultValue()}}}),Bridge.define("Kusto.Charting.ArgumentColumnType",{$kind:"enum",statics:{fields:{None:0,Numeric:2,DateTime:4,TimeSpan:8,String:16,Object:32,Geospatial:64,DateTimeOrTimeSpan:12,StringOrDateTimeOrTimeSpan:28,NumericOrDateTimeOrTimeSpan:14,StringOrObject:48,AllExceptGeospatial:62}},$flags:!0}),Bridge.define("Kusto.Charting.ArgumentRestrictions",{$kind:"enum",statics:{fields:{None:0,MustHave:1,NotIncludedInSeries:2,GeospatialAsSeries:4,PreferLast:8,NumericAsSeries:16}},$flags:!0}),Bridge.define("Kusto.Charting.ChartKind",{$kind:"enum",statics:{fields:{Unspecified:0,Line:1,Point:2,Bar:3}}}),Bridge.define("Kusto.Charting.ChartLimitsPolicy",{props:{MaxPointsPerChartError:0,MaxPointsPerChartWarning:0,MaxSeriesPerChartError:0,MaxSeriesPerChartWarning:0,MaxDatetimePeriodError:null},ctors:{init:function(){this.MaxDatetimePeriodError=new System.TimeSpan},ctor:function(e,t,n,r,s){this.$initialize(),this.MaxPointsPerChartError=e,this.MaxPointsPerChartWarning=t,this.MaxSeriesPerChartError=n,this.MaxSeriesPerChartWarning=r,this.MaxDatetimePeriodError=s}}}),Bridge.define("Kusto.Charting.DataChartsHelper",{statics:{fields:{c_minFractionOfIntervalsToDetectDistribution:0,c_minElementsAmountToFillGapsWithNans:0,c_decimalRoundingPrecision:0,c_doubleAcceptableApproximation:0,c_defaultArgumentNumeric:0,c_defaultArgumentString:null,c_defaultArgumentDatetime:null},ctors:{init:function(){this.c_defaultArgumentDatetime=System.DateTime.getDefaultValue(),this.c_minFractionOfIntervalsToDetectDistribution=.8,this.c_minElementsAmountToFillGapsWithNans=4,this.c_decimalRoundingPrecision=8,this.c_doubleAcceptableApproximation=1e-8,this.c_defaultArgumentNumeric=Number.NaN,this.c_defaultArgumentString="<empty>",this.c_defaultArgumentDatetime=Bridge.getDefaultValue(System.DateTime)}},methods:{GetData:function(e,t,n,r,s,a,i){t===void 0&&(t=16),n===void 0&&(n=0),r===void 0&&(r=null),s===void 0&&(s=!1),a===void 0&&(a=null),i===void 0&&(i=null);var l=Kusto.Charting.DataChartsHelper.GetMetaData(e,t,n,r,a,i);return Kusto.Charting.DataChartsHelper.GetData$1(e,l,s)},GetData$1:function(e,t,n){var r,s;if(n===void 0&&(n=!1),e==null||t==null)return System.Linq.Enumerable.empty();var a=e.Kusto$Charting$IChartingDataSource$GetSchema(),i=System.Linq.Enumerable.from(a,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).select(u.$.Kusto.Charting.DataChartsHelper.f1).toList(Kusto.Charting.DataChartsHelper.ColumnDesc),l=System.Linq.Enumerable.from(t.Kusto$Charting$IChartMetaData$SeriesIndexes,System.Int32).any()?System.Linq.Enumerable.from(i,Kusto.Charting.DataChartsHelper.ColumnDesc).where(function(h){return System.Linq.Enumerable.from(t.Kusto$Charting$IChartMetaData$SeriesIndexes,System.Int32).contains(h.Index)}).ToArray(Kusto.Charting.DataChartsHelper.ColumnDesc):null,o=System.Linq.Enumerable.from(i,Kusto.Charting.DataChartsHelper.ColumnDesc).where(function(h){return System.Linq.Enumerable.from(t.Kusto$Charting$IChartMetaData$DataIndexes,System.Int32).contains(h.Index)}).ToArray(Kusto.Charting.DataChartsHelper.ColumnDesc),d=System.Linq.Enumerable.from(i,Kusto.Charting.DataChartsHelper.ColumnDesc).where(function(h){return System.Linq.Enumerable.from(t.Kusto$Charting$IChartMetaData$UnusedIndexes,System.Int32).contains(h.Index)}).ToArray(Kusto.Charting.DataChartsHelper.ColumnDesc),m=new Kusto.Charting.DataChartsHelper.ArgumentData(t.Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex,t.Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex>=0?i.getItem(t.Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex).Name:"",t.Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex>=0?System.Linq.Enumerable.from(a,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(t.Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex).Item2:Kusto.Charting.ArgumentColumnType.None,t.Kusto$Charting$IChartMetaData$ArgumentColumnType,t.Kusto$Charting$IChartMetaData$GeospatialColumnIndexes),c=new(System.Collections.Generic.List$1(Kusto.Charting.DataItem)).ctor,p=new(System.Collections.Generic.Dictionary$2(System.String,System.Double)).ctor;for(r=0;r<e.Kusto$Charting$IChartingDataSource$RowsCount;r=r+1|0)s=Kusto.Charting.DataChartsHelper.GetBaseSeriesName(e,l,r),t.Kusto$Charting$IChartMetaData$IsDataFormedAsSeries?Kusto.Charting.DataChartsHelper.ResolveDataSeriesFromDataRow(c,e,o,d,r,s,t.Kusto$Charting$IChartMetaData$ArgumentColumnType,n,t.Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex):(m.ResolveArgumentFromRow(e,r),Kusto.Charting.DataChartsHelper.ResolveDataItemsFromDataRow(c,e,o,d,r,s,m,p,n));return t.Kusto$Charting$IChartMetaData$ArgumentColumnType!==Kusto.Charting.ArgumentColumnType.Geospatial&&(c=Kusto.Charting.DataChartsHelper.RemoveNaNPointsIfNeeded(c,p)),c},GetMetaData:function(e,t,n,r,s,a){var i,l,o,d,m;return t===void 0&&(t=16),n===void 0&&(n=0),r===void 0&&(r=null),s===void 0&&(s=null),a===void 0&&(a=null),i=e.Kusto$Charting$IChartingDataSource$GetSchema(),i==null||!System.Linq.Enumerable.from(i,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).any()?null:(r==null&&(r=new(System.Collections.Generic.List$1(System.String)).ctor),a==null&&(a=new(System.Collections.Generic.List$1(System.String)).ctor),l={v:new Kusto.Charting.DataChartsHelper.ChartMetaData(t)},Kusto.Charting.DataChartsHelper.ResolvePredefinedColumnsIndexes(e,r,a,s,n,l),o=!1,l.v.IsDataFormedAsSeries||(o=Kusto.Charting.DataChartsHelper.DetectChartDimensionsUsingColumnTypesAndData(i,e,n,l),l.v.IsDataFormedAsSeries=!o),l.v.IsDataFormedAsSeries&&(o=Kusto.Charting.DataChartsHelper.DetectChartDimensionsUsingData(i,e,r,n,l)),o?(d=l.v.DataIndexes,l.v.DataIndexesList=System.Linq.Enumerable.from(i,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).select(function(c,p){return p!==l.v.ArgumentDataColumnIndex&&!l.v.GeospatiaColumnlIndexesList.contains(p)&&(!System.Linq.Enumerable.from(d,System.Int32).any()||System.Linq.Enumerable.from(d,System.Int32).contains(p))&&!System.Linq.Enumerable.from(l.v.SeriesIndexes,System.Int32).contains(p)&&(!l.v.IsDataFormedAsSeries&&System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.NumericOrDateTimeOrTimeSpan,Bridge.box(c.Item2,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))||l.v.IsDataFormedAsSeries&&System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.StringOrObject,Bridge.box(c.Item2,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType))))?p:-1}).where(u.$.Kusto.Charting.DataChartsHelper.f2).toList(System.Int32),l.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial&&(l.v.DataIndexesList.Count>1&&(m=System.Linq.Enumerable.from(l.v.DataIndexesList,System.Int32).first(),l.v.DataIndexesList.clear(),l.v.DataIndexesList.add(m)),n===Kusto.Charting.ArgumentRestrictions.GeospatialAsSeries&&(l.v.ArgumentDataColumnIndex===-1||!System.Linq.Enumerable.from(l.v.DataIndexesList,System.Int32).any()))?null:(l.v.UnusedIndexes=System.Linq.Enumerable.range(0,System.Linq.Enumerable.from(i,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count()).except(l.v.DataIndexes).except(l.v.GeospatialColumnIndexes).except(l.v.SeriesIndexes).except(System.Array.init([l.v.ArgumentDataColumnIndex],System.Int32)).toList(System.Int32),l.v)):null)},RemoveNaNPointsIfNeeded:function(e,t){var n,r=System.Linq.Enumerable.from(t,System.Collections.Generic.KeyValuePair$2(System.String,System.Double)).where(u.$.Kusto.Charting.DataChartsHelper.f3).toDictionary(u.$.Kusto.Charting.DataChartsHelper.f4,u.$.Kusto.Charting.DataChartsHelper.f5,System.String,System.Boolean),s,a,i,l;r.Count>0&&(e=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(function(o){return!r.containsKey(o.SeriesName)}).toList(Kusto.Charting.DataItem)),s=new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Charting.DataChartsHelper.SeriesStatsCounters)).ctor,n=Bridge.getEnumerator(e);try{for(;n.moveNext();)a=n.Current,i={},s.tryGetValue(a.SeriesName,i)||(i.v=new Kusto.Charting.DataChartsHelper.SeriesStatsCounters),i.v.TotalPoints=i.v.TotalPoints.inc(),Kusto.Charting.ExtendedDouble.IsFinite(a.ValueData)&&(i.v.NonNanPoints=i.v.NonNanPoints.inc()),s.setItem(a.SeriesName,i.v)}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return l=System.Linq.Enumerable.from(s,System.Collections.Generic.KeyValuePair$2(System.String,Kusto.Charting.DataChartsHelper.SeriesStatsCounters)).where(u.$.Kusto.Charting.DataChartsHelper.f6).toDictionary(u.$.Kusto.Charting.DataChartsHelper.f4,u.$.Kusto.Charting.DataChartsHelper.f5,System.String,System.Boolean),l.Count>0&&(e=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(function(o){return!l.containsKey(o.SeriesName)||Kusto.Charting.ExtendedDouble.IsFinite(o.ValueData)}).toList(Kusto.Charting.DataItem)),e},GetDataForLineChart:function(e,t,n,r,s){var a,i,l=e.Visualization===Kusto.Data.Utils.VisualizationKind.TimeLineChart||e.Visualization===Kusto.Data.Utils.VisualizationKind.TimeLineWithAnomalyChart,o=e.Visualization===Kusto.Data.Utils.VisualizationKind.LineChart,d=e.Visualization===Kusto.Data.Utils.VisualizationKind.ScatterChart||e.Visualization===Kusto.Data.Utils.VisualizationKind.AreaChart||e.Visualization===Kusto.Data.Utils.VisualizationKind.StackedAreaChart,m=null,c;m=l?System.Array.init([Kusto.Charting.ArgumentColumnType.DateTime,Kusto.Charting.ArgumentColumnType.TimeSpan],Kusto.Charting.ArgumentColumnType):o?System.Array.init([Kusto.Charting.ArgumentColumnType.Numeric,Kusto.Charting.ArgumentColumnType.DateTime,Kusto.Charting.ArgumentColumnType.TimeSpan],Kusto.Charting.ArgumentColumnType):d?System.Array.init([Kusto.Charting.ArgumentColumnType.DateTime,Kusto.Charting.ArgumentColumnType.TimeSpan,Kusto.Charting.ArgumentColumnType.Numeric],Kusto.Charting.ArgumentColumnType):System.Array.init([Kusto.Charting.ArgumentColumnType.Numeric,Kusto.Charting.ArgumentColumnType.DateTime,Kusto.Charting.ArgumentColumnType.TimeSpan],Kusto.Charting.ArgumentColumnType),a=Bridge.getEnumerator(m);try{for(;a.moveNext()&&(c=a.Current,n=(i=Kusto.Charting.DataItem,System.Linq.Enumerable.from(Kusto.Charting.DataChartsHelper.GetData(t,c,18,e.Series,e.Accumulate,e.XColumn,r),i).toList(i)),!(n!=null&&n.Count!==0)););}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}return s.v=Kusto.Charting.DataChartsHelper.ResolveArgumentType(n),n},IsNumericType:function(e,t){return t===void 0&&(t=!0),e==null?!1:Bridge.referenceEquals(e,System.TimeSpan)||Bridge.referenceEquals(e,System.DateTime)?t:Bridge.referenceEquals(e,System.Byte)||Bridge.referenceEquals(e,System.Decimal)||Bridge.referenceEquals(e,System.Double)||Bridge.referenceEquals(e,System.Int16)||Bridge.referenceEquals(e,System.Int32)||Bridge.referenceEquals(e,System.Int64)||Bridge.referenceEquals(e,System.SByte)||Bridge.referenceEquals(e,System.UInt16)||Bridge.referenceEquals(e,System.UInt32)||Bridge.referenceEquals(e,System.UInt64)?!0:Bridge.referenceEquals(e,System.Object)&&Bridge.Reflection.isGenericType(e)&&Bridge.referenceEquals(Bridge.Reflection.getGenericTypeDefinition(e),System.Nullable$1)?Kusto.Charting.DataChartsHelper.IsNumericType(System.Nullable.getUnderlyingType(e),t):!1},GetAllArgumentColumns:function(e,t){var n,r;t===void 0&&(t=null);var s=new(System.Collections.Generic.List$1(System.String)).ctor,a=e.Kusto$Charting$IChartingDataSource$GetSchema(),i=System.Linq.Enumerable.from(e.Kusto$Charting$IChartingDataSource$GetSchema(),System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count(),l=t!=null&&System.Linq.Enumerable.from(t,System.String).any();if(i>1)for(n=0;n<i;n=n+1|0)r=System.Linq.Enumerable.from(a,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(n).Item1,l&&System.Linq.Enumerable.from(t,System.String).contains(r)||s.add(r);return s},GetFirstStringColumnName:function(e,t){var n,r,s;for(t===void 0&&(t=0),n=e.Kusto$Charting$IChartingDataSource$GetSchema(),r=System.Linq.Enumerable.from(e.Kusto$Charting$IChartingDataSource$GetSchema(),System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count(),s=0;s<r;s=s+1|0)if(System.Linq.Enumerable.from(n,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(s).Item2===Kusto.Charting.ArgumentColumnType.String){if(t===0)return System.Linq.Enumerable.from(n,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(s).Item1;t=t-1|0}return null},FillGapsWithNaNs:function(e,t){var n,r,s,a,i;if(e==null||!System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).any()||e.Count<Kusto.Charting.DataChartsHelper.c_minElementsAmountToFillGapsWithNans)return e;r=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).groupBy(u.$.Kusto.Charting.DataChartsHelper.f7),s=new(System.Collections.Generic.List$1(Kusto.Charting.DataItem)).$ctor2(e.Count),n=Bridge.getEnumerator(r);try{for(;n.moveNext();)a=n.Current,i=Kusto.Charting.DataChartsHelper.FillGapsWithNaNs$1(a.select(u.$.Kusto.Charting.DataChartsHelper.f8),t),s.AddRange(i)}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return s},FillGapsWithNaNs$1:function(e,t){var n,r,s,a,i,l,o,d,m,c;if(System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).count()<Kusto.Charting.DataChartsHelper.c_minElementsAmountToFillGapsWithNans)return e;switch(t){case Kusto.Charting.ArgumentColumnType.TimeSpan:case Kusto.Charting.ArgumentColumnType.DateTime:e=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).orderBy(u.$.Kusto.Charting.DataChartsHelper.f9),r=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).select(u.$.Kusto.Charting.DataChartsHelper.f10).ToArray(System.Double);break;case Kusto.Charting.ArgumentColumnType.Numeric:e=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).orderBy(u.$.Kusto.Charting.DataChartsHelper.f11),r=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).select(u.$.Kusto.Charting.DataChartsHelper.f11).ToArray(System.Double);break;default:return e}if(r==null||!System.Linq.Enumerable.from(r,System.Double).any())return e;var p=Kusto.Charting.DataChartsHelper.SelectSuccessivePairs(r),h=Kusto.Charting.DataChartsHelper.GetTopGroupByCount(p,t),g=h.Item1;if(h==null||System.Convert.toDouble(Bridge.box(h.Item2,System.Int32))/System.Linq.Enumerable.from(p,System.Double).count()<Kusto.Charting.DataChartsHelper.c_minFractionOfIntervalsToDetectDistribution)return e;s=new(System.Collections.Generic.List$1(Kusto.Charting.DataItem)).$ctor2(System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).count()),a=null,n=Bridge.getEnumerator(e,Kusto.Charting.DataItem);try{for(;n.moveNext();){if(i=n.Current,a==null){s.add(i),a=i;continue}if(l=Kusto.Charting.DataChartsHelper.GetDistance(a,i,t),l-g>Kusto.Charting.DataChartsHelper.c_doubleAcceptableApproximation){o=0;try{o=System.Convert.toInt32(Bridge.box(Bridge.Math.round(l/g,0,6),System.Double,System.Double.format,System.Double.getHashCode))}catch(S){return S=System.Exception.create(S),e}if(d=l-o*g,d>Kusto.Charting.DataChartsHelper.c_doubleAcceptableApproximation)return e;for(m=1;m<o;m=m+1|0){switch(c=a.Clone(),c.ValueData=Number.NaN,t){case Kusto.Charting.ArgumentColumnType.Numeric:c.ArgumentNumeric+=g*m,c.ArgumentData=System.Double.format(c.ArgumentNumeric);break;case Kusto.Charting.ArgumentColumnType.DateTime:c.ArgumentDateTime=System.DateTime.addTicks(c.ArgumentDateTime,System.Convert.toInt64(Bridge.box(g,System.Double,System.Double.format,System.Double.getHashCode)).mul(System.Int64(m))),c.ArgumentData=System.DateTime.format(c.ArgumentDateTime);break;case Kusto.Charting.ArgumentColumnType.TimeSpan:c.ArgumentDateTime=System.DateTime.addTicks(c.ArgumentDateTime,System.Convert.toInt64(Bridge.box(g,System.Double,System.Double.format,System.Double.getHashCode)).mul(System.Int64(m))),c.ArgumentData=Bridge.toString(System.TimeSpan.fromTicks(System.DateTime.getTicks(c.ArgumentDateTime)));break}s.add(c)}}s.add(i),a=i}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return s},ResolveArgumentType:function(e){if(e==null||!System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).any())return Kusto.Charting.ArgumentColumnType.None;var t={};return System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).all(function(n){return!System.String.isNullOrEmpty(n.ArgumentData)&&System.String.indexOf(n.ArgumentData,":")>0&&System.TimeSpan.tryParse(n.ArgumentData,null,t)})?Kusto.Charting.ArgumentColumnType.TimeSpan:System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).all(u.$.Kusto.Charting.DataChartsHelper.f12)?Kusto.Charting.ArgumentColumnType.DateTime:System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).any(u.$.Kusto.Charting.DataChartsHelper.f13)?Kusto.Charting.ArgumentColumnType.Numeric:Kusto.Charting.ArgumentColumnType.String},ValidateData:function(e,t,n,r){var s,a,i,l,o,d;if(r.v="",e==null||!System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).any())return r.v="Data was not provided",Kusto.Charting.ValidationStatus.PolicyViolationError;if(System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).where(u.$.Kusto.Charting.DataChartsHelper.f14).any())return r.v="Data includes non-finite values",Kusto.Charting.ValidationStatus.PolicyViolationError;if(t===Kusto.Charting.ArgumentColumnType.Geospatial&&System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).any(u.$.Kusto.Charting.DataChartsHelper.f15))return r.v="Data includes invalid geospatial coordinates. Longitude values must be in range [-180,180]. Latitude values must be in range [-90,90].",Kusto.Charting.ValidationStatus.PolicyViolationError;if(t===Kusto.Charting.ArgumentColumnType.DateTime&&System.TimeSpan.neq(n.MaxDatetimePeriodError,Bridge.getDefaultValue(System.TimeSpan))){a=System.DateTime.getMaxValue(),i=System.DateTime.getMinValue(),s=Bridge.getEnumerator(e,Kusto.Charting.DataItem);try{for(;s.moveNext();)l=s.Current,System.DateTime.lt(i,l.ArgumentDateTime)&&(i=l.ArgumentDateTime),System.DateTime.gt(a,l.ArgumentDateTime)&&(a=l.ArgumentDateTime)}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}if(System.DateTime.gt(a,i)||System.TimeSpan.gt(System.DateTime.subdd(i,a),n.MaxDatetimePeriodError))return r.v="Input time range is too wide to fit into chart",Kusto.Charting.ValidationStatus.PolicyViolationError}return o=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).select(u.$.Kusto.Charting.DataChartsHelper.f7).distinct().count(),d=System.Linq.Enumerable.from(e,Kusto.Charting.DataItem).count(),o>n.MaxSeriesPerChartError?(r.v=`Too many series `+(System.String.format("Provided data contains {0} series which exceeds allowed amount for the chart: {1}",Bridge.box(o,System.Int32),Bridge.box(n.MaxSeriesPerChartError,System.Int32))||""),Kusto.Charting.ValidationStatus.PolicyViolationError):d>n.MaxPointsPerChartError?(r.v=`Too many points `+(System.String.format("Provided data contains {0} points which exceeds allowed amount for the chart: {1}",Bridge.box(d,System.Int32),Bridge.box(n.MaxPointsPerChartError,System.Int32))||""),Kusto.Charting.ValidationStatus.PolicyViolationError):o>n.MaxSeriesPerChartWarning||d>n.MaxPointsPerChartWarning?(r.v=`Too many series or data points Chart can perform badly when large amount of data is used. `+(System.String.format("You are about to plot {0} series with {1} points.",Bridge.box(o,System.Int32),Bridge.box(d,System.Int32))||""),Kusto.Charting.ValidationStatus.PolicyViolationWarning):Kusto.Charting.ValidationStatus.Valid},ResolveJsonArrayType:function(e){var t;try{t=Newtonsoft.Json.JsonConvert.DeserializeObject(e,System.Array.type(System.String))}catch(n){return n=System.Exception.create(n),Kusto.Charting.ArgumentColumnType.None}return t==null||System.Linq.Enumerable.from(t,System.String).count()===0?Kusto.Charting.ArgumentColumnType.None:System.Linq.Enumerable.from(t,System.String).all(u.$.Kusto.Charting.DataChartsHelper.f16)?Kusto.Charting.ArgumentColumnType.Object:Kusto.Charting.DataChartsHelper.ArrayIsDouble(t)?Kusto.Charting.ArgumentColumnType.Numeric:Kusto.Charting.DataChartsHelper.ArrayIsTimespan(t)?Kusto.Charting.ArgumentColumnType.TimeSpan:Kusto.Charting.DataChartsHelper.ArrayIsDatetime(t)?Kusto.Charting.ArgumentColumnType.DateTime:Kusto.Charting.ArgumentColumnType.String},SelectSuccessivePairs:function(e){var t,n;if(e==null||System.Linq.Enumerable.from(e,System.Double).count()<=1)return null;var r=System.Array.init(System.Linq.Enumerable.from(e,System.Double).count()-1|0,0,System.Double),s=!0,a=Bridge.getDefaultValue(System.Double),i=0;t=Bridge.getEnumerator(e);try{for(;t.moveNext();){if(n=t.Current,s){s=!1,a=n;continue}r[System.Array.index(i,r)]=Math.abs(n-a),i=i+1|0,a=n}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return r},GetTopGroupByCount:function(e,t){var n,r=System.Linq.Enumerable.from(e,System.Double).orderBy(u.$.Kusto.Charting.DataChartsHelper.f8),s=new(System.Collections.Generic.List$1(System.Double)).$ctor2(System.Linq.Enumerable.from(e,System.Double).count()),a=0,i=0,l=null,o,d;n=Bridge.getEnumerator(r);try{for(;n.moveNext();){if(o=n.Current,!System.Nullable.hasValue(l)){l=o,s.add(o);continue}d=o-System.Nullable.getValue(l),d>Kusto.Charting.DataChartsHelper.c_doubleAcceptableApproximation&&(System.Linq.Enumerable.from(s,System.Double).count()>a&&(a=System.Linq.Enumerable.from(s,System.Double).count(),i=Bridge.Math.round(System.Linq.Enumerable.from(s,System.Double).average(),Kusto.Charting.DataChartsHelper.c_decimalRoundingPrecision,6)),s.clear()),s.add(o),l=o}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return{Item1:i,Item2:a}},GetDistance:function(e,t,n){if(e==null||t==null)return-1;var r=-1;switch(n){case Kusto.Charting.ArgumentColumnType.TimeSpan:case Kusto.Charting.ArgumentColumnType.DateTime:r=System.Int64.toNumber(System.DateTime.getTicks(t.ArgumentDateTime).sub(System.DateTime.getTicks(e.ArgumentDateTime)));break;case Kusto.Charting.ArgumentColumnType.Numeric:r=t.ArgumentNumeric-e.ArgumentNumeric;break}return Bridge.Math.round(Math.abs(r),Kusto.Charting.DataChartsHelper.c_decimalRoundingPrecision,6)},ResolvePredefinedColumnsIndexes:function(e,t,n,r,s,a){var i=null,l=e.Kusto$Charting$IChartingDataSource$GetSchema(),o,d,m,c,p,h,g,S,y;if(s===Kusto.Charting.ArgumentRestrictions.GeospatialAsSeries&&System.Linq.Enumerable.from(t,System.String).any()&&(System.Linq.Enumerable.from(n,System.String).any()||!System.String.isNullOrWhiteSpace(r)))throw new Kusto.Charting.SeriesCreationException("GeospatialAsSeries: it's not possible to set both series and x/y columns.");for(o=0;o<System.Linq.Enumerable.from(l,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count();o=o+1|0){if(d=System.Linq.Enumerable.from(l,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(o),m=d.Item1,System.Linq.Enumerable.from(t,System.String).any()&&System.Linq.Enumerable.from(t,System.String).contains(m)){a.v.SeriesIndexesList.add(o),s===Kusto.Charting.ArgumentRestrictions.GeospatialAsSeries&&a.v.GeospatiaColumnlIndexesList.add(o);continue}if(c=System.Linq.Enumerable.from(n,System.String).any()&&System.Linq.Enumerable.from(n,System.String).contains(m),p=!System.String.isNullOrWhiteSpace(r)&&Bridge.referenceEquals(r,m),c||p){if(h=d.Item2,g=!1,System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.StringOrObject,Bridge.box(h,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&a.v.ArgumentColumnType!==Kusto.Charting.ArgumentColumnType.Geospatial&&(S=Bridge.toString(e.Kusto$Charting$IChartingDataSource$GetValue(0,o)),y=Kusto.Charting.DataChartsHelper.ResolveJsonArrayType(S),y!==Kusto.Charting.ArgumentColumnType.None&&(h=y,g=!0)),System.Nullable.hasValue(i)){if(System.Nullable.getValue(i)!==g)throw new Kusto.Charting.SeriesCreationException("Y-Axes and X-Axis both should be defined as scalars or as series")}else i=g;if(a.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial)a.v.GeospatiaColumnlIndexesList.Count>0&&p?a.v.GeospatiaColumnlIndexesList.insert(0,o):a.v.GeospatiaColumnlIndexesList.add(o),s===Kusto.Charting.ArgumentRestrictions.GeospatialAsSeries&&(a.v.SeriesIndexesList.Count>0&&p?a.v.SeriesIndexesList.insert(0,o):a.v.SeriesIndexesList.add(o));else if(p)if(System.Enum.hasFlag(a.v.ArgumentColumnType,Bridge.box(h,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType))))a.v.ArgumentDataColumnIndex=o;else throw new Kusto.Charting.SeriesCreationException(System.String.format("Type of column {0}, provided as X-Axis, does not match required by chart type",[m]));else if(c)if(System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.NumericOrDateTimeOrTimeSpan,Bridge.box(h,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType))))a.v.DataIndexesList.add(o);else throw new Kusto.Charting.SeriesCreationException(System.String.format("Column {0}, provided as Y-Axis, should be one of types: Numeric, DateTime, Timespan",[m]))}}if(a.v.IsDataFormedAsSeries=System.Nullable.hasValue(i)?System.Nullable.getValue(i):!1,!System.Linq.Enumerable.from(a.v.DataIndexesList,System.Int32).any()&&System.Linq.Enumerable.from(n,System.String).any()&&a.v.ArgumentColumnType!==Kusto.Charting.ArgumentColumnType.Geospatial)throw new Kusto.Charting.SeriesCreationException("Any of columns defined as Y-Axes were not found in data, not of an appropriate type or used as argument or series");if(!System.String.isNullOrWhiteSpace(r)&&a.v.ArgumentDataColumnIndex<0&&a.v.ArgumentColumnType!==Kusto.Charting.ArgumentColumnType.Geospatial)throw new Kusto.Charting.SeriesCreationException(System.String.format("Column {0}, provided as X-Axis, was not found in data",[r]));if(System.Linq.Enumerable.from(t,System.String).any()&&!System.Linq.Enumerable.from(a.v.SeriesIndexesList,System.Int32).any())throw new Kusto.Charting.SeriesCreationException("Any of columns, provided as Series, were not found in data")},ResolveDataSeriesFromDataRow:function(e,t,n,r,s,a,i,l,o){var d,m,c,p=t.Kusto$Charting$IChartingDataSource$GetValue(s,o),h=Kusto.Charting.DataChartsHelper.ResolveJsonArrayType(Bridge.toString(p)),g,S,y,f;d=Bridge.getEnumerator(n,Kusto.Charting.DataChartsHelper.ColumnDesc);try{for(;d.moveNext();){var A=d.Current,C=t.Kusto$Charting$IChartingDataSource$GetValue(s,A.Index),T=(m=Bridge.as(C,System.String),m??Bridge.toString(C)),K=Kusto.Charting.DataChartsHelper.ResolveJsonArrayType(T);if(K!==Kusto.Charting.ArgumentColumnType.None&&K!==Kusto.Charting.ArgumentColumnType.Object&&System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.NumericOrDateTimeOrTimeSpan,Bridge.box(K,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))){if(g=Kusto.Charting.DataChartsHelper.ParseJsonArrayAsDouble(T,!0),g==null||System.Linq.Enumerable.from(T,System.Char).count()===0)continue;var w=System.String.isNullOrEmpty(a)?A.Name:(a||"")+":"+(A.Name||""),v=0,R=Kusto.Charting.DataChartsHelper.GetArgumentDateTimeArray(p,h,o,System.Linq.Enumerable.from(g,System.Double).count()),D=Kusto.Charting.DataChartsHelper.GetArgumentNumericArray(p,h,o,System.Linq.Enumerable.from(g,System.Double).count()),x=Kusto.Charting.DataChartsHelper.GetArgumentStringArray(p,h,o,System.Linq.Enumerable.from(g,System.Double).count()),I=System.Linq.Enumerable.from(r,Kusto.Charting.DataChartsHelper.ColumnDesc).select(function(b){return t.Kusto$Charting$IChartingDataSource$GetValue(s,b.Index)}).select(u.$.Kusto.Charting.DataChartsHelper.f17).ToArray(System.Object);for(S=0;S<g.length;S=S+1|0)y="",System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.DateTimeOrTimeSpan,Bridge.box(i,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.DateTimeOrTimeSpan,Bridge.box(h,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))?y=System.DateTime.format(R[System.Array.index(S,R)]):System.Enum.hasFlag(i,Bridge.box(Kusto.Charting.ArgumentColumnType.Numeric,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&h===Kusto.Charting.ArgumentColumnType.Numeric?y=System.Double.format(D[System.Array.index(S,D)]):System.Enum.hasFlag(i,Bridge.box(Kusto.Charting.ArgumentColumnType.String,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&(y=x[System.Array.index(S,x)],System.String.isNullOrEmpty(y)&&(y=Bridge.as(p,System.String))),f=(c=new Kusto.Charting.DataItem.ctor,c.ArgumentData=y,c.ArgumentDateTime=R[System.Array.index(S,R)],c.ArgumentNumeric=D[System.Array.index(S,D)],c.ValueData=l?g[System.Array.index(S,g)]+v:g[System.Array.index(S,g)],c.ValueName=A.Name,c.SeriesName=w,c.Properties=Kusto.Charting.DataChartsHelper.ResolvePropertiesFromMultiValue(t,I,r,S),c),System.String.isNullOrEmpty(f.ArgumentData)&&(f.ArgumentData=Kusto.Charting.DataChartsHelper.c_defaultArgumentString),e.add(f),v=f.ValueData}}}finally{Bridge.is(d,System.IDisposable)&&d.System$IDisposable$Dispose()}},ResolveProperties:function(e,t,n){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Charting.DataChartsHelper.ColumnDesc,n)?"":Bridge.toArray(System.Linq.Enumerable.from(n,Kusto.Charting.DataChartsHelper.ColumnDesc).select(function(r){var s=e.Kusto$Charting$IChartingDataSource$GetValue(t,r.Index),a=Kusto.Charting.DataChartsHelper.ObjectToString(s);return System.String.format("{0}:{1}",r.Name,a)})).join(", ")},ResolvePropertiesFromMultiValue:function(e,t,n,r){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Charting.DataChartsHelper.ColumnDesc,n)?"":Bridge.toArray(System.Linq.Enumerable.from(n,Kusto.Charting.DataChartsHelper.ColumnDesc).zip(t,u.$.Kusto.Charting.DataChartsHelper.f18).select(function(s){var a,i;return a=(i=Bridge.as(s.Item2,System.Array.type(System.String)))!=null?i[System.Array.index(r,i)]:Kusto.Charting.DataChartsHelper.ObjectToString(s.Item2),System.String.format("{0}:{1}",s.Item1.Name,a)})).join(", ")},ObjectToString:function(e){var t,n;return(t=Bridge.as(e,System.String))!=null?t:Bridge.equals(n=Bridge.is(e,System.DateTime)?System.Nullable.getValue(Bridge.cast(Bridge.unbox(e,System.DateTime),System.DateTime)):null,null)?Bridge.toString(e):Kusto.Cloud.Platform.Utils.ExtendedDateTime.ToUtcString(n)},GetArgumentStringArray:function(e,t,n,r){if(!System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentColumnType.String,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))||n<0)return System.Array.init(r,null,System.String);var s=Kusto.Charting.DataChartsHelper.ParseJsonArrayAsString(Bridge.toString(e));return s??System.Array.init(r,null,System.String)},GetArgumentNumericArray:function(e,t,n,r){if(t!==Kusto.Charting.ArgumentColumnType.Numeric||n<0)return System.Linq.Enumerable.repeat(Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric,r).ToArray(System.Double);var s=Kusto.Charting.DataChartsHelper.ParseJsonArrayAsDouble(Bridge.toString(e));return s??System.Linq.Enumerable.repeat(Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric,r).ToArray(System.Double)},GetArgumentDateTimeArray:function(e,t,n,r){if(!System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.DateTimeOrTimeSpan,Bridge.box(t,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))||n<0)return System.Linq.Enumerable.repeat(Kusto.Charting.DataChartsHelper.c_defaultArgumentDatetime,r).ToArray(System.DateTime);var s=Kusto.Charting.DataChartsHelper.ParseJsonArrayAsDateTime(Bridge.toString(e),t);return s??System.Linq.Enumerable.repeat(Kusto.Charting.DataChartsHelper.c_defaultArgumentDatetime,r).ToArray(System.DateTime)},ResolveDataItemsFromDataRow:function(e,t,n,r,s,a,i,l,o){var d,m,c;System.Linq.Enumerable.from(n,Kusto.Charting.DataChartsHelper.ColumnDesc).any()||i.GeospatialArgumentDataType!==Kusto.Charting.ArgumentColumnType.Geospatial||e.add((d=new Kusto.Charting.DataItem.ctor,d.GeoCoordinates=i.GeoCoordinates,d.SeriesName=System.String.isNullOrWhiteSpace(a)?"":a,d.Properties=Kusto.Charting.DataChartsHelper.ResolveProperties(t,s,r),d)),d=Bridge.getEnumerator(n,Kusto.Charting.DataChartsHelper.ColumnDesc);try{for(;d.moveNext();){var p=d.Current,h=t.Kusto$Charting$IChartingDataSource$GetValue(s,p.Index),g=Kusto.Charting.DataChartsHelper.TryConvertToDouble(h,p.Type),S={},y=(m=new Kusto.Charting.DataItem.ctor,m.ArgumentData=i.Value,m.ArgumentDateTime=i.DateTime,m.ArgumentNumeric=i.NumericValue,m.ValueName=p.Name,m.Properties=Kusto.Charting.DataChartsHelper.ResolveProperties(t,s,r),m);i.GeospatialArgumentDataType===Kusto.Charting.ArgumentColumnType.Geospatial?(y.SeriesName=System.String.isNullOrWhiteSpace(a)?"":a,y.GeoCoordinates=i.GeoCoordinates):y.SeriesName=System.String.isNullOrEmpty(a)?p.Name:(a||"")+":"+(p.Name||""),c=l.tryGetValue(y.SeriesName,S),y.ValueData=o&&c?g+S.v:g,e.add(y),o||!c?l.setItem(y.SeriesName,y.ValueData):isNaN(g)||l.setItem(y.SeriesName,g)}}finally{Bridge.is(d,System.IDisposable)&&d.System$IDisposable$Dispose()}},GetBaseSeriesName:function(e,t,n){var r,s="",a,i,l;if(t!=null){a=new System.Text.StringBuilder,r=Bridge.getEnumerator(t,Kusto.Charting.DataChartsHelper.ColumnDesc);try{for(;r.moveNext();)i=r.Current,a.getLength()>0&&a.append(", "),l=Bridge.toString(e.Kusto$Charting$IChartingDataSource$GetValue(n,i.Index)),l=System.String.isNullOrWhiteSpace(l)?Kusto.Charting.DataChartsHelper.c_defaultArgumentString:l,a.appendFormat("{0}:{1}",i.Name,l)}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}s=a.toString()}return s},TrySetGeoJSONPoint:function(e,t){t.v=null;try{t.v=Newtonsoft.Json.JsonConvert.DeserializeObject(e,Kusto.Charting.DataChartsHelper.GeoJSONPoint)}catch(n){if(n=System.Exception.create(n),Bridge.is(n,Newtonsoft.Json.JsonException))return!1;throw n}return(t.v!=null?t.v.coordinates:null)==null?!1:t.v.coordinates.length===2},GetArgumentDateTime:function(e,t){return!System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentColumnType.DateTime,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&!System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentColumnType.TimeSpan,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))?Kusto.Charting.DataChartsHelper.c_defaultArgumentDatetime:Bridge.is(e,System.DateTime)?System.Nullable.getValue(Bridge.cast(Bridge.unbox(e,System.DateTime),System.DateTime)):Bridge.is(e,System.TimeSpan)?Kusto.Charting.DataChartsHelper.TimeSpanToDateTime(System.Nullable.getValue(Bridge.cast(Bridge.unbox(e,System.TimeSpan),System.TimeSpan))):Kusto.Charting.DataChartsHelper.c_defaultArgumentDatetime},ConvertToDouble:function(e,t){var n=Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric;if(e==null)return n;if(t===Kusto.Charting.ArgumentColumnType.DateTime)n=Kusto.Charting.DataChartsHelper.DateTimeToTotalSeconds(System.Nullable.getValue(Bridge.cast(Bridge.unbox(e,System.DateTime),System.DateTime)));else if(t===Kusto.Charting.ArgumentColumnType.TimeSpan)n=Kusto.Charting.DataChartsHelper.TimeSpanToTotalSeconds(System.Nullable.getValue(Bridge.cast(Bridge.unbox(e,System.TimeSpan),System.TimeSpan)));else try{n=System.Convert.toDouble(e)}catch(r){r=System.Exception.create(r),n=Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric}return n},TryConvertToDouble:function(e,t){return e==null||Kusto.Charting.DataChartsHelper.IsEmptyValue(e)?Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric:Kusto.Charting.DataChartsHelper.ConvertToDouble(e,t)},DetectChartDimensionsUsingData:function(e,t,n,r,s){var a,i=System.Array.init(System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count(),0,Kusto.Charting.ArgumentColumnType),l,o,d;if(t.Kusto$Charting$IChartingDataSource$RowsCount===0)return!1;for(l=-1,o=0;o<System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count();o=o+1|0)if(d=System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(o),i[System.Array.index(o,i)]=d.Item2,!s.v.DataIndexesList.contains(o)&&(d.Item2===Kusto.Charting.ArgumentColumnType.String||d.Item2===Kusto.Charting.ArgumentColumnType.Object)){var m=t.Kusto$Charting$IChartingDataSource$GetValue(0,o),c=(a=Bridge.as(m,System.String),a??Bridge.toString(m)),p=Kusto.Charting.DataChartsHelper.ResolveJsonArrayType(c);if(p===Kusto.Charting.ArgumentColumnType.None){!System.Linq.Enumerable.from(n,System.String).any()&&s.v.ArgumentDataColumnIndex<0&&s.v.SeriesIndexesList.add(o);continue}i[System.Array.index(o,i)]=p,System.Enum.hasFlag(s.v.ArgumentColumnType,Bridge.box(p,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&(s.v.ArgumentDataColumnIndex<0||System.Enum.hasFlag(r,Bridge.box(Kusto.Charting.ArgumentRestrictions.PreferLast,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions))))?s.v.ArgumentDataColumnIndex=o:p===Kusto.Charting.ArgumentColumnType.Numeric&&l<0&&(l=o)}return Kusto.Charting.DataChartsHelper.CompleteChartDimentionsDetection(e,r,l,i,s)},DetectChartDimensionsUsingColumnTypesAndData:function(e,t,n,r){for(var s,a,i,l=-1,o=new(System.Collections.Generic.List$1(System.Int32)).ctor,d=System.Linq.Enumerable.from(r.v.GeospatiaColumnlIndexesList,System.Int32).any(),m=0;m<System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count();m=m+1|0)if(!r.v.DataIndexesList.contains(m)&&!r.v.SeriesIndexesList.contains(m)){if(s=System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).elementAt(m),r.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial&&System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.StringOrObject,Bridge.box(s.Item2,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&o.add(m),r.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial&&System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.Numeric,Bridge.box(s.Item2,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&System.Linq.Enumerable.from(r.v.GeospatiaColumnlIndexesList,System.Int32).count()<2&&!d)r.v.GeospatiaColumnlIndexesList.add(m);else if(System.Enum.hasFlag(r.v.ArgumentColumnType,Bridge.box(s.Item2,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&(r.v.ArgumentDataColumnIndex<0||System.Enum.hasFlag(n,Bridge.box(Kusto.Charting.ArgumentRestrictions.PreferLast,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))))r.v.ArgumentDataColumnIndex=m;else if(s.Item2===Kusto.Charting.ArgumentColumnType.Numeric&&r.v.ArgumentDataColumnIndex!==-1&&System.Enum.hasFlag(n,Bridge.box(Kusto.Charting.ArgumentRestrictions.NumericAsSeries,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))){l=m;break}}if(r.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial&&System.Linq.Enumerable.from(r.v.GeospatiaColumnlIndexesList,System.Int32).count()<2&&!d){r.v.GeospatiaColumnlIndexesList.clear(),i=Bridge.getEnumerator(o);try{for(;i.moveNext();){var c=i.Current,p=Bridge.toString(t.Kusto$Charting$IChartingDataSource$GetValue(0,c)),h={};if(Kusto.Charting.DataChartsHelper.TrySetGeoJSONPoint(p,h)){r.v.GeospatiaColumnlIndexesList.add(c);break}}}finally{Bridge.is(i,System.IDisposable)&&i.System$IDisposable$Dispose()}}return a=System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).select(u.$.Kusto.Charting.DataChartsHelper.f19).ToArray(Kusto.Charting.ArgumentColumnType),Kusto.Charting.DataChartsHelper.CompleteChartDimentionsDetection(e,n,l,a,r)},CompleteChartDimentionsDetection:function(e,t,n,r,s){var a,i,l,o;if(s.v.ArgumentDataColumnIndex>=0&&System.Linq.Enumerable.from(s.v.SeriesIndexesList,System.Int32).any())return!0;if(s.v.ArgumentDataColumnIndex<0&&n<0&&System.Enum.hasFlag(s.v.ArgumentColumnType,Bridge.box(Kusto.Charting.ArgumentColumnType.Numeric,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType))))return!1;if(s.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial&&!System.Linq.Enumerable.from(s.v.GeospatiaColumnlIndexesList,System.Int32).any())return!1;if(s.v.ArgumentDataColumnIndex<0&&s.v.ArgumentColumnType!==Kusto.Charting.ArgumentColumnType.Geospatial){if(System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.DateTimeOrTimeSpan,Bridge.box(s.v.ArgumentColumnType,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType))))return!1;System.Enum.hasFlag(s.v.ArgumentColumnType,Bridge.box(Kusto.Charting.ArgumentColumnType.Numeric,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))?System.Linq.Enumerable.from(e,System.Tuple$2(System.String,Kusto.Charting.ArgumentColumnType)).count()>1&&(s.v.ArgumentDataColumnIndex=n):s.v.ArgumentDataColumnIndex=System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentRestrictions.NotIncludedInSeries,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))?Kusto.Charting.DataChartsHelper.GoBackwardsAndFindColumnNotInList(n,s.v.SeriesIndexes,s.v.DataIndexes):n-1|0}if(s.v.ArgumentDataColumnIndex<0&&System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentRestrictions.MustHave,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))&&(s.v.ArgumentDataColumnIndex=0),s.v.ArgumentColumnType===Kusto.Charting.ArgumentColumnType.Geospatial)if(i=Kusto.Charting.DataChartsHelper.GetFirstStringAvailableColumnIndexOrNonStringIfAbsent(r,s.v.GeospatialColumnIndexes),t===Kusto.Charting.ArgumentRestrictions.GeospatialAsSeries){if(s.v.ArgumentDataColumnIndex=i,!System.Linq.Enumerable.from(s.v.SeriesIndexesList,System.Int32).any()){a=Bridge.getEnumerator(s.v.GeospatiaColumnlIndexesList);try{for(;a.moveNext();)l=a.Current,s.v.SeriesIndexesList.add(l)}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}}}else i===-1||System.Linq.Enumerable.from(s.v.SeriesIndexesList,System.Int32).any()||s.v.SeriesIndexesList.add(i);else!System.Linq.Enumerable.from(s.v.SeriesIndexesList,System.Int32).any()&&s.v.ArgumentDataColumnIndex>=0&&(o=s.v.ArgumentDataColumnIndex,r[System.Array.index(s.v.ArgumentDataColumnIndex,r)]!==Kusto.Charting.ArgumentColumnType.String?o=Kusto.Charting.DataChartsHelper.GetFirstStringColumnIndex(r):System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentRestrictions.NotIncludedInSeries,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))&&(o=s.v.ArgumentDataColumnIndex-1|0),s.v.IsDataFormedAsSeries||o===-1&&System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentRestrictions.NumericAsSeries,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))&&(o=Kusto.Charting.DataChartsHelper.GetFirstStringAvailableColumnIndexOrNonStringIfAbsent(r,null),System.Enum.hasFlag(t,Bridge.box(Kusto.Charting.ArgumentRestrictions.NotIncludedInSeries,Kusto.Charting.ArgumentRestrictions,System.Enum.toStringFn(Kusto.Charting.ArgumentRestrictions)))&&o===s.v.ArgumentDataColumnIndex&&(o=-1)),o>=0&&!s.v.DataIndexesList.contains(o)&&s.v.SeriesIndexesList.add(o));return!0},GoBackwardsAndFindColumnNotInList:function(e,t,n){for(var r,s,a=e-1|0;a>=0;a=a-1|0)if(r=t==null?!0:!System.Linq.Enumerable.from(t,System.Int32).contains(a),s=n==null?!0:!System.Linq.Enumerable.from(n,System.Int32).contains(a),r&&s)return a;return-1},GetFirstStringColumnIndex:function(e){for(var t=0;t<System.Linq.Enumerable.from(e,Kusto.Charting.ArgumentColumnType).count();t=t+1|0)if(System.Linq.Enumerable.from(e,Kusto.Charting.ArgumentColumnType).elementAt(t)===Kusto.Charting.ArgumentColumnType.String)return t;return-1},GetFirstStringAvailableColumnIndexOrNonStringIfAbsent:function(e,t){for(var n,r,s=-1,a=0;a<System.Linq.Enumerable.from(e,Kusto.Charting.ArgumentColumnType).count();a=a+1|0){if(e[System.Array.index(a,e)]===Kusto.Charting.ArgumentColumnType.String&&(n=System.Nullable.not(t!=null?System.Linq.Enumerable.from(t,System.Int32).contains(a):null),n??!0))return a;s===-1&&(r=System.Nullable.not(t!=null?System.Linq.Enumerable.from(t,System.Int32).contains(a):null),r??!0)&&(s=a)}return s},TimeSpanToDateTime:function(e){return e.getTicks().lte(System.Int64(0))?System.DateTime.getMinValue():System.DateTime.create$2(e.getTicks(),1)},TimeSpanToTotalSeconds:function(e){return e.getTotalSeconds()},DateTimeToTotalSeconds:function(e){return System.TimeSpan.fromTicks(System.DateTime.getTicks(e)).getTotalSeconds()},ParseJsonArrayAsDateTime:function(e,t){if(System.String.isNullOrWhiteSpace(e)||!System.String.startsWith(e.trim(),"[",4))return null;try{if(t===Kusto.Charting.ArgumentColumnType.DateTime)return System.Linq.Enumerable.from(Newtonsoft.Json.JsonConvert.DeserializeObject(e,System.Array.type(System.DateTime)),System.DateTime).select(u.$.Kusto.Charting.DataChartsHelper.f20).ToArray(System.DateTime);if(t===Kusto.Charting.ArgumentColumnType.TimeSpan){var n=Newtonsoft.Json.JsonConvert.DeserializeObject(e,System.Array.type(System.TimeSpan));return System.Linq.Enumerable.from(n,System.TimeSpan).select(u.$.Kusto.Charting.DataChartsHelper.f21).ToArray(System.DateTime)}}catch(r){r=System.Exception.create(r)}return null},ParseJsonArrayAsDouble:function(e,t){var n,r,s,a,i,l,o,d;if(t===void 0&&(t=!1),System.String.isNullOrWhiteSpace(e)||!System.String.startsWith(e.trim(),"[",4))return null;try{r=Newtonsoft.Json.JsonConvert.DeserializeObject(e,System.Array.type(System.String)),n=System.Array.init(System.Linq.Enumerable.from(r,System.String).count(),0,System.Double)}catch(m){return m=System.Exception.create(m),null}for(s=Kusto.Charting.ArgumentColumnType.None,a={},i=0;i<r.length;i=i+1|0){if(l=r[System.Array.index(i,r)],l==null){n[System.Array.index(i,n)]=Number.NaN;continue}else if(System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.Numeric,Bridge.box(s,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&System.Double.tryParse(l,null,a)){s===Kusto.Charting.ArgumentColumnType.None&&(s=Kusto.Charting.ArgumentColumnType.Numeric),n[System.Array.index(i,n)]=a.v;continue}else if(t){if(o={},System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.TimeSpan,Bridge.box(s,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&System.TimeSpan.tryParse(l,null,o)){s===Kusto.Charting.ArgumentColumnType.None&&(s=Kusto.Charting.ArgumentColumnType.TimeSpan),n[System.Array.index(i,n)]=o.v.getTotalSeconds();continue}if(d={},System.Enum.hasFlag(Kusto.Charting.ArgumentColumnType.DateTime,Bridge.box(s,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))&&System.DateTime.tryParse(l,null,d)){s===Kusto.Charting.ArgumentColumnType.None&&(s=Kusto.Charting.ArgumentColumnType.DateTime),n[System.Array.index(i,n)]=System.TimeSpan.fromTicks(System.DateTime.getTicks(d.v)).getTotalSeconds();continue}}return null}return s!==Kusto.Charting.ArgumentColumnType.None?n:null},ParseJsonArrayAsString:function(e){if(System.String.isNullOrWhiteSpace(e)||!System.String.startsWith(e.trim(),"[",4))return null;try{return Newtonsoft.Json.JsonConvert.DeserializeObject(e,System.Array.type(System.String))}catch(t){t=System.Exception.create(t)}return null},ArrayIsTimespan:function(e){var t,n=!1,r={},s;t=Bridge.getEnumerator(e);try{for(;t.moveNext();)if(s=t.Current,s!=null){if(System.TimeSpan.tryParse(s,null,r)){n=!0;continue}return!1}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return n},ArrayIsDatetime:function(e){var t,n=!1,r={},s;t=Bridge.getEnumerator(e);try{for(;t.moveNext();)if(s=t.Current,s!=null){if(System.DateTime.tryParse(s,null,r)){n=!0;continue}return!1}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return n},ArrayIsDouble:function(e){var t,n=!1,r={},s;t=Bridge.getEnumerator(e);try{for(;t.moveNext();)if(s=t.Current,s!=null){if(System.Double.tryParse(s,null,r)){n=!0;continue}return!1}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return n},IsEmptyValue:function(e){return e==null||Bridge.referenceEquals(e,System.DBNull.Value)?!0:!!(Bridge.is(e,System.String)&&System.String.isNullOrEmpty(Bridge.cast(e,System.String)))}}}}),Bridge.ns("Kusto.Charting.DataChartsHelper",u.$),Bridge.apply(u.$.Kusto.Charting.DataChartsHelper,{f1:function(e,t){return new Kusto.Charting.DataChartsHelper.ColumnDesc(e.Item1,e.Item2,t)},f2:function(e){return e>=0},f3:function(e){return!Kusto.Charting.ExtendedDouble.IsFinite(e.value)},f4:function(e){return e.key},f5:function(e){return!0},f6:function(e){return e.value.TotalPoints.gte(e.value.NonNanPoints.mul(System.Int64(2)))},f7:function(e){return e.SeriesName},f8:function(e){return e},f9:function(e){return System.DateTime.getTicks(e.ArgumentDateTime)},f10:function(e){return System.Convert.toDouble(System.DateTime.getTicks(e.ArgumentDateTime))},f11:function(e){return e.ArgumentNumeric},f12:function(e){return!Bridge.equals(e.ArgumentDateTime,Kusto.Charting.DataChartsHelper.c_defaultArgumentDatetime)},f13:function(e){return!isNaN(e.ArgumentNumeric)},f14:function(e){return Math.abs(e.ValueData)===Number.POSITIVE_INFINITY},f15:function(e){return e.GeoCoordinates!=null&&(e.GeoCoordinates.Longitude>180||e.GeoCoordinates.Longitude<-180||e.GeoCoordinates.Latitude>90||e.GeoCoordinates.Latitude<-90)},f16:function(e){return e==null},f17:function(e){return Kusto.Charting.DataChartsHelper.ParseJsonArrayAsString(Bridge.as(e,System.String))||e},f18:function(e,t){return{Item1:e,Item2:t}},f19:function(e){return e.Item2},f20:function(e){return Kusto.Cloud.Platform.Utils.ExtendedDateTime.ToUtc(e)},f21:function(e){return Kusto.Charting.DataChartsHelper.TimeSpanToDateTime(e)}}),Bridge.define("Kusto.Charting.DataChartsHelper.ArgumentData",{$kind:"nested class",fields:{m_requestedType:0,m_colIndex:0,m_colName:null,m_colType:0,m_geospatialIndexes:null},props:{GeospatialArgumentDataType:0,Value:null,DateTime:null,NumericValue:0,GeoCoordinates:null},ctors:{init:function(){this.DateTime=System.DateTime.getDefaultValue()},ctor:function(e,t,n,r,s){s===void 0&&(s=null);var a;this.$initialize(),this.m_colIndex=e,this.m_colName=t,this.m_colType=n,this.m_requestedType=r,s!=null&&System.Linq.Enumerable.from(s,System.Int32).any()?(this.m_geospatialIndexes=(a=System.Int32,System.Linq.Enumerable.from(s,a).toList(a)),this.GeospatialArgumentDataType=Kusto.Charting.ArgumentColumnType.Geospatial):this.GeospatialArgumentDataType=Kusto.Charting.ArgumentColumnType.None}},methods:{ResolveArgumentFromRow:function(e,t){var n,r,s,a,i,l;if(this.m_requestedType!==Kusto.Charting.ArgumentColumnType.Geospatial){this.ResolveArgument(e,t);return}this.m_geospatialIndexes.Count===2?(a=e.Kusto$Charting$IChartingDataSource$GetValue(t,this.m_geospatialIndexes.getItem(0)),i=e.Kusto$Charting$IChartingDataSource$GetValue(t,this.m_geospatialIndexes.getItem(1)),this.GeoCoordinates=(n=new Kusto.Charting.GeospatialCoordinates,n.Longitude=Kusto.Charting.DataChartsHelper.TryConvertToDouble(a,Kusto.Charting.ArgumentColumnType.Numeric),n.Latitude=Kusto.Charting.DataChartsHelper.TryConvertToDouble(i,Kusto.Charting.ArgumentColumnType.Numeric),n)):(l={},this.GeoCoordinates=this.m_geospatialIndexes.Count===1&&Kusto.Charting.DataChartsHelper.TrySetGeoJSONPoint(Bridge.toString(e.Kusto$Charting$IChartingDataSource$GetValue(t,this.m_geospatialIndexes.getItem(0))),l)?(n=new Kusto.Charting.GeospatialCoordinates,n.Longitude=(r=l.v.coordinates)[System.Array.index(0,r)],n.Latitude=(s=l.v.coordinates)[System.Array.index(1,s)],n):(n=new Kusto.Charting.GeospatialCoordinates,n.Longitude=Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric,n.Latitude=Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric,n)),this.m_colIndex!==-1&&this.ResolveArgument(e,t,!0)},ResolveArgument:function(e,t,n){var r,s,a;n===void 0&&(n=!1),r=e.Kusto$Charting$IChartingDataSource$GetValue(t,this.m_colIndex),s=r==null?this.m_requestedType:this.m_colType,this.DateTime=Kusto.Charting.DataChartsHelper.GetArgumentDateTime(r,s),a=this.m_colIndex>=0&&r!=null?Bridge.toString(r):"",System.String.isNullOrWhiteSpace(a)&&(a=Kusto.Charting.DataChartsHelper.c_defaultArgumentString),this.Value=n?System.String.format("{0}:{1}",this.m_colName,a):a,this.NumericValue=!System.Enum.hasFlag(s,Bridge.box(Kusto.Charting.ArgumentColumnType.Numeric,Kusto.Charting.ArgumentColumnType,System.Enum.toStringFn(Kusto.Charting.ArgumentColumnType)))||Kusto.Charting.DataChartsHelper.IsEmptyValue(r)?Kusto.Charting.DataChartsHelper.c_defaultArgumentNumeric:Kusto.Charting.DataChartsHelper.TryConvertToDouble(r,s)}}}),Bridge.define("Kusto.Charting.IChartMetaData",{$kind:"interface"}),Bridge.define("Kusto.Charting.DataChartsHelper.ColumnDesc",{$kind:"nested class",props:{Name:null,Type:0,Index:0},ctors:{ctor:function(e,t,n){this.$initialize(),this.Name=e,this.Type=t,this.Index=n}}}),Bridge.define("Kusto.Charting.DataChartsHelper.GeoJSON",{$kind:"nested enum",statics:{fields:{Point:0}}}),Bridge.define("Kusto.Charting.DataChartsHelper.GeoJSONPoint",{$kind:"nested class",props:{type:0,coordinates:null}}),Bridge.define("Kusto.Charting.DataChartsHelper.SeriesStatsCounters",{$kind:"nested class",fields:{TotalPoints:System.Int64(0),NonNanPoints:System.Int64(0)}}),Bridge.define("Kusto.Charting.DataItem",{props:{SeriesName:null,ArgumentData:null,ValueData:0,ValueName:null,ArgumentDateTime:null,ArgumentNumeric:0,GeoCoordinates:null,SecondaryAxisYName:null,PrefferredChartKind:0,Properties:null,PropertiesTruncated:{get:function(){if(System.String.isNullOrEmpty(this.Properties))return"";var e=150;return this.Properties.length<e?this.Properties:(this.Properties.substr(0,e)||"")+"..."}}},ctors:{init:function(){this.ArgumentDateTime=System.DateTime.getDefaultValue()},ctor:function(){this.$initialize()},$ctor1:function(e){var t;this.$initialize(),this.SeriesName=e.SeriesName,this.ArgumentData=e.ArgumentData,this.ValueData=e.ValueData,this.ValueName=e.ValueName,this.ArgumentDateTime=e.ArgumentDateTime,this.ArgumentNumeric=e.ArgumentNumeric,this.SecondaryAxisYName=e.SecondaryAxisYName,this.PrefferredChartKind=e.PrefferredChartKind,this.Properties=e.Properties,this.GeoCoordinates=e.GeoCoordinates==null?null:(t=new Kusto.Charting.GeospatialCoordinates,t.Longitude=e.GeoCoordinates.Longitude,t.Latitude=e.GeoCoordinates.Latitude,t)}},methods:{Clone:function(){return new Kusto.Charting.DataItem.$ctor1(this)}}}),Bridge.define("Kusto.Charting.ExtendedDouble",{statics:{methods:{IsFinite:function(e){return Math.abs(e)!==Number.POSITIVE_INFINITY&&!isNaN(e)}}}}),Bridge.define("Kusto.Charting.GeospatialCoordinates",{props:{Longitude:0,Latitude:0}}),Bridge.define("Kusto.Charting.IChartingDataSource",{$kind:"interface"}),Bridge.define("Kusto.Charting.IKustoClientContext",{$kind:"interface"}),Bridge.define("Kusto.Charting.SeriesCreationException",{inherits:[System.Exception],ctors:{ctor:function(e){this.$initialize(),System.Exception.ctor.call(this,e)}}}),Bridge.define("Kusto.Charting.ValidationStatus",{$kind:"enum",statics:{fields:{Valid:0,PolicyViolationError:1,PolicyViolationWarning:2}}}),Bridge.define("Kusto.Cloud.Platform.Text.StringLiteral",{statics:{fields:{MultiLineStringQuote:null,AlternateMultiLineStringQuote:null,categoryForLatin1:null},ctors:{init:function(){this.MultiLineStringQuote="```",this.AlternateMultiLineStringQuote="~~~",this.categoryForLatin1=System.Array.init([14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,11,24,24,24,26,24,24,24,20,21,24,25,24,19,24,24,8,8,8,8,8,8,8,8,8,8,24,24,25,25,25,24,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,24,21,27,18,27,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,25,21,25,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,11,24,26,26,26,26,28,28,27,28,1,22,25,19,28,27,28,25,10,10,27,1,28,24,27,10,1,23,10,10,10,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,25,1,1,1,1,1,1,1,1],System.Byte)}},methods:{ParseStringLiteral:function(e){var t={};return Kusto.Cloud.Platform.Text.StringLiteral.ParseStringLiteral$1(e,t)},ParseStringLiteral$1:function(e,t){var n={};if(Kusto.Cloud.Platform.Text.StringLiteral.TryParseStringLiteral$1(e,n,t))return n.v;throw new System.ArgumentException.$ctor1(System.String.format("Malformed string literal: '{0}'",[e]))},TryParseStringLiteral:function(e,t){var n={};return Kusto.Cloud.Platform.Text.StringLiteral.TryParseStringLiteral$1(e,t,n)},TryParseStringLiteral$1:function(e,t,n){var r,s,a;if(t.v=e,n.v=!1,System.String.isNullOrWhiteSpace(t.v))return!1;if((t.v.charCodeAt(0)===104||t.v.charCodeAt(0)===72)&&(n.v=!0,t.v=t.v.substr(1)),r={},Kusto.Cloud.Platform.Text.StringLiteral.TryParseMultiLineStringLiteral(t.v,r))return t.v=r.v,!0;if(System.String.startsWith(t.v,'"',4)){if(t.v.length>=2&&System.String.endsWith(t.v,'"'))return t.v=t.v.substr(1,t.v.length-2|0),!!Kusto.Cloud.Platform.Utils.ExtendedRegex.TryUnescape(t.v,t)}else if(System.String.startsWith(t.v,"'",4)){if(t.v.length>=2&&System.String.endsWith(t.v,"'",4))return t.v=t.v.substr(1,t.v.length-2|0),!!Kusto.Cloud.Platform.Utils.ExtendedRegex.TryUnescape(t.v,t)}else if(System.String.startsWith(t.v,'@"',4)){if(t.v.length>=3&&System.String.endsWith(t.v,'"',4))return s=t.v.substr(2,t.v.length-3|0),t.v=System.String.replaceAll(s,'""','"'),!0}else if(System.String.startsWith(t.v,"@'",4)&&t.v.length>=3&&System.String.endsWith(t.v,"'",4))return a=t.v.substr(2,t.v.length-3|0),t.v=System.String.replaceAll(a,"''","'"),!0;return!1},Equals:function(e,t){return e==null&&t==null?!0:e==null||t==null?!1:System.String.equals(e,t,4)},TrimSingleQuotes:function(e){return System.String.isNullOrWhiteSpace(e)||System.String.startsWith(e,"'",4)&&System.String.endsWith(e,"'",4)&&e.length>=2&&(e=e.substr(1,e.length-2|0)),e},TrimBrackets:function(e){return System.String.startsWith(e,"[",4)&&System.String.endsWith(e,"]",4)&&e.length>=2&&(e=e.substr(1,e.length-2|0)),e},InitArray:function(e,t,n){if(t!=null)for(var r=0;r<t.length;r=r+1|0)t[System.Array.index(r,t)]=n},GetLiteral:function(e){return Kusto.Cloud.Platform.Text.StringLiteral.GetLiteral$1(e,!1)},GetLiteral$1:function(e,t){var n,r,s;if(e==null)return null;r=new System.Text.StringBuilder,t&&r.append("h"),r.append('"'),n=Bridge.getEnumerator(e);try{for(;n.moveNext();)switch(s=n.Current,s){case 39:r.append("\\'");break;case 34:r.append('\\"');break;case 92:r.append("\\\\");break;case 0:r.append("\\0");break;case 7:r.append("\\a");break;case 8:r.append("\\b");break;case 12:r.append("\\f");break;case 10:r.append("\\n");break;case 13:r.append("\\r");break;case 9:r.append("\\t");break;case 11:r.append("\\v");break;default:Kusto.Cloud.Platform.Text.StringLiteral.ShouldBeEscaped(s)?(r.append("\\u"),r.append(System.UInt16.format(s,"x4"))):r.append(String.fromCharCode(s));break}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return r.append('"'),r.toString()},GetLiteralAsHiddenString:function(e){return Kusto.Cloud.Platform.Text.StringLiteral.GetLiteral$1(e,!0)},TryParseMultiLineStringLiteral:function(e,t){return Kusto.Cloud.Platform.Text.StringLiteral.TryParseSimpleStringLiteral(e,Kusto.Cloud.Platform.Text.StringLiteral.MultiLineStringQuote,t)||Kusto.Cloud.Platform.Text.StringLiteral.TryParseSimpleStringLiteral(e,Kusto.Cloud.Platform.Text.StringLiteral.AlternateMultiLineStringQuote,t)},TryParseSimpleStringLiteral:function(e,t,n){if(System.String.startsWith(e,t,4)){var r=t.length<<1;return e.length>=r&&System.String.endsWith(e,t,4)?(n.v=e.substr(t.length,e.length-r|0),!0):(n.v=e.substr(t.length),!0)}return n.v=null,!1},ShouldBeEscaped:function(e){return Kusto.Cloud.Platform.Text.StringLiteral.IsLatin1(e)?Kusto.Cloud.Platform.Text.StringLiteral.GetLatin1UnicodeCategory(e)===14:!0},GetLatin1UnicodeCategory:function(e){return Kusto.Cloud.Platform.Text.StringLiteral.categoryForLatin1[System.Array.index(e,Kusto.Cloud.Platform.Text.StringLiteral.categoryForLatin1)]},IsLatin1:function(e){return e<=255},IsAscii:function(e){return e<=127}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.BitTwiddling",{statics:{methods:{CountBits:function(e){for(var t=0;e!==0;)e=e&(e-1|0),t=t+1|0;return t},CountBits$1:function(e){for(var t=0;e.ne(System.Int64(0));)e=e.and(e.sub(System.Int64(1))),t=t+1|0;return t}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.ChopOptions",{$kind:"enum",statics:{fields:{ChopFromBeginning:1,ChopFromEnd:2,ChopFromMiddle:4,ThreeDotsCharacterNotSupported:8}}}),Bridge.define("Kusto.Cloud.Platform.Utils.CountConstants",{statics:{fields:{_1K:0,_64K:0,_1M:0},ctors:{init:function(){this._1K=1e3,this._64K=64e3,this._1M=1e6}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.DateTimeRange",{inherits:function(){return[System.IEquatable$1(Kusto.Cloud.Platform.Utils.DateTimeRange)]},$kind:"struct",statics:{fields:{All:null},ctors:{init:function(){this.All=new Kusto.Cloud.Platform.Utils.DateTimeRange,this.All=new Kusto.Cloud.Platform.Utils.DateTimeRange.$ctor1(Kusto.Cloud.Platform.Utils.ExtendedDateTime.MinValueUtc,Kusto.Cloud.Platform.Utils.ExtendedDateTime.MaxValueUtc)}},methods:{Aggregate:function(e,t){return new Kusto.Cloud.Platform.Utils.DateTimeRange.$ctor1(System.DateTime.gt(e.Begin,t.Begin)?t.Begin:e.Begin,System.DateTime.gt(e.End,t.End)?e.End:t.End)},Merge:function(e){var t,n=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastCountUpTo(Kusto.Cloud.Platform.Utils.DateTimeRange,e,System.Int64(2)),r;if(n.equals(System.Int64(0)))return new(System.Collections.Generic.HashSet$1(Kusto.Cloud.Platform.Utils.DateTimeRange)).ctor;if(n.equals(System.Int64(1)))return new(System.Collections.Generic.HashSet$1(Kusto.Cloud.Platform.Utils.DateTimeRange)).$ctor1(e);var s=new(System.Collections.Generic.HashSet$1(Kusto.Cloud.Platform.Utils.DateTimeRange)).ctor,a=System.Linq.Enumerable.from(e,Kusto.Cloud.Platform.Utils.DateTimeRange).orderBy(u.$.Kusto.Cloud.Platform.Utils.DateTimeRange.f1),i=!0,l=null,o=null;t=Bridge.getEnumerator(a);try{for(;t.moveNext();)r=t.Current,i&&(l=r.Begin,o=r.End,i=!1),System.DateTime.lte(r.Begin,o)?System.DateTime.lt(o,r.End)&&(o=r.End):(s.add(new Kusto.Cloud.Platform.Utils.DateTimeRange.$ctor1(System.Nullable.getValue(l),System.Nullable.getValue(o))),l=r.Begin,o=r.End)}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return s.add(new Kusto.Cloud.Platform.Utils.DateTimeRange.$ctor1(System.Nullable.getValue(l),System.Nullable.getValue(o))),s},Intersect:function(e,t){var n,r,s,a;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Cloud.Platform.Utils.DateTimeRange,e)||Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Cloud.Platform.Utils.DateTimeRange,t))return new(System.Collections.Generic.HashSet$1(Kusto.Cloud.Platform.Utils.DateTimeRange)).ctor;s=new(System.Collections.Generic.HashSet$1(Kusto.Cloud.Platform.Utils.DateTimeRange)).ctor,n=Bridge.getEnumerator(e,Kusto.Cloud.Platform.Utils.DateTimeRange);try{for(;n.moveNext();){a=n.Current,r=Bridge.getEnumerator(t,Kusto.Cloud.Platform.Utils.DateTimeRange);try{for(;r.moveNext();){var i=r.Current,l=System.DateTime.create$2(System.Int64.max(System.DateTime.getTicks(a.Begin),System.DateTime.getTicks(i.Begin)),1),o=System.DateTime.create$2(System.Int64.min(System.DateTime.getTicks(a.End),System.DateTime.getTicks(i.End)),1);System.DateTime.lte(l,o)&&s.add(new Kusto.Cloud.Platform.Utils.DateTimeRange.$ctor1(l,o))}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return s},getDefaultValue:function(){return new Kusto.Cloud.Platform.Utils.DateTimeRange}}},fields:{m_begin:null,m_end:null},props:{Begin:{get:function(){return this.m_begin}},End:{get:function(){return this.m_end}},Span:{get:function(){return System.DateTime.subdd(this.End,this.Begin)}},IsOpenRange:{get:function(){return Bridge.equalsT(this.Begin,Kusto.Cloud.Platform.Utils.ExtendedDateTime.MinValueUtc)||Bridge.equalsT(this.End,Kusto.Cloud.Platform.Utils.ExtendedDateTime.MaxValueUtc)}}},alias:["equalsT","System$IEquatable$1$Kusto$Cloud$Platform$Utils$DateTimeRange$equalsT"],ctors:{init:function(){this.m_begin=System.DateTime.getDefaultValue(),this.m_end=System.DateTime.getDefaultValue()},$ctor1:function(e,t){throw this.$initialize(),this.m_begin=e,this.m_end=t,new System.ArgumentException.$ctor1("DateTimeRange construction: End parameter should be later than Begin parameter")},ctor:function(){this.$initialize()}},methods:{IsInRangeInclusive:function(e){return System.DateTime.lte(this.Begin,e)&&System.DateTime.lte(e,this.End)},IsInRangeExclusive:function(e){return System.DateTime.lt(this.Begin,e)&&System.DateTime.lt(e,this.End)},equalsT:function(e){return Bridge.equalsT(this.Begin,e.Begin)&&Bridge.equalsT(this.End,e.End)},equals:function(e){return e==null?!1:Bridge.is(e,Kusto.Cloud.Platform.Utils.DateTimeRange)?this.equalsT(System.Nullable.getValue(Bridge.cast(Bridge.unbox(e,Kusto.Cloud.Platform.Utils.DateTimeRange),Kusto.Cloud.Platform.Utils.DateTimeRange))):!1},getHashCode:function(){return Bridge.getHashCode(this.Begin)^Bridge.getHashCode(this.End)},toString:function(){return System.String.formatProvider(System.Globalization.CultureInfo.invariantCulture,"[Begin={0}, End={1}]",System.DateTime.format(this.Begin,"R"),System.DateTime.format(this.End,"R"))},$clone:function(e){var t=e||new Kusto.Cloud.Platform.Utils.DateTimeRange;return t.m_begin=this.m_begin,t.m_end=this.m_end,t}}}),Bridge.ns("Kusto.Cloud.Platform.Utils.DateTimeRange",u.$),Bridge.apply(u.$.Kusto.Cloud.Platform.Utils.DateTimeRange,{f1:function(e){return e.Begin}}),Bridge.define("Kusto.Cloud.Platform.Utils.ExtendedDateTime",{statics:{fields:{MaxUnixTimeMilliseconds:System.Int64(0),MinUnixTimeMilliseconds:System.Int64(0),MaxUnixTimeMicroseconds:System.Int64(0),MinUnixTimeMicroseconds:System.Int64(0),MicrosecondsPerMillisecond:System.Int64(0),TicksPerMillisecond:System.Int64(0),TicksPerSecond:System.Int64(0),TicksPerMinute:System.Int64(0),TicksPerHour:System.Int64(0),TicksPerDay:System.Int64(0),MillisPerSecond:0,MillisPerMinute:0,MillisPerHour:0,MillisPerDay:0,DaysPerYear:0,DaysPer4Years:0,DaysPer100Years:0,DaysPer400Years:0,DaysTo1601:0,DaysTo1899:0,DaysTo1970:0,DaysTo10000:0,MinTicks:System.Int64(0),MaxTicks:System.Int64(0),MaxMillis:System.Int64(0),FileTimeOffset:System.Int64(0),DoubleDateOffset:System.Int64(0),OADateMinAsTicks:System.Int64(0),OADateMinAsDouble:0,OADateMaxAsDouble:0,DatePartYear:0,DatePartDayOfYear:0,DatePartMonth:0,DatePartDay:0,MinValueUtc:null,MaxValueUtc:null,SupportedNonStandardFormats:null,EpochStart:null,s_simulating:!1,s_numCharactersInIso8601:0,ts_lastUtcNow:null,ts_lastUtcNowAsString:null,DaysToMonth365:null,DaysToMonth366:null},events:{OnStopSimulatingTime:null},props:{IsSimulatingTime:{get:function(){return Kusto.Cloud.Platform.Utils.ExtendedDateTime.s_simulating}},UtcNow:{get:function(){return System.DateTime.getUtcNow()}}},ctors:{init:function(){this.MinValueUtc=System.DateTime.getDefaultValue(),this.MaxValueUtc=System.DateTime.getDefaultValue(),this.EpochStart=System.DateTime.getDefaultValue(),this.ts_lastUtcNow=System.DateTime.getDefaultValue(),this.MaxUnixTimeMilliseconds=System.Int64([-769664001,58999]),this.MinUnixTimeMilliseconds=System.Int64([-304928768,-14468]),this.MaxUnixTimeMicroseconds=System.Int64([-864855016,58999820]),this.MinUnixTimeMicroseconds=System.Int64([13910016,-14467071]),this.MicrosecondsPerMillisecond=System.Int64(1e3),this.TicksPerMillisecond=System.Int64(1e4),this.TicksPerSecond=System.Int64(1e7),this.TicksPerMinute=System.Int64(6e8),this.TicksPerHour=System.Int64([1640261632,8]),this.TicksPerDay=System.Int64([711573504,201]),this.MillisPerSecond=1e3,this.MillisPerMinute=6e4,this.MillisPerHour=36e5,this.MillisPerDay=864e5,this.DaysPerYear=365,this.DaysPer4Years=1461,this.DaysPer100Years=36524,this.DaysPer400Years=146097,this.DaysTo1601=584388,this.DaysTo1899=693593,this.DaysTo1970=719162,this.DaysTo10000=3652059,this.MinTicks=System.Int64(0),this.MaxTicks=System.Int64([-197705729,734668917]),this.MaxMillis=System.Int64([-464735232,73466]),this.FileTimeOffset=System.Int64([578224128,117558807]),this.DoubleDateOffset=System.Int64([-880558080,139527104]),this.OADateMinAsTicks=System.Int64([-1362739200,7273949]),this.OADateMinAsDouble=-657435,this.OADateMaxAsDouble=2958466,this.DatePartYear=0,this.DatePartDayOfYear=1,this.DatePartMonth=2,this.DatePartDay=3,this.MinValueUtc=System.DateTime.create$2(System.DateTime.getTicks(System.DateTime.getMinValue()),1),this.MaxValueUtc=System.DateTime.create$2(System.DateTime.getTicks(System.DateTime.getMaxValue()),1),this.SupportedNonStandardFormats=u.$.Kusto.Cloud.Platform.Utils.ExtendedDateTime.f1(new(System.Collections.Generic.Dictionary$2(System.Int32,System.Array.type(System.String))).ctor),this.EpochStart=System.DateTime.create(1970,1,1,0,0,0,0,1),this.s_numCharactersInIso8601=System.DateTime.format(Kusto.Cloud.Platform.Utils.ExtendedDateTime.MinValueUtc,"O").length,this.ts_lastUtcNow=Kusto.Cloud.Platform.Utils.ExtendedDateTime.MinValueUtc,this.ts_lastUtcNowAsString=System.DateTime.format(Kusto.Cloud.Platform.Utils.ExtendedDateTime.ts_lastUtcNow,"O"),this.DaysToMonth365=System.Array.init([0,31,59,90,120,151,181,212,243,273,304,334,365],System.Int32),this.DaysToMonth366=System.Array.init([0,31,60,91,121,152,182,213,244,274,305,335,366],System.Int32)}},methods:{StopSimulatingTime:function(){Kusto.Cloud.Platform.Utils.ExtendedDateTime.s_simulating=!1,Bridge.staticEquals(Kusto.Cloud.Platform.Utils.ExtendedDateTime.OnStopSimulatingTime,null)||Kusto.Cloud.Platform.Utils.ExtendedDateTime.OnStopSimulatingTime()},ToUtcString:function(e){return Kusto.Cloud.Platform.Utils.ExtendedDateTime.ToUtcString$1(e,System.Globalization.CultureInfo.invariantCulture)},ToUtcString$1:function(e,t){var n=e,r=n;return System.DateTime.getKind(n)===0?r=System.DateTime.create$2(System.DateTime.getTicks(e),1):System.DateTime.getKind(n)===2&&(r=System.DateTime.toUniversalTime(n)),System.String.formatProvider(t,"{0:yyyy-MM-dd HH:mm:ss.fffffff}",[Bridge.box(r,System.DateTime,System.DateTime.format)])},Max:function(e,t){return System.DateTime.gt(e,t)?e:t},Max$1:function(e,t){return Bridge.equals(t,null)?e:Bridge.equals(e,null)?t:Kusto.Cloud.Platform.Utils.ExtendedDateTime.Max(System.Nullable.getValue(e),System.Nullable.getValue(t))},Min:function(e,t){return System.DateTime.lt(e,t)?e:t},Min$1:function(e,t){return Bridge.equals(t,null)?e:Bridge.equals(e,null)?t:Kusto.Cloud.Platform.Utils.ExtendedDateTime.Min(System.Nullable.getValue(e),System.Nullable.getValue(t))},RangesIntersect:function(e,t,n,r){return System.DateTime.gte(e,n)&&System.DateTime.lte(e,r)||System.DateTime.gte(t,n)&&System.DateTime.lte(t,r)||System.DateTime.gte(n,e)&&System.DateTime.lte(n,t)||System.DateTime.gte(r,e)&&System.DateTime.lte(r,t)},SafeAdd:function(e,t){var n=System.DateTime.subdd(System.DateTime.getMaxValue(),e),r=System.DateTime.subdd(e,System.DateTime.getMinValue()).negate();return System.TimeSpan.lte(r,t)&&System.TimeSpan.lte(t,n)?System.DateTime.add(e,t):System.TimeSpan.gt(t,n)?System.DateTime.getMaxValue():System.DateTime.getMinValue()},SafeSubtract:function(e,t){return System.TimeSpan.eq(t,System.TimeSpan.minValue)?System.DateTime.getMaxValue():Kusto.Cloud.Platform.Utils.ExtendedDateTime.SafeAdd(e,t.negate())},ToUnixTimeSpan:function(e){return System.DateTime.subdd(System.DateTime.toUniversalTime(e),Kusto.Cloud.Platform.Utils.ExtendedDateTime.EpochStart)},FromTimeSpan:function(e){return System.DateTime.create$2(e.getTicks())},ToZonalTimeDisplayString:function(e){return System.DateTime.format(e,"yyyy-MM-dd HH:mm:ss zzz")},ToUtc:function(e){switch(System.DateTime.getKind(e)){case 1:return e;case 0:return System.DateTime.create$2(System.DateTime.getTicks(e),1);case 2:return System.DateTime.toUniversalTime(e);default:throw new System.ArgumentException.$ctor1(System.String.format("DateTimeKind: {0} is not supported",[Bridge.box(System.DateTime.getKind(e),System.DateTimeKind,System.Enum.toStringFn(System.DateTimeKind))]))}},FastAppendFormattedInt7:function(e,t){var n=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),r,s,a,i,l,o;t=t.div(System.Int64(10)),r=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),t=t.div(System.Int64(10)),s=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),t=t.div(System.Int64(10)),a=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),t=t.div(System.Int64(10)),i=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),t=t.div(System.Int64(10)),l=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),t=t.div(System.Int64(10)),o=System.Int64.clipu16(System.Int64(48).add(t.mod(System.Int64(10)))),e.append(String.fromCharCode(o)),e.append(String.fromCharCode(l)),e.append(String.fromCharCode(i)),e.append(String.fromCharCode(a)),e.append(String.fromCharCode(s)),e.append(String.fromCharCode(r)),e.append(String.fromCharCode(n))},FastAppendFormattedInt4:function(e,t){var n=(48+t%10|0)&65535,r,s,a;t=Bridge.Int.div(t,10)|0,r=(48+t%10|0)&65535,t=Bridge.Int.div(t,10)|0,s=(48+t%10|0)&65535,t=Bridge.Int.div(t,10)|0,a=(48+t%10|0)&65535,e.append(String.fromCharCode(a)),e.append(String.fromCharCode(s)),e.append(String.fromCharCode(r)),e.append(String.fromCharCode(n))},FastAppendFormattedInt2:function(e,t){var n=(48+t%10|0)&65535,r;t=Bridge.Int.div(t,10)|0,r=(48+t%10|0)&65535,e.append(String.fromCharCode(r)),e.append(String.fromCharCode(n))},FastGetParts:function(e,t,n,r,s,a,i,l){var o=System.DateTime.getTicks(e),d=System.Int64.clip32(o.div(Kusto.Cloud.Platform.Utils.ExtendedDateTime.TicksPerDay)),m=Bridge.Int.div(d,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPer400Years)|0,c,p,h;d=d-Bridge.Int.mul(m,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPer400Years)|0,c=Bridge.Int.div(d,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPer100Years)|0,c===4&&(c=3),d=d-Bridge.Int.mul(c,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPer100Years)|0,p=Bridge.Int.div(d,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPer4Years)|0,d=d-Bridge.Int.mul(p,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPer4Years)|0,h=Bridge.Int.div(d,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPerYear)|0,h===4&&(h=3),t.v=(((Bridge.Int.mul(m,400)+Bridge.Int.mul(c,100)|0)+Bridge.Int.mul(p,4)|0)+h|0)+1|0,d=d-Bridge.Int.mul(h,Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysPerYear)|0;for(var g=h===3&&(p!==24||c===3),S=g?Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysToMonth366:Kusto.Cloud.Platform.Utils.ExtendedDateTime.DaysToMonth365,y=d>>6;d>=S[System.Array.index(y,S)];)y=y+1|0;n.v=y,r.v=(d-S[System.Array.index(y-1|0,S)]|0)+1|0,s.v=System.DateTime.getHour(e),a.v=System.DateTime.getMinute(e),i.v=System.DateTime.getSecond(e),l.v=o.mod(Kusto.Cloud.Platform.Utils.ExtendedDateTime.TicksPerSecond)},FromUnixTimeSeconds$1:function(e){return System.DateTimeOffset.FromUnixTimeSeconds(e).UtcDateTime},FromUnixTimeSeconds:function(e){var t=Bridge.Int.clip64(e),n=Bridge.Int.clip64((e-System.Int64.toNumber(t))*Kusto.Cloud.Platform.Utils.ExtendedDateTime.TicksPerSecond);return System.DateTimeOffset.FromUnixTimeSeconds(t).AddTicks(n).UtcDateTime},FromUnixTimeMilliseconds$1:function(e){return System.DateTimeOffset.FromUnixTimeMilliseconds(e).UtcDateTime},FromUnixTimeMilliseconds:function(e){var t=Bridge.Int.clip64(e),n=Bridge.Int.clip64((e-System.Int64.toNumber(t))*Kusto.Cloud.Platform.Utils.ExtendedDateTime.TicksPerMillisecond);return System.DateTimeOffset.FromUnixTimeMilliseconds(t).AddTicks(n).UtcDateTime},FromUnixTimeMicroseconds$1:function(e){var t=System.Int64(10),n=System.Int64(1e3),r=e.div(n),s=e.sub(r.mul(n)).mul(t);return System.DateTimeOffset.FromUnixTimeMilliseconds(r).AddTicks(s).UtcDateTime},FromUnixTimeMicroseconds:function(e){var t=System.Int64(10),n=System.Int64(1e3),r=Bridge.Int.clip64(e/n),s=Bridge.Int.clip64((e-System.Int64.toNumber(r.mul(n)))*t);return System.DateTimeOffset.FromUnixTimeMilliseconds(r).AddTicks(s).UtcDateTime},FromUnixTimeNanoseconds$1:function(e){var t=System.Int64(100),n=System.Int64(1e6),r=e.div(n),s=e.sub(r.mul(n)).div(t);return System.DateTimeOffset.FromUnixTimeMilliseconds(r).AddTicks(s).UtcDateTime},FromUnixTimeNanoseconds:function(e){if(e.lt(System.Int64.MinValue)||e.gt(System.Int64.MaxValue))throw new System.ArgumentOutOfRangeException.$ctor4("nanoseconds",System.String.format("Nanoseconds value ({0}) is out of range: {1}-{2}",Bridge.box(e,System.Double,System.Double.format,System.Double.getHashCode),System.Int64.MinValue,System.Int64.MaxValue));return Kusto.Cloud.Platform.Utils.ExtendedDateTime.FromUnixTimeNanoseconds$1(Bridge.Int.clip64(e))}}}}),Bridge.ns("Kusto.Cloud.Platform.Utils.ExtendedDateTime",u.$),Bridge.apply(u.$.Kusto.Cloud.Platform.Utils.ExtendedDateTime,{f1:function(e){return e.add(4,System.Array.init(["yyyy"],System.String)),e.add(6,System.Array.init(["yyyyMM"],System.String)),e.add(8,System.Array.init(["yyyyMMdd"],System.String)),e.add(10,System.Array.init(["yyyyMMddHH"],System.String)),e.add(12,System.Array.init(["yyyyMMddHHmm"],System.String)),e.add(14,System.Array.init(["yyyyMMddHHmmss"],System.String)),e.add(17,System.Array.init(["yyyyMMdd HH:mm:ss"],System.String)),e.add(19,System.Array.init(["yyyyMMdd HH:mm:ss.f"],System.String)),e.add(20,System.Array.init(["yyyyMMdd HH:mm:ss.ff"],System.String)),e.add(21,System.Array.init(["yyyyMMdd HH:mm:ss.fff"],System.String)),e.add(22,System.Array.init(["yyyyMMdd HH:mm:ss.ffff"],System.String)),e.add(23,System.Array.init(["yyyyMMdd HH:mm:ss.fffff"],System.String)),e.add(24,System.Array.init(["yyyyMMdd HH:mm:ss.ffffff"],System.String)),e.add(25,System.Array.init(["yyyyMMdd HH:mm:ss.fffffff"],System.String)),e}}),Bridge.define("Kusto.Cloud.Platform.Utils.ExtendedDateTime.RoundTo",{$kind:"nested enum",statics:{fields:{Second:0,Minute:1,Hour:2,Day:3}}}),Bridge.define("Kusto.Cloud.Platform.Utils.ExtendedEnumerable",{statics:{methods:{LongCount:function(e,t,n){if(n.equals(System.Int64.MaxValue))return System.Linq.Enumerable.from(t,e).count();if(t==null)throw new System.ArgumentNullException.$ctor1("source");if(n.lt(System.Int64(0)))throw new System.ArgumentOutOfRangeException.$ctor1("maxCount");var r=System.Int64(0),s=Bridge.getEnumerator(t,e);try{for(;s.System$Collections$IEnumerator$moveNext()&&(r=r.inc(1),!r.equals(n)););}finally{Bridge.hasValue(s)&&s.System$IDisposable$Dispose()}return r},SafeFastDistinct:function(e,t){var n,r;return t==null?null:(n=Bridge.as(t,System.Collections.Generic.ICollection$1(e)))!=null&&System.Array.getCount(n,e)<=1||(r=Bridge.as(t,System.Collections.ICollection))!=null&&System.Array.getCount(r)<=1?t:System.Linq.Enumerable.from(t,e).distinct()},SafeFastCountUpTo:function(e,t,n){var r,s;if(n.lt(System.Int64(0)))throw new System.ArgumentOutOfRangeException.$ctor1("maxCount");return t==null?System.Int64(0):(r=Bridge.as(t,System.Collections.Generic.ICollection$1(e)))!=null?System.Int64.min(n,System.Int64(System.Array.getCount(r,e))):(s=Bridge.as(t,System.Collections.ICollection))!=null?System.Int64.min(n,System.Int64(System.Array.getCount(s))):Kusto.Cloud.Platform.Utils.ExtendedEnumerable.LongCount(e,t,n)},SafeSequenceEquals:function(e,t,n,r){r===void 0&&(r=null);var s=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.BasicCompare(e,t,n);return System.Nullable.hasValue(s)?System.Nullable.getValue(s):System.Linq.Enumerable.from(System.Linq.Enumerable.from(t,e).orderBy(u.$.Kusto.Cloud.Platform.Utils.ExtendedEnumerable.f1),e).sequenceEqual(System.Linq.Enumerable.from(n,e).orderBy(u.$.Kusto.Cloud.Platform.Utils.ExtendedEnumerable.f2),r)},SortedSequenceEquals:function(e,t,n,r){var s;return r===void 0&&(r=null),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SequenceEqual(e,t,n,Bridge.fn.cacheBind(s=r||System.Collections.Generic.EqualityComparer$1(e).def,s)[Bridge.geti(s,"System$Collections$Generic$IEqualityComparer$1$"+Bridge.getTypeAlias(e)+"$equals2","System$Collections$Generic$IEqualityComparer$1$equals2")])},SequenceEqual:function(e,t,n,r){var s=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.BasicCompare(e,t,n),a,i;if(System.Nullable.hasValue(s))return System.Nullable.getValue(s);a=Bridge.getEnumerator(t,e);try{i=Bridge.getEnumerator(n,e);try{for(;a.System$Collections$IEnumerator$moveNext();)if(!i.System$Collections$IEnumerator$moveNext()||!r(a[Bridge.geti(a,"System$Collections$Generic$IEnumerator$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")],i[Bridge.geti(i,"System$Collections$Generic$IEnumerator$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")]))return!1;if(i.System$Collections$IEnumerator$moveNext())return!1}finally{Bridge.hasValue(i)&&i.System$IDisposable$Dispose()}}finally{Bridge.hasValue(a)&&a.System$IDisposable$Dispose()}return!0},SafeSetEquals:function(e,t,n){return Bridge.referenceEquals(t,n)?!0:t==null||n==null?!1:new(System.Collections.Generic.HashSet$1(e)).$ctor1(t).setEquals(n)},BasicCompare:function(e,t,n){if(Bridge.referenceEquals(t,n))return!0;if(t==null||n==null)return!1;var r=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.GetSequenceLength(e,t),s=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.GetSequenceLength(e,n);return System.Nullable.hasValue(r)&&System.Nullable.hasValue(s)&&System.Nullable.getValue(r).ne(System.Nullable.getValue(s))?!1:null},GetSequenceLength:function(e,t){var n,r,s,a;return(n=Bridge.as(t,System.Array.type(e)))!=null?System.Int64.lift(n.length):(r=Bridge.as(t,System.Collections.Generic.IReadOnlyCollection$1(e)))!=null?System.Int64.lift(System.Array.getCount(r,e)):(s=Bridge.as(t,System.Collections.Generic.ICollection$1(e)))!=null?System.Int64.lift(System.Array.getCount(s,e)):(a=Bridge.as(t,System.Collections.ICollection))!=null?System.Int64.lift(System.Array.getCount(a)):System.Int64.lift(null)},ToDisplayString:function(e,t,n,r,s,a,i,l,o){var d,m,c,p;if(n===void 0&&(n=", "),r===void 0&&(r=null),s===void 0&&(s="null"),a===void 0&&(a=128),i===void 0&&(i=""),l===void 0&&(l=""),o===void 0&&(o=null),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(e,t)||System.Nullable.lte(r,0))return"";n=(d=n,d??", "),s=(m=s,m??"null");var h=o||u.$.Kusto.Cloud.Platform.Utils.ExtendedEnumerable.f3,g=new System.Text.StringBuilder("",a),S=0,y=Bridge.getEnumerator(t,e);try{for(y.System$Collections$IEnumerator$moveNext()&&(c=y[Bridge.geti(y,"System$Collections$Generic$IEnumerator$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")]==null?s:(i||"")+(h(y[Bridge.geti(y,"System$Collections$Generic$IEnumerator$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")])||"")+(l||""),g.append(c),S=S+1|0);y.System$Collections$IEnumerator$moveNext()&&!System.Nullable.gte(S,r);)g.append(n),p=y[Bridge.geti(y,"System$Collections$Generic$IEnumerator$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")]==null?s:(i||"")+(h(y[Bridge.geti(y,"System$Collections$Generic$IEnumerator$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")])||"")+(l||""),g.append(p),S=S+1|0;y.System$Collections$IEnumerator$moveNext()&&(g=g.append(n).append("... more"))}finally{Bridge.hasValue(y)&&y.System$IDisposable$Dispose()}return g.toString()},SafeShallowClone:function(e,t){return t==null?null:new(System.Collections.Generic.List$1(e)).$ctor1(t)},IndexOf:function(e,t,n){var r,s,a;if(Bridge.staticEquals(n,null)||t==null)return-1;s=0,r=Bridge.getEnumerator(t,e);try{for(;r.moveNext();){if(a=r.Current,n(a))return s;s=s+1|0}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}return-1},SafeConcat:function(e,t,n){return t==null?n:n==null?t:System.Linq.Enumerable.from(t,e).concat(n)},SafeUnion:function(e,t,n){return t==null&&n==null?null:t==null?System.Linq.Enumerable.from(n,e).distinct():n==null?System.Linq.Enumerable.from(t,e).distinct():System.Linq.Enumerable.from(t,e).union(n)},SafeFastNullIfEmpty:function(e,t){return t==null||Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone(t)?null:t},SafeEmptyIEnumerableIfNull:function(e,t){return t||System.Linq.Enumerable.empty()},SafeFastAny$2:function(e,t){var n,r;return t==null?!1:(n=Bridge.as(t,System.Collections.ICollection))!=null?System.Array.getCount(n)!==0:(r=Bridge.as(t,System.Collections.Generic.IReadOnlyCollection$1(e)))!=null?System.Array.getCount(r,e)!==0:System.Linq.Enumerable.from(t,e).any()},SafeFastAny$4:function(e,t){return t!=null&&t.Count>0},SafeFastAny$1:function(e,t){return t!=null&&System.Array.getCount(t,e)>0},SafeFastAny:function(e){var t,n,r;if(e==null)return!1;if((n=Bridge.as(e,System.Collections.ICollection))!=null)return System.Array.getCount(n)!==0;r=Bridge.getEnumerator(e),t=Bridge.as(r,System.IDisposable);try{if(r.System$Collections$IEnumerator$moveNext())return!0}finally{Bridge.hasValue(t)&&t.System$IDisposable$Dispose()}return!1},SafeFastAny$3:function(e,t,n){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(e,t)?System.Linq.Enumerable.from(t,e).any(n):!1},SafeFastNone$2:function(e,t){return!Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(e,t)},SafeFastNone$1:function(e,t){return!Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(e,t)},SafeFastNone:function(e){return!Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny(e)},SafeFastNone$3:function(e,t,n){return!Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$3(e,t,n)},None$1:function(e,t,n){return!System.Linq.Enumerable.from(t,e).any(n)},None:function(e,t){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(e,t)},SafeFastContains:function(e,t,n,r){return r===void 0&&(r=null),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(e,t)?!1:System.Linq.Enumerable.from(t,e).contains(n,r)},DistinctBy:function(e,t,n,r){return System.Linq.Enumerable.from(n,e).groupBy(r).select(u.$.Kusto.Cloud.Platform.Utils.ExtendedEnumerable.f4)},Intersect:function(e,t){var n,r;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.Collections.Generic.IEnumerable$1(e),t))return null;if(n=Bridge.getEnumerator(t,System.Collections.Generic.IEnumerable$1(e)),n.System$Collections$IEnumerator$moveNext()){for(r=new(System.Collections.Generic.HashSet$1(e)).$ctor1(n[Bridge.geti(n,"System$Collections$Generic$IEnumerator$1$System$Collections$Generic$IEnumerable$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")]);n.System$Collections$IEnumerator$moveNext();)r.intersectWith(n[Bridge.geti(n,"System$Collections$Generic$IEnumerator$1$System$Collections$Generic$IEnumerable$1$"+Bridge.getTypeAlias(e)+"$Current$1","System$Collections$Generic$IEnumerator$1$Current$1")]);return r}return null},SplitBy:function(e,t,n,r,s){var a,i,l,o;if(s===void 0&&(s=null),i=e,Kusto.Cloud.Platform.Utils.ExtendedEnumerable.IsTupleType(i)&&Bridge.staticEquals(s,null)?s=u.$.Kusto.Cloud.Platform.Utils.ExtendedEnumerable.f5:Bridge.referenceEquals(i,t)&&Bridge.staticEquals(s,null)&&(s=function(p){return Bridge.cast(Bridge.unbox(p,t),t)}),Bridge.staticEquals(s,null))throw new System.NullReferenceException.ctor;l=new(System.Collections.Generic.List$1(t)).ctor,o=new(System.Collections.Generic.List$1(t)).ctor,a=Bridge.getEnumerator(n,e);try{for(;a.moveNext();){var d=a.Current,m=s(d),c=r(d);switch(c){case null:case void 0:continue;case!0:l.add(m);break;default:o.add(m);break}}}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}return{Item1:l,Item2:o}},IntersectWith:function(e,t,n){if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(e,t)||Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(e,n))return System.Linq.Enumerable.empty();var r=new(System.Collections.Generic.HashSet$1(e)).$ctor1(t);return r.intersectWith(n),r},IsTupleType:function(e,t){if(t===void 0&&(t=!1),e==null)throw new System.ArgumentNullException.$ctor1("type");if(Bridge.referenceEquals(e,System.Tuple))return!0;for(;e!=null;){if(Bridge.Reflection.isGenericType(e)){var n=Bridge.Reflection.getGenericTypeDefinition(e);if(Bridge.referenceEquals(n,System.Tuple$1)||Bridge.referenceEquals(n,System.Tuple$2)||Bridge.referenceEquals(n,System.Tuple$3)||Bridge.referenceEquals(n,System.Tuple$4)||Bridge.referenceEquals(n,System.Tuple$5)||Bridge.referenceEquals(n,System.Tuple$6)||Bridge.referenceEquals(n,System.Tuple$7)||Bridge.referenceEquals(n,System.Tuple$8)||Bridge.referenceEquals(n,System.Tuple$8))return!0}if(!t)break;e=Bridge.Reflection.getBaseType(e)}return!1},Yield:function(e,t){return new(Bridge.GeneratorEnumerable$1(e))(Bridge.fn.bind(this,function(n,r){var s=0,a,i,l,o=new(Bridge.GeneratorEnumerator$1(n))(Bridge.fn.bind(this,function(){try{for(;;)switch(s){case 0:return o.current=r,s=1,!0;case 1:default:return!1}}catch(d){throw l=System.Exception.create(d),l}}));return o},arguments))},AddIfNotNullOrWhiteSpace:function(e,t){return System.String.isNullOrWhiteSpace(t)||System.Array.add(e,t,System.String),e}}}}),Bridge.ns("Kusto.Cloud.Platform.Utils.ExtendedEnumerable",u.$),Bridge.apply(u.$.Kusto.Cloud.Platform.Utils.ExtendedEnumerable,{f1:function(e){return e},f2:function(e){return e},f3:function(e){return Bridge.toString(e)},f4:function(e){return e.first()},f5:function(e){return e.Item1}}),Bridge.define("Kusto.Cloud.Platform.Utils.ExtendedRegex",{statics:{methods:{TryUnescape:function(e,t){t.v="";try{return t.v=System.Text.RegularExpressions.Regex.unescape(e),!0}catch(n){if(n=System.Exception.create(n),Bridge.is(n,System.ArgumentException))return!1;throw n}},TryTransformWildCardPatternToRegex:function(e){try{var t=System.String.trim(e,[91,93]),n=System.String.replaceAll(t,"*",".*");return new System.Text.RegularExpressions.Regex.ctor(n,0)}catch(r){return r=System.Exception.create(r),null}},IsWildCardPattern:function(e){return System.String.indexOf(e,String.fromCharCode(42))>=0},RegexEquals:function(e,t){if(Bridge.referenceEquals(e,t))return!0;var n;return e==null||t==null||(n=Bridge.as(t,System.Text.RegularExpressions.Regex))==null?!1:Kusto.Cloud.Platform.Utils.ExtendedRegex.RegexEquals$1(e,n)},RegexEquals$1:function(e,t){return Bridge.referenceEquals(e,t)?!0:e==null||t==null?!1:System.String.equals(Bridge.toString(e),Bridge.toString(t))&&e.getOptions()===t.getOptions()&&System.TimeSpan.eq(e.getMatchTimeout(),t.getMatchTimeout())},RegexEquivalent:function(e,t){return Bridge.referenceEquals(e,t)?!0:e==null||t==null?!1:System.String.equals(Bridge.toString(e),Bridge.toString(t))&&e.getOptions()===t.getOptions()},ReplaceAndCountReplacements:function(e,t,n,r){var s=0,a=e.replace(t,function(i){return s=s+1|0,n});return r.v=s,a}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.ExtendedString",{statics:{fields:{c_wrap:null,EllipsisAsThreePeriods:null,c_newlineAsStringArray:null,c_nullGuids:null,SafeToString:null,EmptyArray:null,s_alternativeSpaceChars:null,s_alternativeNewlineChars:null,s_alternativeQutoes:null},ctors:{init:function(){this.c_wrap=" ",this.EllipsisAsThreePeriods="...",this.c_newlineAsStringArray=System.Array.init([` `],System.String),this.c_nullGuids=System.Array.init([System.Guid.Empty.toString(),"{"+(System.Guid.Empty.toString()||"")+"}"],System.String),this.SafeToString=u.$.Kusto.Cloud.Platform.Utils.ExtendedString.f1,this.EmptyArray=System.Array.init(0,null,System.String),this.s_alternativeSpaceChars=u.$.Kusto.Cloud.Platform.Utils.ExtendedString.f2(new(System.Collections.Generic.HashSet$1(System.Char)).ctor),this.s_alternativeNewlineChars=u.$.Kusto.Cloud.Platform.Utils.ExtendedString.f3(new(System.Collections.Generic.HashSet$1(System.Char)).ctor),this.s_alternativeQutoes=u.$.Kusto.Cloud.Platform.Utils.ExtendedString.f4(new(System.Collections.Generic.HashSet$1(System.Char)).ctor)}},methods:{SafeGetHashCode:function(e){return e==null?20080512:Bridge.getHashCode(e)},GuidSafeFastGetHashCode:function(e){return e==null||e.length<26?Kusto.Cloud.Platform.Utils.ExtendedString.SafeGetHashCode(e):(e.charCodeAt(1)^e.charCodeAt(9)<<8|e.charCodeAt(10))^(e.charCodeAt(16)<<16|e.charCodeAt(17))^(e.charCodeAt(24)<<24|e.charCodeAt(25))},CreateGuid:function(e){var t=System.Array.init(16,0,System.Byte);return System.Text.Encoding.UTF8.GetBytes$4(e,0,e.length,t,0),new System.Guid.$ctor1(t)},SafeToTraceString:function(e){return e==null?"[null]":e.length===0?"[empty]":e},SafeFormat:function(e,t){var n,r,s,a,i;if(t===void 0&&(t=[]),e==null)return"[format:null]";if(t==null||t.length===0)return System.String.format.apply(System.String,[e].concat(t));for(n=System.Array.init(t.length,null,System.String),r=0;r<t.length;r=r+1|0)s=t[System.Array.index(r,t)],s==null?a="[null]":(i=Bridge.toString(s),a=i==null?"[ToStringNull]":i.length===0?"[ToStringEmpty]":System.String.isNullOrWhiteSpace(i)?"[ToStringWhitespace]":i),n[System.Array.index(r,n)]=a;return System.String.format.apply(System.String,[e].concat(n))},FormatWithCurrentCulture:function(e,t){return t===void 0&&(t=[]),Kusto.Cloud.Platform.Utils.ExtendedString.FormatWith(e,System.Globalization.CultureInfo.getCurrentCulture(),t)},FormatWithInvariantCulture:function(e,t){return t===void 0&&(t=[]),Kusto.Cloud.Platform.Utils.ExtendedString.FormatWith(e,System.Globalization.CultureInfo.invariantCulture,t)},FormatWith:function(e,t,n){return n===void 0&&(n=[]),System.String.formatProvider.apply(System.String,[t,e].concat(n))},ToCamelCase:function(e){return String.fromCharCode(String.fromCharCode(e.charCodeAt(0)).toLowerCase().charCodeAt(0))+(e.substr(1)||"")},SafeIsNullGuid:function(e){return System.String.isNullOrWhiteSpace(e)||Bridge.referenceEquals(e,Kusto.Cloud.Platform.Utils.ExtendedString.c_nullGuids[System.Array.index(0,Kusto.Cloud.Platform.Utils.ExtendedString.c_nullGuids)])||Bridge.referenceEquals(e,Kusto.Cloud.Platform.Utils.ExtendedString.c_nullGuids[System.Array.index(1,Kusto.Cloud.Platform.Utils.ExtendedString.c_nullGuids)])},SafeIsValidGuid:function(e){var t={v:new System.Guid};return!Kusto.Cloud.Platform.Utils.ExtendedString.SafeIsNullGuid(e)&&System.Guid.TryParse(e,t)},GetDiff:function(e,t){var n;if(Bridge.referenceEquals(e,t))return e==null?"Strings are the same (both null)":Bridge.referenceEquals(e,"")?"Strings are the same (both empty)":"Strings are the same";if(e==null)return"LHS is null, RHS is not";if(t==null)return"RHS is null, LHS is not";for(n=0;n<Math.min(e.length,t.length);n=n+1|0)if(e.charCodeAt(n)!==t.charCodeAt(n))return Kusto.Cloud.Platform.Utils.ExtendedString.GetDiffFromPosition(e,t,n);return Kusto.Cloud.Platform.Utils.ExtendedString.GetDiffFromPosition(e,t,Math.min(e.length,t.length))},GetDiffFromPosition:function(e,t,n){var r=20,s=20,a=Math.max(0,n-r|0),i=r+s|0,l,o;for(e=Kusto.Cloud.Platform.Text.StringLiteral.GetLiteral(Kusto.Cloud.Platform.Utils.ExtendedString.SafeSubstring(e,a,i)),t=Kusto.Cloud.Platform.Text.StringLiteral.GetLiteral(Kusto.Cloud.Platform.Utils.ExtendedString.SafeSubstring(t,a,i)),l=0,o=0;o<Math.min(e.length,t.length);o=o+1|0)if(e.charCodeAt(o)!==t.charCodeAt(o)){l=o;break}return"Strings differ starting from position "+(Bridge.toString(n)||"")+` LHS=...'`+(e||"")+`'... RHS=...'`+(t||"")+`'... `+(System.String.fromCharCount(32,(l+1|0)+7|0)||"")+"^"},SafeSubstring:function(e,t,n){return e==null?null:(t=Math.max(0,t),t>=e.length||n<=0?"":(n=Math.min(n,e.length-t|0),e.substr(t,n)))},SafeIsValidNonEmptyBase64:function(e,t){var n,r,s,a,i;if(t===void 0&&(t=!1),t&&e!=null&&(e=e.trim()),System.String.isNullOrEmpty(e)||e.length%4!=0)return!1;r=-1,s=-1,n=Bridge.getEnumerator(e);try{for(;n.moveNext();)if(a=n.Current,s=s+1|0,(!(a>=48)||!(a<=57))&&(!(a>=65)||!(a<=90))&&(!(a>=97)||!(a<=122))&&a!==43&&a!==47){if(a===61){r=s;break}return!1}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}if(r===-1)return e.length%4==0;if((e.length-r|0)>3)return!1;for(i=r;i<e.length;i=i+1|0)if(e.charCodeAt(i)!==61)return!1;return!0},SafeIsDoubleSlashCommentOrEmptyBlock:function(e){if(System.String.isNullOrWhiteSpace(e))return!0;for(var t=!1,n=0,r;;){if(n>=e.length)return!t;if(r=e.charCodeAt(n),r===47){if(t){for(;(n=n+1|0)<e.length&&(r=e.charCodeAt(n),!(r===13||r===10)););t=!1}else t=!0;n=n+1|0;continue}if(t)return!1;if(System.Char.isWhiteSpace(String.fromCharCode(r))||r===13||r===10){n=n+1|0;continue}return!1}},SafeFastTrimEmptyLines:function(e){var t;if(System.String.isNullOrEmpty(e)||System.String.indexOf(e,` `)===-1)return e;for(var n=Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache.Acquire(Math.min(e.length,Kusto.Cloud.Platform.Utils.MemoryConstants.LargeObjectHeapChars)),r=!1,s=0;s<e.length;){if(t=System.String.indexOf(e,` `,s),t===-1){r&&n.appendLine(),n.append(e,s,e.length-s|0);break}if(t!==s){r&&n.appendLine(),n.append(e,s,t-s|0),s=t+1|0,r=!0;continue}s=s+1|0}return Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache.GetStringAndRelease(n)},SafeFastTrim:function(e){return System.String.isNullOrEmpty(e)?e:e.trim()},TrimStart$1:function(e,t,n){return n===void 0&&(n=4),System.String.startsWith(e,t,n)?e.substr(t.length,e.length-t.length|0):e},TrimStart:function(e,t,n){if(System.String.isNullOrEmpty(e))return e;if(n)return e.charCodeAt(0)===t?e.substr(1):e;if(e.charCodeAt(0)!==t)return e;for(var r=0;r<e.length&&e.charCodeAt(r)===t;)r=r+1|0;return r===e.length?"":e.substr(r)},TrimEnd:function(e,t,n){return n===void 0&&(n=4),System.String.endsWith(e,t,n)?e.substr(0,e.length-t.length|0):e},TrimBalancedSquareBrackets:function(e){return e!=null&&e.length>=2&&e.charCodeAt(0)===91&&e.charCodeAt(e.length-1|0)===93&&(e=e.substr(1,e.length-2|0)),e},TrimBalancedRoundBrackets:function(e){return Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalanced(e,"(",")")},TrimBalancedCurlyBrackets:function(e){return Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalanced(e,"{","}")},TrimBalanced:function(e,t,n,r){return r===void 0&&(r=4),e!=null&&System.String.startsWith(e,t,r)&&System.String.endsWith(e,n,r)&&(e=e.substr(t.length,e.length-(t.length+n.length|0)|0)),e},TrimBalancedSingleAndDoubleQuotes:function(e){if(System.String.isNullOrEmpty(e))return e;for(var t=0,n=e.length-1|0;t<n;){if(e.charCodeAt(t)===34&&e.charCodeAt(n)===34){t=t+1|0,n=n-1|0;continue}if(e.charCodeAt(t)===39&&e.charCodeAt(n)===39){t=t+1|0,n=n-1|0;continue}break}return t>n?"":e.substr(t,(n-t|0)+1|0)},DetermineMaxLineWidth:function(e){var t,n,r,s;if(System.String.isNullOrEmpty(e))return 0;for(t=0,n=0,r=0;r<e.length;r=r+1|0)s=e.charCodeAt(r),s===13||s===10?(t=Math.max(t,r-n|0),n=r+1|0):r===(e.length-1|0)&&(t=Math.max(t,(r-n|0)+1|0));return t},SafeCountCharacterUpTo:function(e,t,n){var r,s;if(e==null)return System.Int64(-1);for(r=0,s=0;s<e.length&&(e.charCodeAt(s)===t&&(r=r+1|0),!System.Int64(r).equals(n));s=s+1|0);return System.Int64(r)},SafeCountAnyCharacterUpTo:function(e,t,n){var r,s;if(e==null)return System.Int64(-1);for(r=0,s=0;s<e.length&&(System.Array.contains(t,e.charCodeAt(s),System.Char)&&(r=r+1|0),!System.Int64(r).equals(n));s=s+1|0);return System.Int64(r)},FindFirstNonWhitespaceCharacter:function(e,t){if(t===void 0&&(t=0),e==null)return-1;for(;;){if(t>=e.length)return-1;if(!System.Char.isWhiteSpace(String.fromCharCode(e.charCodeAt(t))))return t;t=t+1|0}},FirstFirstUnequalCharacter:function(e,t){if(Bridge.referenceEquals(e,t))return-1;if(e==null||t==null||e.length===0||t.length===0)return 0;for(var n=0;n<e.length&&n<t.length;n=n+1|0)if(e.charCodeAt(n)!==t.charCodeAt(n))return n;return n},CountNonOverlappingSubstrings:function(e,t,n){if(n===void 0&&(n=4),System.String.isNullOrEmpty(e)||System.String.isNullOrEmpty(t))return 0;for(var r=0,s=0;s<e.length;){if(s=System.String.indexOf(e,t,s,null,n),s<0)return r;r=r+1|0,s=s+t.length|0}return r},SafeStartsWith:function(e,t){return System.String.isNullOrEmpty(e)?!1:e.charCodeAt(0)===t},SafeStartsWith$1:function(e,t,n){return n===void 0&&(n=4),System.String.isNullOrEmpty(e)?!1:System.String.startsWith(e,t,n)},EqualsOrdinalIgnoreCase:function(e,t){return System.String.equals(e,t,5)},IsEmpty:function(e){return Bridge.referenceEquals(e,"")},IsNotEmpty:function(e){return!Bridge.referenceEquals(e,"")},IsNullOrEmpty:function(e){return System.String.isNullOrEmpty(e)},IsNotNullOrEmpty:function(e){return!System.String.isNullOrEmpty(e)},EmptyIfNull:function(e){var t;return t=e,t??""},SafeGetTail:function(e,t){return e==null?null:t<=0?"":t>=e.length?e:e.substr(e.length-t|0)},SafeIndexOf:function(e,t){return System.String.isNullOrEmpty(e)?-1:System.String.indexOf(e,String.fromCharCode(t))},SafeIndexOf$2:function(e,t,n,r){return System.String.isNullOrEmpty(e)||System.String.isNullOrEmpty(t)||n>e.length?-1:System.String.indexOf(e,t,n,null,r)},SafeIndexOf$1:function(e,t,n,r,s){return System.String.isNullOrEmpty(e)||System.String.isNullOrEmpty(t)||(n+t.length|0)>e.length?-1:System.String.indexOf(e,t,n,r,s)},SplitFirst$2:function(e,t,n){var r;return n===void 0&&(n=4),e==null||System.String.isNullOrEmpty(t)?null:(r=System.String.indexOf(e,t,0,null,n),r<0?e:e.substr(0,r))},SplitFirst:function(e,t){var n;return e==null?null:(n=System.String.indexOf(e,String.fromCharCode(t)),n<0?e:e.substr(0,n))},SplitFirst$1:function(e,t){var n;return e==null||t==null||t.length===0?null:(n=System.String.indexOfAny(e,t),n<0?e:e.substr(0,n))},Rotate:function(e){return System.String.isNullOrEmpty(e)||e.length<2?e:(e.substr(1,e.length-1|0)||"")+(e.substr(0,1)||"")},AdjustNewLineDelimiter:function(e){for(var t,n,r=Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache.Acquire(e.length),s=0;s<e.length;s=s+1|0)switch(t=e.charCodeAt(s),t){case 13:n=s<(e.length-1|0)&&e.charCodeAt(s+1|0)===10,n&&(s=s+1|0),r.append(` `);break;case 10:r.append(` `);break;default:r.append(String.fromCharCode(t));break}return Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache.GetStringAndRelease(r)},ReplaceInvisibleWhitespaces:function(e){var t=" ";return Kusto.Cloud.Platform.Utils.ExtendedString.Replace$1(e,function(n,r){return r.v=null,Kusto.Cloud.Platform.Utils.ExtendedString.s_alternativeSpaceChars.contains(n)?r.v=t:Kusto.Cloud.Platform.Utils.ExtendedString.s_alternativeNewlineChars.contains(n)&&(r.v=` `),r.v!=null})},HasNonAsciiQuotes:function(e){return System.String.isNullOrWhiteSpace(e)?!1:System.Linq.Enumerable.from(e,System.Char).any(Bridge.fn.cacheBind(Kusto.Cloud.Platform.Utils.ExtendedString.s_alternativeQutoes,Kusto.Cloud.Platform.Utils.ExtendedString.s_alternativeQutoes.contains))},ReplaceNonAsciiQuotes:function(e){var t='"';return Kusto.Cloud.Platform.Utils.ExtendedString.Replace$1(e,function(n,r){return r.v=t,Kusto.Cloud.Platform.Utils.ExtendedString.s_alternativeQutoes.contains(n)})},Replace:function(e,t){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(System.Char,System.String),t)?Kusto.Cloud.Platform.Utils.ExtendedString.Replace$1(e,Bridge.fn.cacheBind(t,t.System$Collections$Generic$IDictionary$2$System$Char$System$String$tryGetValue)):e},Replace$1:function(e,t){var n,r,s,a;if(System.String.isNullOrEmpty(e))return e;for(n=null,r=0;r<e.length;r=r+1|0)s=e.charCodeAt(r),a={},t(s,a)?(n=Kusto.Cloud.Platform.Utils.ExtendedStringBuilder.InitializeStringBuildIfNeeded(e,n,r),n.append(a.v)):n?.append(String.fromCharCode(s));return n==null?e:n.toString()},IsAscii:function(e){return System.Text.Encoding.UTF8.GetByteCount$2(e)===e.length}}}}),Bridge.ns("Kusto.Cloud.Platform.Utils.ExtendedString",u.$),Bridge.apply(u.$.Kusto.Cloud.Platform.Utils.ExtendedString,{f1:function(e){var t;return e!=null?(t=Bridge.toString(e),t??"[ToStringNull]"):"[null]"},f2:function(e){return e.add(160),e.add(5760),e.add(6158),e.add(8192),e.add(8193),e.add(8194),e.add(8195),e.add(8196),e.add(8197),e.add(8198),e.add(8199),e.add(8200),e.add(8201),e.add(8202),e.add(8203),e.add(8239),e.add(8287),e.add(12288),e.add(65279),e.add(8288),e},f3:function(e){return e.add(11),e},f4:function(e){return e.add(171),e.add(187),e.add(8216),e.add(8217),e.add(8218),e.add(8220),e.add(8221),e.add(8222),e.add(8249),e.add(8250),e}}),Bridge.define("Kusto.Cloud.Platform.Utils.ExtendedStringBuilder",{statics:{methods:{InitializeStringBuildIfNeeded:function(e,t,n){return t!=null||(t=new System.Text.StringBuilder("",e.length),n>0&&t.append(e.substr(0,n))),t}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.MemoryConstants",{statics:{fields:{_1KB:0,_2KB:0,_4KB:0,_8KB:0,_16KB:0,_32KB:0,_64KB:0,_128KB:0,_256KB:0,_512KB:0,_1MB:0,_2MB:0,_32MB:0,_64MB:0,_512MB:0,_1GB:0,_1TB:System.Int64(0),_1PB:System.Int64(0),LargeObjectHeap:0,LargeObjectHeapChars:0,LargeObjectHeapCharsStreamReaderWriter:0},ctors:{init:function(){this._1KB=1024,this._2KB=2048,this._4KB=4096,this._8KB=8192,this._16KB=16384,this._32KB=32768,this._64KB=65536,this._128KB=131072,this._256KB=262144,this._512KB=524288,this._1MB=1048576,this._2MB=2097152,this._32MB=33554432,this._64MB=67108864,this._512MB=536870912,this._1GB=1073741824,this._1TB=System.Int64([0,256]),this._1PB=System.Int64([0,262144]),this.LargeObjectHeap=65536,this.LargeObjectHeapChars=32768,this.LargeObjectHeapCharsStreamReaderWriter=24576}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.StringBuilderCache",{statics:{fields:{MAX_BUILDER_SIZE:0,DEFAULT_CAPACITY:0},ctors:{init:function(){this.MAX_BUILDER_SIZE=32768,this.DEFAULT_CAPACITY=16}},methods:{Acquire:function(e,t,n){if(t===void 0&&(t=16),n===void 0&&(n=32768),t<=n){var r=e.v;if(r!=null&&t<=r.getCapacity())return e.v=null,r.clear(),r}return new System.Text.StringBuilder("",t)},Acquire$1:function(e,t){var n=Kusto.Cloud.Platform.Utils.StringBuilderCache.Acquire(e,Math.max(t.length,Kusto.Cloud.Platform.Utils.StringBuilderCache.DEFAULT_CAPACITY));return n.append(t),n},Release:function(e,t,n){n===void 0&&(n=32768),t.getCapacity()<=n&&(e.v=t)},GetStringAndRelease:function(e,t,n){n===void 0&&(n=32768);var r=t.toString();return Kusto.Cloud.Platform.Utils.StringBuilderCache.Release(e,t,n),r},GetStringAndClear:function(e,t){var n=t.toString();return t.clear(),n}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.TimeSpanConstants",{statics:{fields:{_2sec:null,_5sec:null,_10sec:null,_20sec:null,_1min:null,_2min:null,_3min:null,_4min:null,_5min:null,_10min:null,_30min:null,_59min:null,_60min:null,_1hour:null,_2hours:null,_3hours:null,_4hours:null,_5hours:null,_6hours:null,_10hours:null},ctors:{init:function(){this._2sec=new System.TimeSpan,this._5sec=new System.TimeSpan,this._10sec=new System.TimeSpan,this._20sec=new System.TimeSpan,this._1min=new System.TimeSpan,this._2min=new System.TimeSpan,this._3min=new System.TimeSpan,this._4min=new System.TimeSpan,this._5min=new System.TimeSpan,this._10min=new System.TimeSpan,this._30min=new System.TimeSpan,this._59min=new System.TimeSpan,this._60min=new System.TimeSpan,this._1hour=new System.TimeSpan,this._2hours=new System.TimeSpan,this._3hours=new System.TimeSpan,this._4hours=new System.TimeSpan,this._5hours=new System.TimeSpan,this._6hours=new System.TimeSpan,this._10hours=new System.TimeSpan,this._2sec=System.TimeSpan.fromSeconds(2),this._5sec=System.TimeSpan.fromSeconds(5),this._10sec=System.TimeSpan.fromSeconds(10),this._20sec=System.TimeSpan.fromSeconds(20),this._1min=System.TimeSpan.fromMinutes(1),this._2min=System.TimeSpan.fromMinutes(2),this._3min=System.TimeSpan.fromMinutes(3),this._4min=System.TimeSpan.fromMinutes(4),this._5min=System.TimeSpan.fromMinutes(5),this._10min=System.TimeSpan.fromMinutes(10),this._30min=System.TimeSpan.fromMinutes(30),this._59min=System.TimeSpan.fromMinutes(59),this._60min=System.TimeSpan.fromMinutes(60),this._1hour=System.TimeSpan.fromHours(1),this._2hours=System.TimeSpan.fromHours(2),this._3hours=System.TimeSpan.fromHours(3),this._4hours=System.TimeSpan.fromHours(4),this._5hours=System.TimeSpan.fromHours(5),this._6hours=System.TimeSpan.fromHours(6),this._10hours=System.TimeSpan.fromHours(10)}}}}),Bridge.define("Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache",{statics:{fields:{MAX_BUILDER_SIZE:0,DEFAULT_CAPACITY:0,t_cachedInstance:null},ctors:{init:function(){this.MAX_BUILDER_SIZE=24576,this.DEFAULT_CAPACITY=16}},methods:{Acquire:function(e){return e===void 0&&(e=16),Kusto.Cloud.Platform.Utils.StringBuilderCache.Acquire(Bridge.ref(Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache,"t_cachedInstance"),e)},Acquire$1:function(e){return Kusto.Cloud.Platform.Utils.StringBuilderCache.Acquire$1(Bridge.ref(Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache,"t_cachedInstance"),e)},Release:function(e){Kusto.Cloud.Platform.Utils.StringBuilderCache.Release(Bridge.ref(Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache,"t_cachedInstance"),e)},GetStringAndRelease:function(e){return Kusto.Cloud.Platform.Utils.StringBuilderCache.GetStringAndRelease(Bridge.ref(Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache,"t_cachedInstance"),e)},GetStringAndClear:function(e){return Kusto.Cloud.Platform.Utils.StringBuilderCache.GetStringAndClear(Bridge.ref(Kusto.Cloud.Platform.Utils.UtilsStringBuilderCache,"t_cachedInstance"),e)}}}}),Bridge.define("Kusto.Data.Common.CslQueryParser",{statics:{methods:{PrettifyQuery:function(e,t){var n=new Kusto.Data.IntelliSense.CslCommandParser,r=n.Parse(null,e,Kusto.Data.IntelliSense.ParseMode.CommandTokensOnly),s;return System.Linq.Enumerable.from(r,Kusto.Data.IntelliSense.CslCommand).count()!==1?e:(s=System.Linq.Enumerable.from(r,Kusto.Data.IntelliSense.CslCommand).first().FormatAsString(` `,7),System.String.isNullOrEmpty(s)&&(s=e),System.String.isNullOrEmpty(t)||(s=(s||"")+(t||"")),s)}}}}),Bridge.define("Kusto.Data.Common.CslSyntaxGenerator",{statics:{fields:{s_keywords:null},ctors:{init:function(){this.s_keywords=u.$.Kusto.Data.Common.CslSyntaxGenerator.f1(new(System.Collections.Generic.HashSet$1(System.String)).ctor)}},methods:{NormalizeDatabaseName$1:function(e,t){return Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,t)},NormalizeDatabaseName:function(e){return Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,!1)},NormalizeVirutalClusterName:function(e,t){return t===void 0&&(t=!1),Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,t)},NormalizeFunctionName:function(e,t){return t===void 0&&(t=!1),Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,t)},NormalizeTableName:function(e,t){return t===void 0&&(t=!1),Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,t)},NormalizeContinuousJobName:function(e,t){return t===void 0&&(t=!1),Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,t)},NormalizeColumnName:function(e,t){return t===void 0&&(t=!1),Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,t)},NormalizeRowStoreName:function(e){return Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,!1)},NormalizeWorkloadGroupName:function(e){return Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,!1)},NormalizeEncryptionScope:function(e){return Kusto.Data.Common.CslSyntaxGenerator.NormalizeName(e,!1)},IsIdentifier:function(e){return System.String.isNullOrEmpty(e)||!System.Char.isLetter(e.charCodeAt(0))&&e.charCodeAt(0)!==95?!1:System.Linq.Enumerable.from(e,System.Char).all(u.$.Kusto.Data.Common.CslSyntaxGenerator.f2)},IsAscii:function(e){return e<=127},NormalizeName:function(e,t){return System.String.isNullOrEmpty(e)||!t&&Kusto.Data.Common.CslSyntaxGenerator.IsIdentifier(e)&&!Kusto.Data.Common.CslSyntaxGenerator.IsKeyword(e)||System.String.startsWith(e,"[",4)?e:System.String.contains(e,"'")?'["'+(e||"")+'"]':"['"+(e||"")+"']"},IsKeyword:function(e){return Kusto.Data.Common.CslSyntaxGenerator.s_keywords.contains(e)}}}}),Bridge.ns("Kusto.Data.Common.CslSyntaxGenerator",u.$),Bridge.apply(u.$.Kusto.Data.Common.CslSyntaxGenerator,{f1:function(e){return e.add("access"),e.add("account"),e.add("accounts"),e.add("accumulate"),e.add("activitystate"),e.add("add"),e.add("adl"),e.add("admin"),e.add("admins"),e.add("aggregations"),e.add("alias"),e.add("all"),e.add("alldatabasesadmins"),e.add("alldatabasesmonitors"),e.add("alldatabasesviewers"),e.add("alter"),e.add("alter-merge"),e.add("and"),e.add("anomalycolumns"),e.add("append"),e.add("apply"),e.add("artifacts"),e.add("as"),e.add("asc"),e.add("assert-schema"),e.add("assignment"),e.add("assignments"),e.add("async"),e.add("attach"),e.add("autoUpdateSchema"),e.add("auto_delete"),e.add("avro"),e.add("apacheavro"),e.add("axes"),e.add("base"),e.add("based-on"),e.add("basicauth"),e.add("between"),e.add("bin"),e.add("blob"),e.add("block"),e.add("blocked"),e.add("by"),e.add("cache"),e.add("caching"),e.add("cachingpolicy"),e.add("call-tree"),e.add("callout"),e.add("cancel"),e.add("capacity"),e.add("catalog"),e.add("certificates"),e.add("classification"),e.add("clean"),e.add("clear"),e.add("cloudsettings"),e.add("cluster"),e.add("column"),e.add("columns"),e.add("column-docstrings"),e.add("commands"),e.add("commands-and-queries"),e.add("commconcurrency"),e.add("commpools"),e.add("compact"),e.add("completed"),e.add("compressed"),e.add("consume"),e.add("contains"),e.add("continuous"),e.add("continuous-export"),e.add("continuous-exports"),e.add("continuous-job"),e.add("conservative"),e.add("copy"),e.add("corrupted"),e.add("count"),e.add("crash"),e.add("create"),e.add("create-or-alter"),e.add("createdon"),e.add("create-merge"),e.add("credstore"),e.add("csl"),e.add("cslschema"),e.add("csv"),e.add("cursor"),e.add("data"),e.add("database"),e.add("databasecreators"),e.add("databases"),e.add("dataexport"),e.add("data-export"),e.add("dataformat"),e.add("data_movement_restriction"),e.add("datatable"),e.add("declare"),e.add("decryption-certificate-thumbprint"),e.add("default"),e.add("define"),e.add("delete"),e.add("delta"),e.add("desc"),e.add("detach"),e.add("details"),e.add("diagnostics"),e.add("disable"),e.add("distinct"),e.add("dnshostname"),e.add("docstring"),e.add("drop"),e.add("drop-pretend"),e.add("dup-next-failed-ingest"),e.add("dup-next-ingest"),e.add("earliest"),e.add("echo"),e.add("edges"),e.add("effective"),e.add("enable"),e.add("encoding"),e.add("encodingpolicy"),e.add("entity"),e.add("entity_group"),e.add("entity_groups"),e.add("ephemeral"),e.add("escape"),e.add("evaluate"),e.add("except"),e.add("execute"),e.add("export"),e.add("extend"),e.add("extent"),e.add("extentcontainers"),e.add("extents"),e.add("extentsmerge"),e.add("extents-merge"),e.add("extents-partition"),e.add("extent_tags_retention"),e.add("external"),e.add("external-artifacts"),e.add("externaldata"),e.add("external_data"),e.add("fabric"),e.add("fabriccache"),e.add("fabricclocks"),e.add("fabriclocks"),e.add("facet"),e.add("failures"),e.add("featureflags"),e.add("filter"),e.add("find"),e.add("first"),e.add("flags"),e.add("flush"),e.add("folder"),e.add("fork"),e.add("freshness"),e.add("from"),e.add("function"),e.add("functions"),e.add("generic"),e.add("get"),e.add("getschema"),e.add("granny-asc"),e.add("granny-desc"),e.add("granularity"),e.add("greedy"),e.add("groups"),e.add("harddelete"),e.add("hardretention"),e.add("has"),e.add("has_all"),e.add("has_any"),e.add("hash"),e.add("hidden"),e.add("hot"),e.add("hotdata"),e.add("hotindex"),e.add("hours"),e.add("id"),e.add("if_later_than"),e.add("ifexists"),e.add("ifnotexists"),e.add("in"),e.add("in~"),e.add("info"),e.add("ingest"),e.add("ingest-from-storage"),e.add("ingest-inline"),e.add("ingestion"),e.add("ingestionbatching"),e.add("ingestions"),e.add("ingestiontime"),e.add("ingestors"),e.add("inline"),e.add("internal"),e.add("into"),e.add("invoke"),e.add("journal"),e.add("json"),e.add("jobs"),e.add("key"),e.add("keys"),e.add("keyvault"),e.add("kind"),e.add("kql"),e.add("kqlschema"),e.add("kv_delimiter"),e.add("last"),e.add("latest"),e.add("legend"),e.add("let"),e.add("limit"),e.add("linear"),e.add("list"),e.add("load"),e.add("local"),e.add("location"),e.add("lookback"),e.add("lookup"),e.add("log"),e.add("macro-expand"),e.add("maintenance_mode"),e.add("make-series"),e.add("management"),e.add("map"),e.add("mapping"),e.add("mappings"),e.add("managed_identity"),e.add("materialize"),e.add("materialized-view"),e.add("materialized-views"),e.add("materialized-view-combine"),e.add("maxRecords"),e.add("mdm"),e.add("memory"),e.add("mempools"),e.add("merge"),e.add("metadata"),e.add("method"),e.add("mirroring"),e.add("missing"),e.add("monitoring"),e.add("monitors"),e.add("move"),e.add("multidatabaseadmins"),e.add("mv-apply"),e.add("mv-expand"),e.add("mvapply"),e.add("mvexpand"),e.add("nan"),e.add("node"),e.add("nodes"),e.add("none"),e.add("!between"),e.add("!in"),e.add("!in~"),e.add("null"),e.add("nulls"),e.add("of"),e.add("on"),e.add("older"),e.add("operation"),e.add("operations"),e.add("ops"),e.add("optional"),e.add("or"),e.add("orc"),e.add("order"),e.add("others"),e.add("output"),e.add("over"),e.add("pack"),e.add("pair_delimiter"),e.add("panels"),e.add("parse"),e.add("parse-where"),e.add("parse-kv"),e.add("parquet"),e.add("partition"),e.add("__partitionby"),e.add("partitioning"),e.add("password"),e.add("patch"),e.add("pathformat"),e.add("pattern"),e.add("pending"),e.add("period"),e.add("periodic-storage-artifacts-cleanup"),e.add("persist"),e.add("plotly"),e.add("plugin"),e.add("plugins"),e.add("policies"),e.add("policy"),e.add("pretend"),e.add("prettyname"),e.add("primary"),e.add("principal"),e.add("principals"),e.add("print"),e.add("project"),e.add("project-away"),e.add("project-keep"),e.add("project-rename"),e.add("project-reorder"),e.add("project-smart"),e.add("purge"),e.add("purge-cleanup"),e.add("purge-storage-artifacts-cleanup"),e.add("queries"),e.add("query"),e.add("query_parameters"),e.add("queryexecution"),e.add("queryplan"),e.add("query_weak_consistency"),e.add("query_results"),e.add("quote"),e.add("range"),e.add("readonly"),e.add("readwrite"),e.add("reason"),e.add("rebuild"),e.add("record"),e.add("records"),e.add("recycle"),e.add("reduce"),e.add("regex"),e.add("remote-schema"),e.add("rename"),e.add("render"),e.add("replace"),e.add("resources"),e.add("restore"),e.add("restrict"),e.add("restricted_view_access"),e.add("resume"),e.add("resume-purges"),e.add("retention"),e.add("request_classification"),e.add("request_support"),e.add("roles"),e.add("row_level_security"),e.add("roworder"),e.add("roworderpolicy"),e.add("rowstore"),e.add("rowstorepolicy"),e.add("rowstore_references"),e.add("rowstores"),e.add("rowstore_sealinfo"),e.add("run"),e.add("running"),e.add("sample"),e.add("sample-distinct"),e.add("sandbox"),e.add("sandboxes"),e.add("save"),e.add("scalein"),e.add("scan"),e.add("schema"),e.add("script"),e.add("seal"),e.add("seals"),e.add("search"),e.add("secrets"),e.add("serialize"),e.add("sensitive"),e.add("series"),e.add("service"),e.add("servicepoints"),e.add("services"),e.add("set"),e.add("set-or-append"),e.add("set-or-replace"),e.add("sharedcontainers"),e.add("sharding"),e.add("shards"),e.add("shard-groups"),e.add("shards-group"),e.add("shards_grouping"),e.add("show"),e.add("softdelete"),e.add("softretention"),e.add("sort"),e.add("sql"),e.add("stacked"),e.add("stacked100"),e.add("state"),e.add("stats"),e.add("status"),e.add("statistics"),e.add("step"),e.add("storedqueryresultcontainers"),e.add("stream"),e.add("streamingingestion"),e.add("streamingingestion_maintenance_mode"),e.add("streaming-ingestion-post-processing"),e.add("stored-query-results"),e.add("summarize"),e.add("sstream"),e.add("storage"),e.add("suspend"),e.add("system_properties"),e.add("systemdb"),e.add("table"),e.add("tablepurge"),e.add("table-purge"),e.add("table_mirroring_template"),e.add("table_mirroring_templates"),e.add("tables"),e.add("tags"),e.add("take"),e.add("tcpconnections"),e.add("tcpports"),e.add("tempstorage"),e.add("tenants"),e.add("threadpools"),e.add("threshold"),e.add("throw"),e.add("title"),e.add("to"),e.add("top"),e.add("top-hitters"),e.add("top-nested"),e.add("toscalar"),e.add("totable"),e.add("trace"),e.add("traces"),e.add("traceresults"),e.add("tsv"),e.add("type"),e.add("typeof"),e.add("undo"),e.add("__unique"),e.add("unstacked"),e.add("unrestrictedviewers"),e.add("update"),e.add("usage"),e.add("user"),e.add("users"),e.add("using"),e.add("uuid"),e.add("verbose"),e.add("version"),e.add("view"),e.add("views"),e.add("viewers"),e.add("virtual_cluster"),e.add("virtual_clusters"),e.add("visible"),e.add("volatile"),e.add("v9"),e.add("v10"),e.add("w3clogfile"),e.add("warm"),e.add("warming"),e.add("whatif"),e.add("where"),e.add("with"),e.add("workload_group"),e.add("workload_groups"),e.add("writeaheadlog"),e.add("xaxis"),e.add("xcolumn"),e.add("xmin"),e.add("xmax"),e.add("xtitle"),e.add("yaxis"),e.add("ycolumns"),e.add("ymin"),e.add("ymax"),e.add("ysplit"),e.add("ytitle"),e.add("bool"),e.add("boolean"),e.add("int8"),e.add("char"),e.add("uint8"),e.add("byte"),e.add("int16"),e.add("uint16"),e.add("int"),e.add("int32"),e.add("uint"),e.add("uint32"),e.add("long"),e.add("int64"),e.add("ulong"),e.add("uint64"),e.add("float"),e.add("real"),e.add("double"),e.add("string"),e.add("time"),e.add("timespan"),e.add("date"),e.add("datetime"),e.add("guid"),e.add("uniqueid"),e.add("dynamic"),e.add("decimal"),e.add("complete"),e.add("job"),e.add("kuiper"),e.add("start"),e.add("task"),e.add("tasks"),e.add("GB"),e.add("MB"),e.add("application"),e.add("blockedprincipals"),e.add("bytes"),e.add("callstacks"),e.add("concurrency"),e.add("configuration"),e.add("container"),e.add("containers"),e.add("datasize"),e.add("datastats"),e.add("datetime_pattern"),e.add("days"),e.add("dimensions"),e.add("disabled"),e.add("dryrun"),e.add("empty"),e.add("enabled"),e.add("exclude"),e.add("expired_tables_cleanup"),e.add("extentsize"),e.add("follower"),e.add("for"),e.add("format_datetime"),e.add("hot_window"),e.add("identity"),e.add("include"),e.add("network"),e.add("recoverability"),e.add("startofday"),e.add("startofmonth"),e.add("startofweek"),e.add("startofyear"),e.add("stored_query_result"),e.add("stored_query_results"),e.add("transactions"),e.add("trim"),e.add("union"),e.add("until"),e.add("unused"),e.add("utilization"),e.add("violations"),e.add("3Dchart"),e.add("__contextual_datatable"),e.add("__crossCluster"),e.add("__crossDB"),e.add("__executeAndCache"),e.add("__id"),e.add("__isFuzzy"),e.add("__noWithSource"),e.add("__packedColumn"),e.add("__projectAway"),e.add("__sourceColumnIndex"),e.add("anomalychart"),e.add("areachart"),e.add("bagexpansion"),e.add("barchart"),e.add("bin_legacy"),e.add("card"),e.add("columnchart"),e.add("datascope"),e.add("decodeblocks"),e.add("expandoutput"),e.add("force_remote"),e.add("hotcache"),e.add("isfuzzy"),e.add("join"),e.add("ladderchart"),e.add("linechart"),e.add("nooptimization"),e.add("piechart"),e.add("pivotchart"),e.add("relaxed"),e.add("scatterchart"),e.add("simple"),e.add("stackedareachart"),e.add("timechart"),e.add("timeline"),e.add("timepivot"),e.add("treemap"),e.add("with_itemindex"),e.add("with_match_id"),e.add("with_source"),e.add("with_step_name"),e.add("withsource"),e},f2:function(e){return(System.Char.isDigit(e)||System.Char.isLetter(e))&&Kusto.Data.Common.CslSyntaxGenerator.IsAscii(e)||e===95}}),Bridge.define("Kusto.Data.Common.DatabaseShowFlavor",{$kind:"enum",statics:{fields:{Identity:0,Verbose:1,Policies:2,DataStats:3,Default:4,Metadata:5}}}),Bridge.define("Kusto.Data.Common.DataConnectionError",{$kind:"enum",statics:{fields:{ManagedIdentityUnauthorized:0,ManagedIdentityNotFound:1,UsingDeprecatedConnectionString:2}}}),Bridge.define("Kusto.Data.Common.DataRecoverability",{$kind:"enum",statics:{fields:{Unknown:0,Enabled:1,Disabled:2}}}),Bridge.define("Kusto.Data.Common.DataSourceCompressionType",{$kind:"enum",statics:{fields:{None:0,GZip:1,Zip:2}}}),Bridge.define("Kusto.Data.Common.EntityType",{$kind:"enum",statics:{fields:{Unknown:0,Cluster:1,Database:2,Table:3,Column:4,Function:5,ExternalTable:6,MaterializedView:7,EntityGroup:8}}}),Bridge.define("Kusto.Data.Common.ExtendedDatabaseShowFlavor",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.DatabaseShowFlavor.Identity:return"Identity";case Kusto.Data.Common.DatabaseShowFlavor.Verbose:return"Verbose";case Kusto.Data.Common.DatabaseShowFlavor.Policies:return"Policies";case Kusto.Data.Common.DatabaseShowFlavor.DataStats:return"DataStats";case Kusto.Data.Common.DatabaseShowFlavor.Default:return"Default";case Kusto.Data.Common.DatabaseShowFlavor.Metadata:return"Metadata";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.DatabaseShowFlavor};return Kusto.Data.Common.ExtendedDatabaseShowFlavor.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.DatabaseShowFlavor.Identity:return!0;case Kusto.Data.Common.DatabaseShowFlavor.Verbose:return!0;case Kusto.Data.Common.DatabaseShowFlavor.Policies:return!0;case Kusto.Data.Common.DatabaseShowFlavor.DataStats:return!0;case Kusto.Data.Common.DatabaseShowFlavor.Default:return!0;case Kusto.Data.Common.DatabaseShowFlavor.Metadata:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.DatabaseShowFlavor};if(Kusto.Data.Common.ExtendedDatabaseShowFlavor.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"Identity":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Identity,!0;case"1":case"Verbose":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Verbose,!0;case"2":case"Policies":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Policies,!0;case"3":case"DataStats":return t.v=Kusto.Data.Common.DatabaseShowFlavor.DataStats,!0;case"4":case"Default":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Default,!0;case"5":case"Metadata":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Metadata,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"identity":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Identity,!0;case"verbose":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Verbose,!0;case"policies":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Policies,!0;case"datastats":return t.v=Kusto.Data.Common.DatabaseShowFlavor.DataStats,!0;case"default":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Default,!0;case"metadata":return t.v=Kusto.Data.Common.DatabaseShowFlavor.Metadata,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.DatabaseShowFlavor.Identity:return"";case Kusto.Data.Common.DatabaseShowFlavor.Verbose:return"";case Kusto.Data.Common.DatabaseShowFlavor.Policies:return"";case Kusto.Data.Common.DatabaseShowFlavor.DataStats:return"";case Kusto.Data.Common.DatabaseShowFlavor.Default:return"";case Kusto.Data.Common.DatabaseShowFlavor.Metadata:return"";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedDataConnectionError",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.DataConnectionError.ManagedIdentityUnauthorized:return"ManagedIdentityUnauthorized";case Kusto.Data.Common.DataConnectionError.ManagedIdentityNotFound:return"ManagedIdentityNotFound";case Kusto.Data.Common.DataConnectionError.UsingDeprecatedConnectionString:return"UsingDeprecatedConnectionString";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.DataConnectionError};return Kusto.Data.Common.ExtendedDataConnectionError.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.DataConnectionError.ManagedIdentityUnauthorized:return!0;case Kusto.Data.Common.DataConnectionError.ManagedIdentityNotFound:return!0;case Kusto.Data.Common.DataConnectionError.UsingDeprecatedConnectionString:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.DataConnectionError};if(Kusto.Data.Common.ExtendedDataConnectionError.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"ManagedIdentityUnauthorized":return t.v=Kusto.Data.Common.DataConnectionError.ManagedIdentityUnauthorized,!0;case"ManagedIdentityNotFound":return t.v=Kusto.Data.Common.DataConnectionError.ManagedIdentityNotFound,!0;case"UsingDeprecatedConnectionString":return t.v=Kusto.Data.Common.DataConnectionError.UsingDeprecatedConnectionString,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"managedidentityunauthorized":return t.v=Kusto.Data.Common.DataConnectionError.ManagedIdentityUnauthorized,!0;case"managedidentitynotfound":return t.v=Kusto.Data.Common.DataConnectionError.ManagedIdentityNotFound,!0;case"usingdeprecatedconnectionstring":return t.v=Kusto.Data.Common.DataConnectionError.UsingDeprecatedConnectionString,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.DataConnectionError.ManagedIdentityUnauthorized:return"Managed Identity doesn't have sufficient authorizations. This likely indicates that the user didn't provide the Managed Identity with the necessary role or scope.";case Kusto.Data.Common.DataConnectionError.ManagedIdentityNotFound:return"Managed Identity doesn't exist in the cluster. This likely indicates the user didn't link their Managed Identity to this ADX cluster.";case Kusto.Data.Common.DataConnectionError.UsingDeprecatedConnectionString:return"Data Connection authenticates using a connection string instead of a managed identity, which is deprecated.";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedDataRecoverability",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.DataRecoverability.Unknown:return"Unknown";case Kusto.Data.Common.DataRecoverability.Enabled:return"Enabled";case Kusto.Data.Common.DataRecoverability.Disabled:return"Disabled";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.DataRecoverability};return Kusto.Data.Common.ExtendedDataRecoverability.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.DataRecoverability.Unknown:return!0;case Kusto.Data.Common.DataRecoverability.Enabled:return!0;case Kusto.Data.Common.DataRecoverability.Disabled:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.DataRecoverability};if(Kusto.Data.Common.ExtendedDataRecoverability.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"Unknown":return t.v=Kusto.Data.Common.DataRecoverability.Unknown,!0;case"1":case"Enabled":return t.v=Kusto.Data.Common.DataRecoverability.Enabled,!0;case"2":case"Disabled":return t.v=Kusto.Data.Common.DataRecoverability.Disabled,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"unknown":return t.v=Kusto.Data.Common.DataRecoverability.Unknown,!0;case"enabled":return t.v=Kusto.Data.Common.DataRecoverability.Enabled,!0;case"disabled":return t.v=Kusto.Data.Common.DataRecoverability.Disabled,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.DataRecoverability.Unknown:return"";case Kusto.Data.Common.DataRecoverability.Enabled:return"";case Kusto.Data.Common.DataRecoverability.Disabled:return"";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedDataSourceCompressionType",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.DataSourceCompressionType.None:return"None";case Kusto.Data.Common.DataSourceCompressionType.GZip:return"GZip";case Kusto.Data.Common.DataSourceCompressionType.Zip:return"Zip";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.DataSourceCompressionType};return Kusto.Data.Common.ExtendedDataSourceCompressionType.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.DataSourceCompressionType.None:return!0;case Kusto.Data.Common.DataSourceCompressionType.GZip:return!0;case Kusto.Data.Common.DataSourceCompressionType.Zip:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.DataSourceCompressionType};if(Kusto.Data.Common.ExtendedDataSourceCompressionType.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"None":return t.v=Kusto.Data.Common.DataSourceCompressionType.None,!0;case"1":case"GZip":return t.v=Kusto.Data.Common.DataSourceCompressionType.GZip,!0;case"2":case"Zip":return t.v=Kusto.Data.Common.DataSourceCompressionType.Zip,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"none":return t.v=Kusto.Data.Common.DataSourceCompressionType.None,!0;case"gzip":return t.v=Kusto.Data.Common.DataSourceCompressionType.GZip,!0;case"zip":return t.v=Kusto.Data.Common.DataSourceCompressionType.Zip,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.DataSourceCompressionType.None:return"No compression";case Kusto.Data.Common.DataSourceCompressionType.GZip:return"GZip compression";case Kusto.Data.Common.DataSourceCompressionType.Zip:return"Zip compression";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedEntityType",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.EntityType.Unknown:return"Unknown";case Kusto.Data.Common.EntityType.Cluster:return"Cluster";case Kusto.Data.Common.EntityType.Database:return"Database";case Kusto.Data.Common.EntityType.Table:return"Table";case Kusto.Data.Common.EntityType.Column:return"Column";case Kusto.Data.Common.EntityType.Function:return"Function";case Kusto.Data.Common.EntityType.ExternalTable:return"ExternalTable";case Kusto.Data.Common.EntityType.MaterializedView:return"MaterializedView";case Kusto.Data.Common.EntityType.EntityGroup:return"EntityGroup";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.EntityType};return Kusto.Data.Common.ExtendedEntityType.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.EntityType.Unknown:return!0;case Kusto.Data.Common.EntityType.Cluster:return!0;case Kusto.Data.Common.EntityType.Database:return!0;case Kusto.Data.Common.EntityType.Table:return!0;case Kusto.Data.Common.EntityType.Column:return!0;case Kusto.Data.Common.EntityType.Function:return!0;case Kusto.Data.Common.EntityType.ExternalTable:return!0;case Kusto.Data.Common.EntityType.MaterializedView:return!0;case Kusto.Data.Common.EntityType.EntityGroup:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.EntityType};if(Kusto.Data.Common.ExtendedEntityType.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"Unknown":return t.v=Kusto.Data.Common.EntityType.Unknown,!0;case"1":case"Cluster":return t.v=Kusto.Data.Common.EntityType.Cluster,!0;case"2":case"Database":return t.v=Kusto.Data.Common.EntityType.Database,!0;case"3":case"Table":return t.v=Kusto.Data.Common.EntityType.Table,!0;case"4":case"Column":return t.v=Kusto.Data.Common.EntityType.Column,!0;case"5":case"Function":return t.v=Kusto.Data.Common.EntityType.Function,!0;case"6":case"ExternalTable":return t.v=Kusto.Data.Common.EntityType.ExternalTable,!0;case"7":case"MaterializedView":case"materialized-view":return t.v=Kusto.Data.Common.EntityType.MaterializedView,!0;case"8":case"EntityGroup":return t.v=Kusto.Data.Common.EntityType.EntityGroup,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"unknown":return t.v=Kusto.Data.Common.EntityType.Unknown,!0;case"cluster":return t.v=Kusto.Data.Common.EntityType.Cluster,!0;case"database":return t.v=Kusto.Data.Common.EntityType.Database,!0;case"table":return t.v=Kusto.Data.Common.EntityType.Table,!0;case"column":return t.v=Kusto.Data.Common.EntityType.Column,!0;case"function":return t.v=Kusto.Data.Common.EntityType.Function,!0;case"externaltable":return t.v=Kusto.Data.Common.EntityType.ExternalTable,!0;case"materializedview":case"materialized-view":return t.v=Kusto.Data.Common.EntityType.MaterializedView,!0;case"entitygroup":return t.v=Kusto.Data.Common.EntityType.EntityGroup,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.EntityType.Unknown:return"Unknown";case Kusto.Data.Common.EntityType.Cluster:return"Cluster entity type";case Kusto.Data.Common.EntityType.Database:return"Database entity type";case Kusto.Data.Common.EntityType.Table:return"Table entity type";case Kusto.Data.Common.EntityType.Column:return"Column entity type";case Kusto.Data.Common.EntityType.Function:return"Function entity type";case Kusto.Data.Common.EntityType.ExternalTable:return"External table entity type";case Kusto.Data.Common.EntityType.MaterializedView:return"Materialized view entity type";case Kusto.Data.Common.EntityType.EntityGroup:return"Entity Group entity type";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedExtentsMergeLookbackPeriodKind",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Default:return"Default";case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.HotCache:return"HotCache";case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.All:return"All";case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Custom:return"Custom";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.ExtentsMergeLookbackPeriodKind};return Kusto.Data.Common.ExtendedExtentsMergeLookbackPeriodKind.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Default:return!0;case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.HotCache:return!0;case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.All:return!0;case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Custom:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.ExtentsMergeLookbackPeriodKind};if(Kusto.Data.Common.ExtendedExtentsMergeLookbackPeriodKind.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"Default":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Default,!0;case"1":case"HotCache":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.HotCache,!0;case"2":case"All":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.All,!0;case"3":case"Custom":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Custom,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"default":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Default,!0;case"hotcache":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.HotCache,!0;case"all":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.All,!0;case"custom":return t.v=Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Custom,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Default:return"The default lookback period, as defined by the system";case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.HotCache:return"The hot cache period";case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.All:return"The entire period in which data exists";case Kusto.Data.Common.ExtentsMergeLookbackPeriodKind.Custom:return"A custom period, provided by the admin of the entity";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedIngestionErrorCategory",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.IngestionErrorCategory.Unknown:return"Unknown";case Kusto.Data.Common.IngestionErrorCategory.InternalServiceError:return"InternalServiceError";case Kusto.Data.Common.IngestionErrorCategory.BadFormat:return"BadFormat";case Kusto.Data.Common.IngestionErrorCategory.BadRequest:return"BadRequest";case Kusto.Data.Common.IngestionErrorCategory.UpdatePolicyFailure:return"UpdatePolicyFailure";case Kusto.Data.Common.IngestionErrorCategory.EntityNotFound:return"EntityNotFound";case Kusto.Data.Common.IngestionErrorCategory.UserAccessNotAuthorized:return"UserAccessNotAuthorized";case Kusto.Data.Common.IngestionErrorCategory.DataAccessNotAuthorized:return"DataAccessNotAuthorized";case Kusto.Data.Common.IngestionErrorCategory.FileTooLarge:return"FileTooLarge";case Kusto.Data.Common.IngestionErrorCategory.ThrottledOnEngine:return"ThrottledOnEngine";case Kusto.Data.Common.IngestionErrorCategory.DownloadFailed:return"DownloadFailed";case Kusto.Data.Common.IngestionErrorCategory.RetryAttemptsExceeded:return"RetryAttemptsExceeded";case Kusto.Data.Common.IngestionErrorCategory.BlobAlreadyReceived:return"BlobAlreadyReceived";case Kusto.Data.Common.IngestionErrorCategory.Cancelled:return"Cancelled";case Kusto.Data.Common.IngestionErrorCategory.Configuration:return"Configuration";case Kusto.Data.Common.IngestionErrorCategory.MetadataAccessNotAuthorized:return"MetadataAccessNotAuthorized";case Kusto.Data.Common.IngestionErrorCategory.Skippable:return"Skippable";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.IngestionErrorCategory};return Kusto.Data.Common.ExtendedIngestionErrorCategory.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.IngestionErrorCategory.Unknown:return!0;case Kusto.Data.Common.IngestionErrorCategory.InternalServiceError:return!0;case Kusto.Data.Common.IngestionErrorCategory.BadFormat:return!0;case Kusto.Data.Common.IngestionErrorCategory.BadRequest:return!0;case Kusto.Data.Common.IngestionErrorCategory.UpdatePolicyFailure:return!0;case Kusto.Data.Common.IngestionErrorCategory.EntityNotFound:return!0;case Kusto.Data.Common.IngestionErrorCategory.UserAccessNotAuthorized:return!0;case Kusto.Data.Common.IngestionErrorCategory.DataAccessNotAuthorized:return!0;case Kusto.Data.Common.IngestionErrorCategory.FileTooLarge:return!0;case Kusto.Data.Common.IngestionErrorCategory.ThrottledOnEngine:return!0;case Kusto.Data.Common.IngestionErrorCategory.DownloadFailed:return!0;case Kusto.Data.Common.IngestionErrorCategory.RetryAttemptsExceeded:return!0;case Kusto.Data.Common.IngestionErrorCategory.BlobAlreadyReceived:return!0;case Kusto.Data.Common.IngestionErrorCategory.Cancelled:return!0;case Kusto.Data.Common.IngestionErrorCategory.Configuration:return!0;case Kusto.Data.Common.IngestionErrorCategory.MetadataAccessNotAuthorized:return!0;case Kusto.Data.Common.IngestionErrorCategory.Skippable:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.IngestionErrorCategory};if(Kusto.Data.Common.ExtendedIngestionErrorCategory.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"Unknown":return t.v=Kusto.Data.Common.IngestionErrorCategory.Unknown,!0;case"InternalServiceError":return t.v=Kusto.Data.Common.IngestionErrorCategory.InternalServiceError,!0;case"BadFormat":return t.v=Kusto.Data.Common.IngestionErrorCategory.BadFormat,!0;case"BadRequest":return t.v=Kusto.Data.Common.IngestionErrorCategory.BadRequest,!0;case"UpdatePolicyFailure":return t.v=Kusto.Data.Common.IngestionErrorCategory.UpdatePolicyFailure,!0;case"EntityNotFound":return t.v=Kusto.Data.Common.IngestionErrorCategory.EntityNotFound,!0;case"UserAccessNotAuthorized":return t.v=Kusto.Data.Common.IngestionErrorCategory.UserAccessNotAuthorized,!0;case"DataAccessNotAuthorized":return t.v=Kusto.Data.Common.IngestionErrorCategory.DataAccessNotAuthorized,!0;case"FileTooLarge":return t.v=Kusto.Data.Common.IngestionErrorCategory.FileTooLarge,!0;case"ThrottledOnEngine":return t.v=Kusto.Data.Common.IngestionErrorCategory.ThrottledOnEngine,!0;case"DownloadFailed":return t.v=Kusto.Data.Common.IngestionErrorCategory.DownloadFailed,!0;case"RetryAttemptsExceeded":return t.v=Kusto.Data.Common.IngestionErrorCategory.RetryAttemptsExceeded,!0;case"BlobAlreadyReceived":return t.v=Kusto.Data.Common.IngestionErrorCategory.BlobAlreadyReceived,!0;case"Cancelled":return t.v=Kusto.Data.Common.IngestionErrorCategory.Cancelled,!0;case"Configuration":return t.v=Kusto.Data.Common.IngestionErrorCategory.Configuration,!0;case"MetadataAccessNotAuthorized":return t.v=Kusto.Data.Common.IngestionErrorCategory.MetadataAccessNotAuthorized,!0;case"Skippable":return t.v=Kusto.Data.Common.IngestionErrorCategory.Skippable,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"unknown":return t.v=Kusto.Data.Common.IngestionErrorCategory.Unknown,!0;case"internalserviceerror":return t.v=Kusto.Data.Common.IngestionErrorCategory.InternalServiceError,!0;case"badformat":return t.v=Kusto.Data.Common.IngestionErrorCategory.BadFormat,!0;case"badrequest":return t.v=Kusto.Data.Common.IngestionErrorCategory.BadRequest,!0;case"updatepolicyfailure":return t.v=Kusto.Data.Common.IngestionErrorCategory.UpdatePolicyFailure,!0;case"entitynotfound":return t.v=Kusto.Data.Common.IngestionErrorCategory.EntityNotFound,!0;case"useraccessnotauthorized":return t.v=Kusto.Data.Common.IngestionErrorCategory.UserAccessNotAuthorized,!0;case"dataaccessnotauthorized":return t.v=Kusto.Data.Common.IngestionErrorCategory.DataAccessNotAuthorized,!0;case"filetoolarge":return t.v=Kusto.Data.Common.IngestionErrorCategory.FileTooLarge,!0;case"throttledonengine":return t.v=Kusto.Data.Common.IngestionErrorCategory.ThrottledOnEngine,!0;case"downloadfailed":return t.v=Kusto.Data.Common.IngestionErrorCategory.DownloadFailed,!0;case"retryattemptsexceeded":return t.v=Kusto.Data.Common.IngestionErrorCategory.RetryAttemptsExceeded,!0;case"blobalreadyreceived":return t.v=Kusto.Data.Common.IngestionErrorCategory.BlobAlreadyReceived,!0;case"cancelled":return t.v=Kusto.Data.Common.IngestionErrorCategory.Cancelled,!0;case"configuration":return t.v=Kusto.Data.Common.IngestionErrorCategory.Configuration,!0;case"metadataaccessnotauthorized":return t.v=Kusto.Data.Common.IngestionErrorCategory.MetadataAccessNotAuthorized,!0;case"skippable":return t.v=Kusto.Data.Common.IngestionErrorCategory.Skippable,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.IngestionErrorCategory.Unknown:return"";case Kusto.Data.Common.IngestionErrorCategory.InternalServiceError:return"";case Kusto.Data.Common.IngestionErrorCategory.BadFormat:return"";case Kusto.Data.Common.IngestionErrorCategory.BadRequest:return"";case Kusto.Data.Common.IngestionErrorCategory.UpdatePolicyFailure:return"";case Kusto.Data.Common.IngestionErrorCategory.EntityNotFound:return"";case Kusto.Data.Common.IngestionErrorCategory.UserAccessNotAuthorized:return"";case Kusto.Data.Common.IngestionErrorCategory.DataAccessNotAuthorized:return"";case Kusto.Data.Common.IngestionErrorCategory.FileTooLarge:return"";case Kusto.Data.Common.IngestionErrorCategory.ThrottledOnEngine:return"";case Kusto.Data.Common.IngestionErrorCategory.DownloadFailed:return"";case Kusto.Data.Common.IngestionErrorCategory.RetryAttemptsExceeded:return"";case Kusto.Data.Common.IngestionErrorCategory.BlobAlreadyReceived:return"";case Kusto.Data.Common.IngestionErrorCategory.Cancelled:return"";case Kusto.Data.Common.IngestionErrorCategory.Configuration:return"";case Kusto.Data.Common.IngestionErrorCategory.MetadataAccessNotAuthorized:return"";case Kusto.Data.Common.IngestionErrorCategory.Skippable:return"";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedIngestionErrorCode",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.IngestionErrorCode.Unknown:return"Unknown";case Kusto.Data.Common.IngestionErrorCode.OutOfMemory:return"OutOfMemory";case Kusto.Data.Common.IngestionErrorCode.Stream_WrongNumberOfFields:return"Stream_WrongNumberOfFields";case Kusto.Data.Common.IngestionErrorCode.Stream_InputStreamTooLarge:return"Stream_InputStreamTooLarge";case Kusto.Data.Common.IngestionErrorCode.Stream_NoDataToIngest:return"Stream_NoDataToIngest";case Kusto.Data.Common.IngestionErrorCode.Stream_ClosingQuoteMissing:return"Stream_ClosingQuoteMissing";case Kusto.Data.Common.IngestionErrorCode.Stream_DynamicPropertyBagTooLarge:return"Stream_DynamicPropertyBagTooLarge";case Kusto.Data.Common.IngestionErrorCode.Download_SourceNotFound:return"Download_SourceNotFound";case Kusto.Data.Common.IngestionErrorCode.Download_AccessConditionNotSatisfied:return"Download_AccessConditionNotSatisfied";case Kusto.Data.Common.IngestionErrorCode.Download_Forbidden:return"Download_Forbidden";case Kusto.Data.Common.IngestionErrorCode.Download_AccountNotFound:return"Download_AccountNotFound";case Kusto.Data.Common.IngestionErrorCode.Download_TransientNameResolutionFailure:return"Download_TransientNameResolutionFailure";case Kusto.Data.Common.IngestionErrorCode.Download_BadRequest:return"Download_BadRequest";case Kusto.Data.Common.IngestionErrorCode.Download_NotTransient:return"Download_NotTransient";case Kusto.Data.Common.IngestionErrorCode.Download_UnknownError:return"Download_UnknownError";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_QuerySchemaDoesNotMatchTableSchema:return"UpdatePolicy_QuerySchemaDoesNotMatchTableSchema";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_FailedDescendantTransaction:return"UpdatePolicy_FailedDescendantTransaction";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_ManagedIdentityError:return"UpdatePolicy_ManagedIdentityError";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_IngestionError:return"UpdatePolicy_IngestionError";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_UnknownError:return"UpdatePolicy_UnknownError";case Kusto.Data.Common.IngestionErrorCode.BadRequest_MissingMappingFailure:return"BadRequest_MissingMappingFailure";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlob:return"BadRequest_InvalidBlob";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlob:return"BadRequest_EmptyBlob";case Kusto.Data.Common.IngestionErrorCode.BadRequest_NoRecordsOrWrongFormat:return"BadRequest_NoRecordsOrWrongFormat";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyArchive:return"BadRequest_EmptyArchive";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidArchive:return"BadRequest_InvalidArchive";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlobUri:return"BadRequest_InvalidBlobUri";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlobUri:return"BadRequest_EmptyBlobUri";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseNotExist:return"BadRequest_DatabaseNotExist";case Kusto.Data.Common.IngestionErrorCode.BadRequest_TableNotExist:return"BadRequest_TableNotExist";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidKustoIdentityToken:return"BadRequest_InvalidKustoIdentityToken";case Kusto.Data.Common.IngestionErrorCode.BadRequest_FileTooLarge:return"BadRequest_FileTooLarge";case Kusto.Data.Common.IngestionErrorCode.Reserved_1:return"Reserved_1";case Kusto.Data.Common.IngestionErrorCode.General_RetryAttemptsExceeded:return"General_RetryAttemptsExceeded";case Kusto.Data.Common.IngestionErrorCode.General_BadRequest:return"General_BadRequest";case Kusto.Data.Common.IngestionErrorCode.General_InternalServerError:return"General_InternalServerError";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_Cyclic_Update_Not_Allowed:return"UpdatePolicy_Cyclic_Update_Not_Allowed";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMapping:return"BadRequest_InvalidMapping";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMappingReference:return"BadRequest_InvalidMappingReference";case Kusto.Data.Common.IngestionErrorCode.BadRequest_MappingReferenceWasNotFound:return"BadRequest_MappingReferenceWasNotFound";case Kusto.Data.Common.IngestionErrorCode.BadRequest_FormatNotSupported:return"BadRequest_FormatNotSupported";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DuplicateMapping:return"BadRequest_DuplicateMapping";case Kusto.Data.Common.IngestionErrorCode.BadRequest_CorruptedMessage:return"BadRequest_CorruptedMessage";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InconsistentMapping:return"BadRequest_InconsistentMapping";case Kusto.Data.Common.IngestionErrorCode.BadRequest_SyntaxError:return"BadRequest_SyntaxError";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidOrEmptyTableName:return"BadRequest_InvalidOrEmptyTableName";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyDatabaseName:return"BadRequest_EmptyDatabaseName";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyTenantIdentifier:return"BadRequest_EmptyTenantIdentifier";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyMappingReference:return"BadRequest_EmptyMappingReference";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNotFound:return"BadRequest_EntityNotFound";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNameIsNotValid:return"BadRequest_EntityNameIsNotValid";case Kusto.Data.Common.IngestionErrorCode.General_AbandonedIngestion:return"General_AbandonedIngestion";case Kusto.Data.Common.IngestionErrorCode.General_ThrottledIngestion:return"General_ThrottledIngestion";case Kusto.Data.Common.IngestionErrorCode.General_TransientSchemaMismatch:return"General_TransientSchemaMismatch";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseAccessDenied:return"BadRequest_DatabaseAccessDenied";case Kusto.Data.Common.IngestionErrorCode.BadRequest_UnexpectedCharacterInInputStream:return"BadRequest_UnexpectedCharacterInInputStream";case Kusto.Data.Common.IngestionErrorCode.Forbidden:return"Forbidden";case Kusto.Data.Common.IngestionErrorCode.BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy:return"BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy";case Kusto.Data.Common.IngestionErrorCode.BadRequest_CreationTimeEarlierThanSoftDeletePeriod:return"BadRequest_CreationTimeEarlierThanSoftDeletePeriod";case Kusto.Data.Common.IngestionErrorCode.BadRequest_NotSupported:return"BadRequest_NotSupported";case Kusto.Data.Common.IngestionErrorCode.Skipped_IngestByTagAlreadyExists:return"Skipped_IngestByTagAlreadyExists";case Kusto.Data.Common.IngestionErrorCode.Timeout:return"Timeout";case Kusto.Data.Common.IngestionErrorCode.BadRequest_MalformedIngestionProperty:return"BadRequest_MalformedIngestionProperty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_IngestionPropertyNotSupportedInThisContext:return"BadRequest_IngestionPropertyNotSupportedInThisContext";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidAuthentication:return"BadRequest_InvalidAuthentication";case Kusto.Data.Common.IngestionErrorCode.BlobAlreadyReceived_BlobAlreadyFoundInBatch:return"BlobAlreadyReceived_BlobAlreadyFoundInBatch";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidManagedIdentity:return"BadRequest_InvalidManagedIdentity";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DataCapacityLimitReached:return"BadRequest_DataCapacityLimitReached";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_BadRequest:return"UpdatePolicy_BadRequest";case Kusto.Data.Common.IngestionErrorCode.BadRequest_NonMultiDatabaseDataConnection:return"BadRequest_NonMultiDatabaseDataConnection";case Kusto.Data.Common.IngestionErrorCode.Cancelled:return"Cancelled";case Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_StorageAccount:return"AbandonedByConfiguration_StorageAccount";case Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_DatabaseAndTable:return"AbandonedByConfiguration_DatabaseAndTable";case Kusto.Data.Common.IngestionErrorCode.BadRequest_TableSchemaModificationUnauthorized:return"BadRequest_TableSchemaModificationUnauthorized";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseSchemaModificationUnauthorized:return"BadRequest_DatabaseSchemaModificationUnauthorized";case Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionPolicyNotEnabled:return"BadRequest_StreamingIngestionPolicyNotEnabled";case Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionUpdatePolicyIncompatible:return"BadRequest_StreamingIngestionUpdatePolicyIncompatible";case Kusto.Data.Common.IngestionErrorCode.NotFound_StreamingIngestionDisabledForCluster:return"NotFound_StreamingIngestionDisabledForCluster";case Kusto.Data.Common.IngestionErrorCode.Skipped_Adlsv2CreateFileEvent:return"Skipped_Adlsv2CreateFileEvent";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.UInt32)])},FastIsDefined:function(e){var t={v:new Kusto.Data.Common.IngestionErrorCode};return Kusto.Data.Common.ExtendedIngestionErrorCode.FastTryParse(e,t,!1,!0)},FastIsDefined$1:function(e){switch(e){case Kusto.Data.Common.IngestionErrorCode.Unknown:return!0;case Kusto.Data.Common.IngestionErrorCode.OutOfMemory:return!0;case Kusto.Data.Common.IngestionErrorCode.Stream_WrongNumberOfFields:return!0;case Kusto.Data.Common.IngestionErrorCode.Stream_InputStreamTooLarge:return!0;case Kusto.Data.Common.IngestionErrorCode.Stream_NoDataToIngest:return!0;case Kusto.Data.Common.IngestionErrorCode.Stream_ClosingQuoteMissing:return!0;case Kusto.Data.Common.IngestionErrorCode.Stream_DynamicPropertyBagTooLarge:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_SourceNotFound:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_AccessConditionNotSatisfied:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_Forbidden:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_AccountNotFound:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_TransientNameResolutionFailure:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_BadRequest:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_NotTransient:return!0;case Kusto.Data.Common.IngestionErrorCode.Download_UnknownError:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_QuerySchemaDoesNotMatchTableSchema:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_FailedDescendantTransaction:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_ManagedIdentityError:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_IngestionError:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_UnknownError:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_MissingMappingFailure:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlob:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlob:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_NoRecordsOrWrongFormat:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyArchive:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidArchive:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlobUri:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlobUri:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseNotExist:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_TableNotExist:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidKustoIdentityToken:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_FileTooLarge:return!0;case Kusto.Data.Common.IngestionErrorCode.Reserved_1:return!0;case Kusto.Data.Common.IngestionErrorCode.General_RetryAttemptsExceeded:return!0;case Kusto.Data.Common.IngestionErrorCode.General_BadRequest:return!0;case Kusto.Data.Common.IngestionErrorCode.General_InternalServerError:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_Cyclic_Update_Not_Allowed:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMapping:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMappingReference:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_MappingReferenceWasNotFound:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_FormatNotSupported:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_DuplicateMapping:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_CorruptedMessage:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InconsistentMapping:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_SyntaxError:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidOrEmptyTableName:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyDatabaseName:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyTenantIdentifier:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyMappingReference:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNotFound:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNameIsNotValid:return!0;case Kusto.Data.Common.IngestionErrorCode.General_AbandonedIngestion:return!0;case Kusto.Data.Common.IngestionErrorCode.General_ThrottledIngestion:return!0;case Kusto.Data.Common.IngestionErrorCode.General_TransientSchemaMismatch:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseAccessDenied:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_UnexpectedCharacterInInputStream:return!0;case Kusto.Data.Common.IngestionErrorCode.Forbidden:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_CreationTimeEarlierThanSoftDeletePeriod:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_NotSupported:return!0;case Kusto.Data.Common.IngestionErrorCode.Skipped_IngestByTagAlreadyExists:return!0;case Kusto.Data.Common.IngestionErrorCode.Timeout:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_MalformedIngestionProperty:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_IngestionPropertyNotSupportedInThisContext:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidAuthentication:return!0;case Kusto.Data.Common.IngestionErrorCode.BlobAlreadyReceived_BlobAlreadyFoundInBatch:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidManagedIdentity:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_DataCapacityLimitReached:return!0;case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_BadRequest:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_NonMultiDatabaseDataConnection:return!0;case Kusto.Data.Common.IngestionErrorCode.Cancelled:return!0;case Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_StorageAccount:return!0;case Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_DatabaseAndTable:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_TableSchemaModificationUnauthorized:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseSchemaModificationUnauthorized:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionPolicyNotEnabled:return!0;case Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionUpdatePolicyIncompatible:return!0;case Kusto.Data.Common.IngestionErrorCode.NotFound_StreamingIngestionDisabledForCluster:return!0;case Kusto.Data.Common.IngestionErrorCode.Skipped_Adlsv2CreateFileEvent:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)>>>0===t},FastHasFlag:function(e,t){return(e&t)>>>0===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.IngestionErrorCode};if(Kusto.Data.Common.ExtendedIngestionErrorCode.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"Unknown":return t.v=Kusto.Data.Common.IngestionErrorCode.Unknown,!0;case"0x80DA0007":case"OutOfMemory":return t.v=Kusto.Data.Common.IngestionErrorCode.OutOfMemory,!0;case"0x80DA0008":case"Stream_WrongNumberOfFields":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_WrongNumberOfFields,!0;case"0x80DA0009":case"Stream_InputStreamTooLarge":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_InputStreamTooLarge,!0;case"Stream_NoDataToIngest":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_NoDataToIngest,!0;case"0x80DA000b":case"Stream_ClosingQuoteMissing":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_ClosingQuoteMissing,!0;case"0x80DA000E":case"Stream_DynamicPropertyBagTooLarge":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_DynamicPropertyBagTooLarge,!0;case"Download_SourceNotFound":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_SourceNotFound,!0;case"Download_AccessConditionNotSatisfied":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_AccessConditionNotSatisfied,!0;case"Download_Forbidden":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_Forbidden,!0;case"Download_AccountNotFound":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_AccountNotFound,!0;case"Download_TransientNameResolutionFailure":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_TransientNameResolutionFailure,!0;case"Download_BadRequest":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_BadRequest,!0;case"Download_NotTransient":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_NotTransient,!0;case"Download_UnknownError":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_UnknownError,!0;case"UpdatePolicy_QuerySchemaDoesNotMatchTableSchema":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_QuerySchemaDoesNotMatchTableSchema,!0;case"UpdatePolicy_FailedDescendantTransaction":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_FailedDescendantTransaction,!0;case"UpdatePolicy_ManagedIdentityError":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_ManagedIdentityError,!0;case"UpdatePolicy_IngestionError":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_IngestionError,!0;case"UpdatePolicy_UnknownError":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_UnknownError,!0;case"BadRequest_MissingMappingFailure":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_MissingMappingFailure,!0;case"BadRequest_InvalidBlob":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlob,!0;case"BadRequest_EmptyBlob":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlob,!0;case"BadRequest_NoRecordsOrWrongFormat":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_NoRecordsOrWrongFormat,!0;case"BadRequest_EmptyArchive":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyArchive,!0;case"BadRequest_InvalidArchive":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidArchive,!0;case"BadRequest_InvalidBlobUri":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlobUri,!0;case"BadRequest_EmptyBlobUri":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlobUri,!0;case"BadRequest_DatabaseNotExist":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseNotExist,!0;case"BadRequest_TableNotExist":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_TableNotExist,!0;case"BadRequest_InvalidKustoIdentityToken":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidKustoIdentityToken,!0;case"BadRequest_FileTooLarge":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_FileTooLarge,!0;case"Reserved_1":return t.v=Kusto.Data.Common.IngestionErrorCode.Reserved_1,!0;case"General_RetryAttemptsExceeded":return t.v=Kusto.Data.Common.IngestionErrorCode.General_RetryAttemptsExceeded,!0;case"General_BadRequest":return t.v=Kusto.Data.Common.IngestionErrorCode.General_BadRequest,!0;case"General_InternalServerError":return t.v=Kusto.Data.Common.IngestionErrorCode.General_InternalServerError,!0;case"UpdatePolicy_Cyclic_Update_Not_Allowed":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_Cyclic_Update_Not_Allowed,!0;case"BadRequest_InvalidMapping":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMapping,!0;case"BadRequest_InvalidMappingReference":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMappingReference,!0;case"BadRequest_MappingReferenceWasNotFound":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_MappingReferenceWasNotFound,!0;case"BadRequest_FormatNotSupported":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_FormatNotSupported,!0;case"BadRequest_DuplicateMapping":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DuplicateMapping,!0;case"BadRequest_CorruptedMessage":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_CorruptedMessage,!0;case"BadRequest_InconsistentMapping":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InconsistentMapping,!0;case"BadRequest_SyntaxError":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_SyntaxError,!0;case"BadRequest_InvalidOrEmptyTableName":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidOrEmptyTableName,!0;case"BadRequest_EmptyDatabaseName":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyDatabaseName,!0;case"BadRequest_EmptyTenantIdentifier":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyTenantIdentifier,!0;case"BadRequest_EmptyMappingReference":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyMappingReference,!0;case"BadRequest_EntityNotFound":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNotFound,!0;case"BadRequest_EntityNameIsNotValid":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNameIsNotValid,!0;case"General_AbandonedIngestion":return t.v=Kusto.Data.Common.IngestionErrorCode.General_AbandonedIngestion,!0;case"General_ThrottledIngestion":return t.v=Kusto.Data.Common.IngestionErrorCode.General_ThrottledIngestion,!0;case"General_TransientSchemaMismatch":return t.v=Kusto.Data.Common.IngestionErrorCode.General_TransientSchemaMismatch,!0;case"BadRequest_DatabaseAccessDenied":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseAccessDenied,!0;case"BadRequest_UnexpectedCharacterInInputStream":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_UnexpectedCharacterInInputStream,!0;case"Forbidden":return t.v=Kusto.Data.Common.IngestionErrorCode.Forbidden,!0;case"BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy,!0;case"BadRequest_CreationTimeEarlierThanSoftDeletePeriod":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_CreationTimeEarlierThanSoftDeletePeriod,!0;case"BadRequest_NotSupported":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_NotSupported,!0;case"Skipped_IngestByTagAlreadyExists":return t.v=Kusto.Data.Common.IngestionErrorCode.Skipped_IngestByTagAlreadyExists,!0;case"0x80131505":case"Timeout":return t.v=Kusto.Data.Common.IngestionErrorCode.Timeout,!0;case"BadRequest_MalformedIngestionProperty":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_MalformedIngestionProperty,!0;case"BadRequest_IngestionPropertyNotSupportedInThisContext":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_IngestionPropertyNotSupportedInThisContext,!0;case"BadRequest_InvalidAuthentication":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidAuthentication,!0;case"BlobAlreadyReceived_BlobAlreadyFoundInBatch":return t.v=Kusto.Data.Common.IngestionErrorCode.BlobAlreadyReceived_BlobAlreadyFoundInBatch,!0;case"BadRequest_InvalidManagedIdentity":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidManagedIdentity,!0;case"BadRequest_DataCapacityLimitReached":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DataCapacityLimitReached,!0;case"UpdatePolicy_BadRequest":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_BadRequest,!0;case"BadRequest_NonMultiDatabaseDataConnection":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_NonMultiDatabaseDataConnection,!0;case"Cancelled":return t.v=Kusto.Data.Common.IngestionErrorCode.Cancelled,!0;case"AbandonedByConfiguration_StorageAccount":return t.v=Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_StorageAccount,!0;case"AbandonedByConfiguration_DatabaseAndTable":return t.v=Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_DatabaseAndTable,!0;case"BadRequest_TableSchemaModificationUnauthorized":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_TableSchemaModificationUnauthorized,!0;case"BadRequest_DatabaseSchemaModificationUnauthorized":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseSchemaModificationUnauthorized,!0;case"BadRequest_StreamingIngestionPolicyNotEnabled":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionPolicyNotEnabled,!0;case"BadRequest_StreamingIngestionUpdatePolicyIncompatible":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionUpdatePolicyIncompatible,!0;case"NotFound_StreamingIngestionDisabledForCluster":return t.v=Kusto.Data.Common.IngestionErrorCode.NotFound_StreamingIngestionDisabledForCluster,!0;case"Skipped_Adlsv2CreateFileEvent":return t.v=Kusto.Data.Common.IngestionErrorCode.Skipped_Adlsv2CreateFileEvent,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"unknown":return t.v=Kusto.Data.Common.IngestionErrorCode.Unknown,!0;case"outofmemory":return t.v=Kusto.Data.Common.IngestionErrorCode.OutOfMemory,!0;case"stream_wrongnumberoffields":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_WrongNumberOfFields,!0;case"stream_inputstreamtoolarge":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_InputStreamTooLarge,!0;case"stream_nodatatoingest":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_NoDataToIngest,!0;case"stream_closingquotemissing":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_ClosingQuoteMissing,!0;case"stream_dynamicpropertybagtoolarge":return t.v=Kusto.Data.Common.IngestionErrorCode.Stream_DynamicPropertyBagTooLarge,!0;case"download_sourcenotfound":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_SourceNotFound,!0;case"download_accessconditionnotsatisfied":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_AccessConditionNotSatisfied,!0;case"download_forbidden":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_Forbidden,!0;case"download_accountnotfound":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_AccountNotFound,!0;case"download_transientnameresolutionfailure":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_TransientNameResolutionFailure,!0;case"download_badrequest":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_BadRequest,!0;case"download_nottransient":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_NotTransient,!0;case"download_unknownerror":return t.v=Kusto.Data.Common.IngestionErrorCode.Download_UnknownError,!0;case"updatepolicy_queryschemadoesnotmatchtableschema":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_QuerySchemaDoesNotMatchTableSchema,!0;case"updatepolicy_faileddescendanttransaction":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_FailedDescendantTransaction,!0;case"updatepolicy_managedidentityerror":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_ManagedIdentityError,!0;case"updatepolicy_ingestionerror":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_IngestionError,!0;case"updatepolicy_unknownerror":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_UnknownError,!0;case"badrequest_missingmappingfailure":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_MissingMappingFailure,!0;case"badrequest_invalidblob":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlob,!0;case"badrequest_emptyblob":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlob,!0;case"badrequest_norecordsorwrongformat":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_NoRecordsOrWrongFormat,!0;case"badrequest_emptyarchive":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyArchive,!0;case"badrequest_invalidarchive":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidArchive,!0;case"badrequest_invalidbloburi":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlobUri,!0;case"badrequest_emptybloburi":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlobUri,!0;case"badrequest_databasenotexist":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseNotExist,!0;case"badrequest_tablenotexist":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_TableNotExist,!0;case"badrequest_invalidkustoidentitytoken":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidKustoIdentityToken,!0;case"badrequest_filetoolarge":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_FileTooLarge,!0;case"reserved_1":return t.v=Kusto.Data.Common.IngestionErrorCode.Reserved_1,!0;case"general_retryattemptsexceeded":return t.v=Kusto.Data.Common.IngestionErrorCode.General_RetryAttemptsExceeded,!0;case"general_badrequest":return t.v=Kusto.Data.Common.IngestionErrorCode.General_BadRequest,!0;case"general_internalservererror":return t.v=Kusto.Data.Common.IngestionErrorCode.General_InternalServerError,!0;case"updatepolicy_cyclic_update_not_allowed":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_Cyclic_Update_Not_Allowed,!0;case"badrequest_invalidmapping":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMapping,!0;case"badrequest_invalidmappingreference":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMappingReference,!0;case"badrequest_mappingreferencewasnotfound":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_MappingReferenceWasNotFound,!0;case"badrequest_formatnotsupported":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_FormatNotSupported,!0;case"badrequest_duplicatemapping":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DuplicateMapping,!0;case"badrequest_corruptedmessage":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_CorruptedMessage,!0;case"badrequest_inconsistentmapping":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InconsistentMapping,!0;case"badrequest_syntaxerror":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_SyntaxError,!0;case"badrequest_invalidoremptytablename":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidOrEmptyTableName,!0;case"badrequest_emptydatabasename":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyDatabaseName,!0;case"badrequest_emptytenantidentifier":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyTenantIdentifier,!0;case"badrequest_emptymappingreference":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyMappingReference,!0;case"badrequest_entitynotfound":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNotFound,!0;case"badrequest_entitynameisnotvalid":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNameIsNotValid,!0;case"general_abandonedingestion":return t.v=Kusto.Data.Common.IngestionErrorCode.General_AbandonedIngestion,!0;case"general_throttledingestion":return t.v=Kusto.Data.Common.IngestionErrorCode.General_ThrottledIngestion,!0;case"general_transientschemamismatch":return t.v=Kusto.Data.Common.IngestionErrorCode.General_TransientSchemaMismatch,!0;case"badrequest_databaseaccessdenied":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseAccessDenied,!0;case"badrequest_unexpectedcharacterininputstream":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_UnexpectedCharacterInInputStream,!0;case"forbidden":return t.v=Kusto.Data.Common.IngestionErrorCode.Forbidden,!0;case"badrequest_zeroretentionpolicywithnoupdatepolicy":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy,!0;case"badrequest_creationtimeearlierthansoftdeleteperiod":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_CreationTimeEarlierThanSoftDeletePeriod,!0;case"badrequest_notsupported":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_NotSupported,!0;case"skipped_ingestbytagalreadyexists":return t.v=Kusto.Data.Common.IngestionErrorCode.Skipped_IngestByTagAlreadyExists,!0;case"timeout":return t.v=Kusto.Data.Common.IngestionErrorCode.Timeout,!0;case"badrequest_malformedingestionproperty":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_MalformedIngestionProperty,!0;case"badrequest_ingestionpropertynotsupportedinthiscontext":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_IngestionPropertyNotSupportedInThisContext,!0;case"badrequest_invalidauthentication":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidAuthentication,!0;case"blobalreadyreceived_blobalreadyfoundinbatch":return t.v=Kusto.Data.Common.IngestionErrorCode.BlobAlreadyReceived_BlobAlreadyFoundInBatch,!0;case"badrequest_invalidmanagedidentity":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidManagedIdentity,!0;case"badrequest_datacapacitylimitreached":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DataCapacityLimitReached,!0;case"updatepolicy_badrequest":return t.v=Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_BadRequest,!0;case"badrequest_nonmultidatabasedataconnection":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_NonMultiDatabaseDataConnection,!0;case"cancelled":return t.v=Kusto.Data.Common.IngestionErrorCode.Cancelled,!0;case"abandonedbyconfiguration_storageaccount":return t.v=Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_StorageAccount,!0;case"abandonedbyconfiguration_databaseandtable":return t.v=Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_DatabaseAndTable,!0;case"badrequest_tableschemamodificationunauthorized":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_TableSchemaModificationUnauthorized,!0;case"badrequest_databaseschemamodificationunauthorized":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseSchemaModificationUnauthorized,!0;case"badrequest_streamingingestionpolicynotenabled":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionPolicyNotEnabled,!0;case"badrequest_streamingingestionupdatepolicyincompatible":return t.v=Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionUpdatePolicyIncompatible,!0;case"notfound_streamingingestiondisabledforcluster":return t.v=Kusto.Data.Common.IngestionErrorCode.NotFound_StreamingIngestionDisabledForCluster,!0;case"skipped_adlsv2createfileevent":return t.v=Kusto.Data.Common.IngestionErrorCode.Skipped_Adlsv2CreateFileEvent,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v>>>0,!0}return t.v=0,!1},FastGetHashCode:function(e){return e|0},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.IngestionErrorCode.Unknown:return"Unknown error occurred";case Kusto.Data.Common.IngestionErrorCode.OutOfMemory:return"Ingestion operation ran out of memory";case Kusto.Data.Common.IngestionErrorCode.Stream_WrongNumberOfFields:return"Wrong number of fields.";case Kusto.Data.Common.IngestionErrorCode.Stream_InputStreamTooLarge:return"Input stream/record/field too large.";case Kusto.Data.Common.IngestionErrorCode.Stream_NoDataToIngest:return"No data streams to ingest";case Kusto.Data.Common.IngestionErrorCode.Stream_ClosingQuoteMissing:return"Invalid csv format - closing quote missing.";case Kusto.Data.Common.IngestionErrorCode.Stream_DynamicPropertyBagTooLarge:return"The combined size of the property bag's distinct keys is getting too large.";case Kusto.Data.Common.IngestionErrorCode.Download_SourceNotFound:return"Failed to download source from Azure storage - source not found";case Kusto.Data.Common.IngestionErrorCode.Download_AccessConditionNotSatisfied:return"Failed to download source from Azure storage - access condition not satisfied";case Kusto.Data.Common.IngestionErrorCode.Download_Forbidden:return"Failed to download source from Azure storage - access forbidden";case Kusto.Data.Common.IngestionErrorCode.Download_AccountNotFound:return"Failed to download source from Azure storage - account not found";case Kusto.Data.Common.IngestionErrorCode.Download_TransientNameResolutionFailure:return"Failed to download source from Azure storage - transient storage account name resolution failure";case Kusto.Data.Common.IngestionErrorCode.Download_BadRequest:return"Failed to download source from Azure storage - bad request";case Kusto.Data.Common.IngestionErrorCode.Download_NotTransient:return"Failed to download source from Azure storage - not transient error";case Kusto.Data.Common.IngestionErrorCode.Download_UnknownError:return"Failed to download source from Azure storage - unknown error";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_QuerySchemaDoesNotMatchTableSchema:return"Failed to invoke update policy. Query schema does not match table schema";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_FailedDescendantTransaction:return"Failed to invoke update policy. Failed descendant transactional update policy";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_ManagedIdentityError:return"Failed to invoke update policy. Failed generating the credentials for the specified managed identity.";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_IngestionError:return"Failed to invoke update policy. Ingestion Error occurred";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_UnknownError:return"Failed to invoke update policy. Unknown error occurred";case Kusto.Data.Common.IngestionErrorCode.BadRequest_MissingMappingFailure:return"A format that requires ingestion mapping was sent without the one. Identity ingestion mapping can be auto-created only when the ingestion format is specified";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlob:return"Blob is invalid";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlob:return"Blob is empty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_NoRecordsOrWrongFormat:return"No records to ingest or using wrong data format";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyArchive:return"Archive is empty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidArchive:return"Archive is invalid";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidBlobUri:return"Blob Uri is invalid";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyBlobUri:return"Blob Uri is empty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseNotExist:return"Database does not exist";case Kusto.Data.Common.IngestionErrorCode.BadRequest_TableNotExist:return"Table does not exist";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidKustoIdentityToken:return"Invalid kusto identity token";case Kusto.Data.Common.IngestionErrorCode.BadRequest_FileTooLarge:return"File too large";case Kusto.Data.Common.IngestionErrorCode.Reserved_1:return"Reserved Error 1";case Kusto.Data.Common.IngestionErrorCode.General_RetryAttemptsExceeded:return"Operation has exceeded the retry attempts limit or timespan following a recurring transient error";case Kusto.Data.Common.IngestionErrorCode.General_BadRequest:return"Bad request";case Kusto.Data.Common.IngestionErrorCode.General_InternalServerError:return"Internal server error occurred";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_Cyclic_Update_Not_Allowed:return"Failed to invoke update policy. Cyclic update is not allowed";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMapping:return"Failed to parse ingestion mapping.";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidMappingReference:return"Invalid mapping reference.";case Kusto.Data.Common.IngestionErrorCode.BadRequest_MappingReferenceWasNotFound:return"Mapping reference wasn't found.";case Kusto.Data.Common.IngestionErrorCode.BadRequest_FormatNotSupported:return"Format is not supported";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DuplicateMapping:return"Ingestion properties contains ingestion mapping and ingestion mapping reference.";case Kusto.Data.Common.IngestionErrorCode.BadRequest_CorruptedMessage:return"Message is corrupted";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InconsistentMapping:return"Inconsistent ingestion mapping";case Kusto.Data.Common.IngestionErrorCode.BadRequest_SyntaxError:return"Syntax error";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidOrEmptyTableName:return"Table name is empty or invalid";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyDatabaseName:return"Database name is empty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyTenantIdentifier:return"TenantIdentifier is empty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EmptyMappingReference:return"MappingReference is empty";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNotFound:return"Failed to locate an entity";case Kusto.Data.Common.IngestionErrorCode.BadRequest_EntityNameIsNotValid:return"Entity name is not valid";case Kusto.Data.Common.IngestionErrorCode.General_AbandonedIngestion:return"Abandoned ingestion.";case Kusto.Data.Common.IngestionErrorCode.General_ThrottledIngestion:return"Throttled ingestion.";case Kusto.Data.Common.IngestionErrorCode.General_TransientSchemaMismatch:return"Schema of target table at start time doesn't match the one at commit time.";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseAccessDenied:return"Access to database is denied";case Kusto.Data.Common.IngestionErrorCode.BadRequest_UnexpectedCharacterInInputStream:return"Unexpected character in the input stream";case Kusto.Data.Common.IngestionErrorCode.Forbidden:return"Insufficient security permissions to execute request";case Kusto.Data.Common.IngestionErrorCode.BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy:return"Table has zero rentention policy and is not the source table for any update policy";case Kusto.Data.Common.IngestionErrorCode.BadRequest_CreationTimeEarlierThanSoftDeletePeriod:return"Specified creation time is earlier than table's soft delete period";case Kusto.Data.Common.IngestionErrorCode.BadRequest_NotSupported:return"Request not supported";case Kusto.Data.Common.IngestionErrorCode.Skipped_IngestByTagAlreadyExists:return"Another stream with the same ingest-by tag was already ingested";case Kusto.Data.Common.IngestionErrorCode.Timeout:return"Ingestion operation timed out";case Kusto.Data.Common.IngestionErrorCode.BadRequest_MalformedIngestionProperty:return"Ingestion property is malformed";case Kusto.Data.Common.IngestionErrorCode.BadRequest_IngestionPropertyNotSupportedInThisContext:return"Ingestion property is not supported in this context";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidAuthentication:return"Authentication to data is not valid";case Kusto.Data.Common.IngestionErrorCode.BlobAlreadyReceived_BlobAlreadyFoundInBatch:return"One copy of this blob has already been processed. The service will only attempt to ingest one copy of the blob";case Kusto.Data.Common.IngestionErrorCode.BadRequest_InvalidManagedIdentity:return"Managed Identity is not defined, not allowed by a policy, or doesn't have permissions on the resource";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DataCapacityLimitReached:return"Raised to indicate that storage data capacity has reached its limit";case Kusto.Data.Common.IngestionErrorCode.UpdatePolicy_BadRequest:return"Failed to invoke update policy as a result of a bad request, e.g. query semantic error";case Kusto.Data.Common.IngestionErrorCode.BadRequest_NonMultiDatabaseDataConnection:return"Event contains the 'database' property directing the ingestion into a database different than the target database configured in the data connection's settings. Since this data connection is set to multiDatabase = false, dynamic database routing is forbidden.";case Kusto.Data.Common.IngestionErrorCode.Cancelled:return"Ingestion operation cancelled";case Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_StorageAccount:return"Blob abandoned by configuration - storage account";case Kusto.Data.Common.IngestionErrorCode.AbandonedByConfiguration_DatabaseAndTable:return"Blob abandoned by configuration - database and table combination";case Kusto.Data.Common.IngestionErrorCode.BadRequest_TableSchemaModificationUnauthorized:return"Unauthorized table schema modification";case Kusto.Data.Common.IngestionErrorCode.BadRequest_DatabaseSchemaModificationUnauthorized:return"Unauthorized database schema modification";case Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionPolicyNotEnabled:return"Streaming ingestion policy is not enabled for the table";case Kusto.Data.Common.IngestionErrorCode.BadRequest_StreamingIngestionUpdatePolicyIncompatible:return"Update policy is incompatible with streaming ingestion";case Kusto.Data.Common.IngestionErrorCode.NotFound_StreamingIngestionDisabledForCluster:return"Streaming ingestion is not enabled for the cluster";case Kusto.Data.Common.IngestionErrorCode.Skipped_Adlsv2CreateFileEvent:return"Adlsv2 with Api='CreateFile' is skipped. Ingestion is expected to be triggered by the 'FlushWithClose' Api in this case.";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedStorageEngineKind",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.StorageEngineKind.StorageV2:return"StorageV2";case Kusto.Data.Common.StorageEngineKind.StorageV3:return"StorageV3";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.StorageEngineKind};return Kusto.Data.Common.ExtendedStorageEngineKind.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.StorageEngineKind.StorageV2:return!0;case Kusto.Data.Common.StorageEngineKind.StorageV3:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.StorageEngineKind};if(Kusto.Data.Common.ExtendedStorageEngineKind.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"StorageV2":return t.v=Kusto.Data.Common.StorageEngineKind.StorageV2,!0;case"1":case"StorageV3":return t.v=Kusto.Data.Common.StorageEngineKind.StorageV3,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"storagev2":return t.v=Kusto.Data.Common.StorageEngineKind.StorageV2,!0;case"storagev3":return t.v=Kusto.Data.Common.StorageEngineKind.StorageV3,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.StorageEngineKind.StorageV2:return"V2 - extents data storage engine";case Kusto.Data.Common.StorageEngineKind.StorageV3:return"V3 - shard data storage engine";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtendedTransformationMethod",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Common.TransformationMethod.None:return"None";case Kusto.Data.Common.TransformationMethod.PropertyBagArrayToDictionary:return"PropertyBagArrayToDictionary";case Kusto.Data.Common.TransformationMethod.SourceLocation:return"SourceLocation";case Kusto.Data.Common.TransformationMethod.SourceLineNumber:return"SourceLineNumber";case Kusto.Data.Common.TransformationMethod.UnknownMethod1:return"UnknownMethod1";case Kusto.Data.Common.TransformationMethod.UnknownMethod:return"UnknownMethod";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixSeconds:return"DateTimeFromUnixSeconds";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMilliseconds:return"DateTimeFromUnixMilliseconds";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMicroseconds:return"DateTimeFromUnixMicroseconds";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixNanoseconds:return"DateTimeFromUnixNanoseconds";case Kusto.Data.Common.TransformationMethod.DropMappedFields:return"DropMappedFields";case Kusto.Data.Common.TransformationMethod.BytesAsBase64:return"BytesAsBase64";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Common.TransformationMethod};return Kusto.Data.Common.ExtendedTransformationMethod.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Common.TransformationMethod.None:return!0;case Kusto.Data.Common.TransformationMethod.PropertyBagArrayToDictionary:return!0;case Kusto.Data.Common.TransformationMethod.SourceLocation:return!0;case Kusto.Data.Common.TransformationMethod.SourceLineNumber:return!0;case Kusto.Data.Common.TransformationMethod.UnknownMethod1:return!0;case Kusto.Data.Common.TransformationMethod.UnknownMethod:return!0;case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixSeconds:return!0;case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMilliseconds:return!0;case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMicroseconds:return!0;case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixNanoseconds:return!0;case Kusto.Data.Common.TransformationMethod.DropMappedFields:return!0;case Kusto.Data.Common.TransformationMethod.BytesAsBase64:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Common.TransformationMethod};if(Kusto.Data.Common.ExtendedTransformationMethod.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"None":return t.v=Kusto.Data.Common.TransformationMethod.None,!0;case"1":case"PropertyBagArrayToDictionary":return t.v=Kusto.Data.Common.TransformationMethod.PropertyBagArrayToDictionary,!0;case"2":case"SourceLocation":return t.v=Kusto.Data.Common.TransformationMethod.SourceLocation,!0;case"3":case"SourceLineNumber":return t.v=Kusto.Data.Common.TransformationMethod.SourceLineNumber,!0;case"4":case"UnknownMethod1":return t.v=Kusto.Data.Common.TransformationMethod.UnknownMethod1,!0;case"5":case"UnknownMethod":return t.v=Kusto.Data.Common.TransformationMethod.UnknownMethod,!0;case"6":case"DateTimeFromUnixSeconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixSeconds,!0;case"7":case"DateTimeFromUnixMilliseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMilliseconds,!0;case"8":case"DateTimeFromUnixMicroseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMicroseconds,!0;case"9":case"DateTimeFromUnixNanoseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixNanoseconds,!0;case"10":case"DropMappedFields":return t.v=Kusto.Data.Common.TransformationMethod.DropMappedFields,!0;case"11":case"BytesAsBase64":return t.v=Kusto.Data.Common.TransformationMethod.BytesAsBase64,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"none":return t.v=Kusto.Data.Common.TransformationMethod.None,!0;case"propertybagarraytodictionary":return t.v=Kusto.Data.Common.TransformationMethod.PropertyBagArrayToDictionary,!0;case"sourcelocation":return t.v=Kusto.Data.Common.TransformationMethod.SourceLocation,!0;case"sourcelinenumber":return t.v=Kusto.Data.Common.TransformationMethod.SourceLineNumber,!0;case"unknownmethod1":return t.v=Kusto.Data.Common.TransformationMethod.UnknownMethod1,!0;case"unknownmethod":return t.v=Kusto.Data.Common.TransformationMethod.UnknownMethod,!0;case"datetimefromunixseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixSeconds,!0;case"datetimefromunixmilliseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMilliseconds,!0;case"datetimefromunixmicroseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMicroseconds,!0;case"datetimefromunixnanoseconds":return t.v=Kusto.Data.Common.TransformationMethod.DateTimeFromUnixNanoseconds,!0;case"dropmappedfields":return t.v=Kusto.Data.Common.TransformationMethod.DropMappedFields,!0;case"bytesasbase64":return t.v=Kusto.Data.Common.TransformationMethod.BytesAsBase64,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Common.TransformationMethod.None:return"Comma-separated value.";case Kusto.Data.Common.TransformationMethod.PropertyBagArrayToDictionary:return"Property bag array to dictionary.";case Kusto.Data.Common.TransformationMethod.SourceLocation:return"Source location.";case Kusto.Data.Common.TransformationMethod.SourceLineNumber:return"Source line number.";case Kusto.Data.Common.TransformationMethod.UnknownMethod1:return"Was GetPathElement";case Kusto.Data.Common.TransformationMethod.UnknownMethod:return"Unknown method.";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixSeconds:return"Converts UNIX epoch (seconds) to UTC datetime.";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMilliseconds:return"Converts UNIX epoch (milliseconds) to UTC datetime.";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixMicroseconds:return"Converts UNIX epoch (microseconds) to UTC datetime.";case Kusto.Data.Common.TransformationMethod.DateTimeFromUnixNanoseconds:return"Converts UNIX epoch (nanoseconds) to UTC datetime.";case Kusto.Data.Common.TransformationMethod.DropMappedFields:return"Drops nested fields already mapped to other columns.";case Kusto.Data.Common.TransformationMethod.BytesAsBase64:return"Encodes byte array as base64 string.";default:return null}}}}}),Bridge.define("Kusto.Data.Common.ExtentsMergeLookbackPeriodKind",{$kind:"enum",statics:{fields:{Default:0,HotCache:1,All:2,Custom:3}}}),Bridge.define("Kusto.Data.Common.IngestionErrorCategory",{$kind:"enum",statics:{fields:{Unknown:0,InternalServiceError:1,BadFormat:2,BadRequest:3,UpdatePolicyFailure:4,EntityNotFound:5,UserAccessNotAuthorized:6,DataAccessNotAuthorized:7,FileTooLarge:8,ThrottledOnEngine:9,DownloadFailed:10,RetryAttemptsExceeded:11,BlobAlreadyReceived:12,Cancelled:13,Configuration:14,MetadataAccessNotAuthorized:15,Skippable:16}}}),Bridge.define("Kusto.Data.Common.IngestionErrorCode",{$kind:"enum",statics:{fields:{Unknown:0,OutOfMemory:2161770503,Stream_WrongNumberOfFields:2161770504,Stream_InputStreamTooLarge:2161770505,Stream_NoDataToIngest:2161770506,Stream_ClosingQuoteMissing:2161770507,Stream_DynamicPropertyBagTooLarge:2161770510,Download_SourceNotFound:2161770511,Download_AccessConditionNotSatisfied:2161770512,Download_Forbidden:2161770513,Download_AccountNotFound:2161770514,Download_TransientNameResolutionFailure:2161770515,Download_BadRequest:2161770516,Download_NotTransient:2161770517,Download_UnknownError:2161770518,UpdatePolicy_QuerySchemaDoesNotMatchTableSchema:2161770519,UpdatePolicy_FailedDescendantTransaction:2161770520,UpdatePolicy_ManagedIdentityError:2161770521,UpdatePolicy_IngestionError:2161770522,UpdatePolicy_UnknownError:2161770523,BadRequest_MissingMappingFailure:2161770524,BadRequest_InvalidBlob:2161770525,BadRequest_EmptyBlob:2161770526,BadRequest_NoRecordsOrWrongFormat:2161770527,BadRequest_EmptyArchive:2161770528,BadRequest_InvalidArchive:2161770529,BadRequest_InvalidBlobUri:2161770530,BadRequest_EmptyBlobUri:2161770531,BadRequest_DatabaseNotExist:2161770532,BadRequest_TableNotExist:2161770533,BadRequest_InvalidKustoIdentityToken:2161770534,BadRequest_FileTooLarge:2161770535,Reserved_1:2161770536,General_RetryAttemptsExceeded:2161770537,General_BadRequest:2161770538,General_InternalServerError:2161770539,UpdatePolicy_Cyclic_Update_Not_Allowed:2161770540,BadRequest_InvalidMapping:2161770541,BadRequest_InvalidMappingReference:2161770542,BadRequest_MappingReferenceWasNotFound:2161770543,BadRequest_FormatNotSupported:2161770544,BadRequest_DuplicateMapping:2161770545,BadRequest_CorruptedMessage:2161770546,BadRequest_InconsistentMapping:2161770547,BadRequest_SyntaxError:2161770548,BadRequest_InvalidOrEmptyTableName:2161770549,BadRequest_EmptyDatabaseName:2161770550,BadRequest_EmptyTenantIdentifier:2161770551,BadRequest_EmptyMappingReference:2161770552,BadRequest_EntityNotFound:2161770553,BadRequest_EntityNameIsNotValid:2161770554,General_AbandonedIngestion:2161770555,General_ThrottledIngestion:2161770556,General_TransientSchemaMismatch:2161770557,BadRequest_DatabaseAccessDenied:2161770558,BadRequest_UnexpectedCharacterInInputStream:2161770559,Forbidden:2161770560,BadRequest_ZeroRetentionPolicyWithNoUpdatePolicy:2161770561,BadRequest_CreationTimeEarlierThanSoftDeletePeriod:2161770562,BadRequest_NotSupported:2161770563,Skipped_IngestByTagAlreadyExists:2161770564,Timeout:2148734213,BadRequest_MalformedIngestionProperty:2148734214,BadRequest_IngestionPropertyNotSupportedInThisContext:2148734215,BadRequest_InvalidAuthentication:2148734216,BlobAlreadyReceived_BlobAlreadyFoundInBatch:2148734217,BadRequest_InvalidManagedIdentity:2148734218,BadRequest_DataCapacityLimitReached:2148734219,UpdatePolicy_BadRequest:2148734220,BadRequest_NonMultiDatabaseDataConnection:2148734221,Cancelled:2148734222,AbandonedByConfiguration_StorageAccount:2148734223,AbandonedByConfiguration_DatabaseAndTable:2148734224,BadRequest_TableSchemaModificationUnauthorized:2148734225,BadRequest_DatabaseSchemaModificationUnauthorized:2148734226,BadRequest_StreamingIngestionPolicyNotEnabled:2148734227,BadRequest_StreamingIngestionUpdatePolicyIncompatible:2148734228,NotFound_StreamingIngestionDisabledForCluster:2148734229,Skipped_Adlsv2CreateFileEvent:2148734230}},$utype:System.UInt32}),Bridge.define("Kusto.Data.Common.StorageEngineKind",{$kind:"enum",statics:{fields:{StorageV2:0,StorageV3:1}}}),Bridge.define("Kusto.Data.Common.TransformationMethod",{$kind:"enum",statics:{fields:{None:0,PropertyBagArrayToDictionary:1,SourceLocation:2,SourceLineNumber:3,UnknownMethod1:4,UnknownMethod:5,DateTimeFromUnixSeconds:6,DateTimeFromUnixMilliseconds:7,DateTimeFromUnixMicroseconds:8,DateTimeFromUnixNanoseconds:9,DropMappedFields:10,BytesAsBase64:11}}}),Bridge.define("Kusto.Data.DmSettingsType",{$kind:"enum",statics:{fields:{AdminSettings:0,DataObtainerServiceSettings:1,DataAggregatorSettings:2,DataObtainerSettings:3,CloudManagersSettings:5,SchemaManagmentSettings:6,CommonSettings:7,DataImporterSettings:8,StatusReporterSettings:9,All:10,VirtualDmsSettings:11}}}),Bridge.define("Kusto.Data.ExtendedDmSettingsType",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.DmSettingsType.AdminSettings:return"AdminSettings";case Kusto.Data.DmSettingsType.DataObtainerServiceSettings:return"DataObtainerServiceSettings";case Kusto.Data.DmSettingsType.DataAggregatorSettings:return"DataAggregatorSettings";case Kusto.Data.DmSettingsType.DataObtainerSettings:return"DataObtainerSettings";case Kusto.Data.DmSettingsType.CloudManagersSettings:return"CloudManagersSettings";case Kusto.Data.DmSettingsType.SchemaManagmentSettings:return"SchemaManagmentSettings";case Kusto.Data.DmSettingsType.CommonSettings:return"CommonSettings";case Kusto.Data.DmSettingsType.DataImporterSettings:return"DataImporterSettings";case Kusto.Data.DmSettingsType.StatusReporterSettings:return"StatusReporterSettings";case Kusto.Data.DmSettingsType.All:return"All";case Kusto.Data.DmSettingsType.VirtualDmsSettings:return"VirtualDmsSettings";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.DmSettingsType};return Kusto.Data.ExtendedDmSettingsType.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.DmSettingsType.AdminSettings:return!0;case Kusto.Data.DmSettingsType.DataObtainerServiceSettings:return!0;case Kusto.Data.DmSettingsType.DataAggregatorSettings:return!0;case Kusto.Data.DmSettingsType.DataObtainerSettings:return!0;case Kusto.Data.DmSettingsType.CloudManagersSettings:return!0;case Kusto.Data.DmSettingsType.SchemaManagmentSettings:return!0;case Kusto.Data.DmSettingsType.CommonSettings:return!0;case Kusto.Data.DmSettingsType.DataImporterSettings:return!0;case Kusto.Data.DmSettingsType.StatusReporterSettings:return!0;case Kusto.Data.DmSettingsType.All:return!0;case Kusto.Data.DmSettingsType.VirtualDmsSettings:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.DmSettingsType};if(Kusto.Data.ExtendedDmSettingsType.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"AdminSettings":return t.v=Kusto.Data.DmSettingsType.AdminSettings,!0;case"1":case"DataObtainerServiceSettings":return t.v=Kusto.Data.DmSettingsType.DataObtainerServiceSettings,!0;case"2":case"DataAggregatorSettings":return t.v=Kusto.Data.DmSettingsType.DataAggregatorSettings,!0;case"3":case"DataObtainerSettings":return t.v=Kusto.Data.DmSettingsType.DataObtainerSettings,!0;case"5":case"CloudManagersSettings":return t.v=Kusto.Data.DmSettingsType.CloudManagersSettings,!0;case"6":case"SchemaManagmentSettings":return t.v=Kusto.Data.DmSettingsType.SchemaManagmentSettings,!0;case"7":case"CommonSettings":return t.v=Kusto.Data.DmSettingsType.CommonSettings,!0;case"8":case"DataImporterSettings":return t.v=Kusto.Data.DmSettingsType.DataImporterSettings,!0;case"9":case"StatusReporterSettings":return t.v=Kusto.Data.DmSettingsType.StatusReporterSettings,!0;case"10":case"All":return t.v=Kusto.Data.DmSettingsType.All,!0;case"11":case"VirtualDmsSettings":return t.v=Kusto.Data.DmSettingsType.VirtualDmsSettings,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"adminsettings":return t.v=Kusto.Data.DmSettingsType.AdminSettings,!0;case"dataobtainerservicesettings":return t.v=Kusto.Data.DmSettingsType.DataObtainerServiceSettings,!0;case"dataaggregatorsettings":return t.v=Kusto.Data.DmSettingsType.DataAggregatorSettings,!0;case"dataobtainersettings":return t.v=Kusto.Data.DmSettingsType.DataObtainerSettings,!0;case"cloudmanagerssettings":return t.v=Kusto.Data.DmSettingsType.CloudManagersSettings,!0;case"schemamanagmentsettings":return t.v=Kusto.Data.DmSettingsType.SchemaManagmentSettings,!0;case"commonsettings":return t.v=Kusto.Data.DmSettingsType.CommonSettings,!0;case"dataimportersettings":return t.v=Kusto.Data.DmSettingsType.DataImporterSettings,!0;case"statusreportersettings":return t.v=Kusto.Data.DmSettingsType.StatusReporterSettings,!0;case"all":return t.v=Kusto.Data.DmSettingsType.All,!0;case"virtualdmssettings":return t.v=Kusto.Data.DmSettingsType.VirtualDmsSettings,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.DmSettingsType.AdminSettings:return"";case Kusto.Data.DmSettingsType.DataObtainerServiceSettings:return"";case Kusto.Data.DmSettingsType.DataAggregatorSettings:return"";case Kusto.Data.DmSettingsType.DataObtainerSettings:return"";case Kusto.Data.DmSettingsType.CloudManagersSettings:return"";case Kusto.Data.DmSettingsType.SchemaManagmentSettings:return"";case Kusto.Data.DmSettingsType.CommonSettings:return"";case Kusto.Data.DmSettingsType.DataImporterSettings:return"";case Kusto.Data.DmSettingsType.StatusReporterSettings:return"";case Kusto.Data.DmSettingsType.All:return"";case Kusto.Data.DmSettingsType.VirtualDmsSettings:return"";default:return null}}}}}),Bridge.define("Kusto.Data.ExtendedIngestionQueueType",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.IngestionQueueType.All:return"All";case Kusto.Data.IngestionQueueType.InputQueue:return"InputQueue";case Kusto.Data.IngestionQueueType.InternalQueue:return"InternalQueue";case Kusto.Data.IngestionQueueType.ReadyForAggregationQueue:return"ReadyForAggregationQueue";case Kusto.Data.IngestionQueueType.SecuredReadyForAggregationQueue:return"SecuredReadyForAggregationQueue";case Kusto.Data.IngestionQueueType.AggregatedReadyForImportQueue:return"AggregatedReadyForImportQueue";case Kusto.Data.IngestionQueueType.FailedIngestionsQueue:return"FailedIngestionsQueue";case Kusto.Data.IngestionQueueType.SuccessfulIngestionsQueue:return"SuccessfulIngestionsQueue";case Kusto.Data.IngestionQueueType.AbandonedIngestionsQueue:return"AbandonedIngestionsQueue";case Kusto.Data.IngestionQueueType.SecuredAbandonedIngestionsQueue:return"SecuredAbandonedIngestionsQueue";case Kusto.Data.IngestionQueueType.InternalFailedIngestionsQueue:return"InternalFailedIngestionsQueue";case Kusto.Data.IngestionQueueType.AbandonedInputQueues:return"AbandonedInputQueues";case Kusto.Data.IngestionQueueType.ImporterDeadLetterQueue:return"ImporterDeadLetterQueue";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.IngestionQueueType};return Kusto.Data.ExtendedIngestionQueueType.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.IngestionQueueType.All:return!0;case Kusto.Data.IngestionQueueType.InputQueue:return!0;case Kusto.Data.IngestionQueueType.InternalQueue:return!0;case Kusto.Data.IngestionQueueType.ReadyForAggregationQueue:return!0;case Kusto.Data.IngestionQueueType.SecuredReadyForAggregationQueue:return!0;case Kusto.Data.IngestionQueueType.AggregatedReadyForImportQueue:return!0;case Kusto.Data.IngestionQueueType.FailedIngestionsQueue:return!0;case Kusto.Data.IngestionQueueType.SuccessfulIngestionsQueue:return!0;case Kusto.Data.IngestionQueueType.AbandonedIngestionsQueue:return!0;case Kusto.Data.IngestionQueueType.SecuredAbandonedIngestionsQueue:return!0;case Kusto.Data.IngestionQueueType.InternalFailedIngestionsQueue:return!0;case Kusto.Data.IngestionQueueType.AbandonedInputQueues:return!0;case Kusto.Data.IngestionQueueType.ImporterDeadLetterQueue:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.IngestionQueueType};if(Kusto.Data.ExtendedIngestionQueueType.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"All":return t.v=Kusto.Data.IngestionQueueType.All,!0;case"1":case"InputQueue":return t.v=Kusto.Data.IngestionQueueType.InputQueue,!0;case"2":case"InternalQueue":return t.v=Kusto.Data.IngestionQueueType.InternalQueue,!0;case"3":case"ReadyForAggregationQueue":return t.v=Kusto.Data.IngestionQueueType.ReadyForAggregationQueue,!0;case"4":case"SecuredReadyForAggregationQueue":return t.v=Kusto.Data.IngestionQueueType.SecuredReadyForAggregationQueue,!0;case"5":case"AggregatedReadyForImportQueue":return t.v=Kusto.Data.IngestionQueueType.AggregatedReadyForImportQueue,!0;case"6":case"FailedIngestionsQueue":return t.v=Kusto.Data.IngestionQueueType.FailedIngestionsQueue,!0;case"7":case"SuccessfulIngestionsQueue":return t.v=Kusto.Data.IngestionQueueType.SuccessfulIngestionsQueue,!0;case"9":case"AbandonedIngestionsQueue":return t.v=Kusto.Data.IngestionQueueType.AbandonedIngestionsQueue,!0;case"10":case"SecuredAbandonedIngestionsQueue":return t.v=Kusto.Data.IngestionQueueType.SecuredAbandonedIngestionsQueue,!0;case"11":case"InternalFailedIngestionsQueue":return t.v=Kusto.Data.IngestionQueueType.InternalFailedIngestionsQueue,!0;case"12":case"AbandonedInputQueues":return t.v=Kusto.Data.IngestionQueueType.AbandonedInputQueues,!0;case"13":case"ImporterDeadLetterQueue":return t.v=Kusto.Data.IngestionQueueType.ImporterDeadLetterQueue,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"all":return t.v=Kusto.Data.IngestionQueueType.All,!0;case"inputqueue":return t.v=Kusto.Data.IngestionQueueType.InputQueue,!0;case"internalqueue":return t.v=Kusto.Data.IngestionQueueType.InternalQueue,!0;case"readyforaggregationqueue":return t.v=Kusto.Data.IngestionQueueType.ReadyForAggregationQueue,!0;case"securedreadyforaggregationqueue":return t.v=Kusto.Data.IngestionQueueType.SecuredReadyForAggregationQueue,!0;case"aggregatedreadyforimportqueue":return t.v=Kusto.Data.IngestionQueueType.AggregatedReadyForImportQueue,!0;case"failedingestionsqueue":return t.v=Kusto.Data.IngestionQueueType.FailedIngestionsQueue,!0;case"successfulingestionsqueue":return t.v=Kusto.Data.IngestionQueueType.SuccessfulIngestionsQueue,!0;case"abandonedingestionsqueue":return t.v=Kusto.Data.IngestionQueueType.AbandonedIngestionsQueue,!0;case"securedabandonedingestionsqueue":return t.v=Kusto.Data.IngestionQueueType.SecuredAbandonedIngestionsQueue,!0;case"internalfailedingestionsqueue":return t.v=Kusto.Data.IngestionQueueType.InternalFailedIngestionsQueue,!0;case"abandonedinputqueues":return t.v=Kusto.Data.IngestionQueueType.AbandonedInputQueues,!0;case"importerdeadletterqueue":return t.v=Kusto.Data.IngestionQueueType.ImporterDeadLetterQueue,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.IngestionQueueType.All:return"";case Kusto.Data.IngestionQueueType.InputQueue:return"";case Kusto.Data.IngestionQueueType.InternalQueue:return"";case Kusto.Data.IngestionQueueType.ReadyForAggregationQueue:return"";case Kusto.Data.IngestionQueueType.SecuredReadyForAggregationQueue:return"";case Kusto.Data.IngestionQueueType.AggregatedReadyForImportQueue:return"";case Kusto.Data.IngestionQueueType.FailedIngestionsQueue:return"";case Kusto.Data.IngestionQueueType.SuccessfulIngestionsQueue:return"";case Kusto.Data.IngestionQueueType.AbandonedIngestionsQueue:return"";case Kusto.Data.IngestionQueueType.SecuredAbandonedIngestionsQueue:return"";case Kusto.Data.IngestionQueueType.InternalFailedIngestionsQueue:return"";case Kusto.Data.IngestionQueueType.AbandonedInputQueues:return"";case Kusto.Data.IngestionQueueType.ImporterDeadLetterQueue:return"";default:return null}}}}}),Bridge.define("Kusto.Data.Ingestion.ExtendedIngestionMappingKind",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Ingestion.IngestionMappingKind.Unknown:return"Unknown";case Kusto.Data.Ingestion.IngestionMappingKind.Csv:return"Csv";case Kusto.Data.Ingestion.IngestionMappingKind.Json:return"Json";case Kusto.Data.Ingestion.IngestionMappingKind.Avro:return"Avro";case Kusto.Data.Ingestion.IngestionMappingKind.Parquet:return"Parquet";case Kusto.Data.Ingestion.IngestionMappingKind.SStream:return"SStream";case Kusto.Data.Ingestion.IngestionMappingKind.Orc:return"Orc";case Kusto.Data.Ingestion.IngestionMappingKind.ApacheAvro:return"ApacheAvro";case Kusto.Data.Ingestion.IngestionMappingKind.W3CLogFile:return"W3CLogFile";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Ingestion.IngestionMappingKind};return Kusto.Data.Ingestion.ExtendedIngestionMappingKind.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Ingestion.IngestionMappingKind.Unknown:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.Csv:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.Json:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.Avro:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.Parquet:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.SStream:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.Orc:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.ApacheAvro:return!0;case Kusto.Data.Ingestion.IngestionMappingKind.W3CLogFile:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Ingestion.IngestionMappingKind};if(Kusto.Data.Ingestion.ExtendedIngestionMappingKind.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"Unknown":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Unknown,!0;case"1":case"Csv":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Csv,!0;case"2":case"Json":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Json,!0;case"4":case"Avro":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Avro,!0;case"5":case"Parquet":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Parquet,!0;case"6":case"SStream":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.SStream,!0;case"7":case"Orc":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Orc,!0;case"8":case"ApacheAvro":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.ApacheAvro,!0;case"9":case"W3CLogFile":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.W3CLogFile,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"unknown":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Unknown,!0;case"csv":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Csv,!0;case"json":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Json,!0;case"avro":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Avro,!0;case"parquet":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Parquet,!0;case"sstream":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.SStream,!0;case"orc":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.Orc,!0;case"apacheavro":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.ApacheAvro,!0;case"w3clogfile":return t.v=Kusto.Data.Ingestion.IngestionMappingKind.W3CLogFile,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Ingestion.IngestionMappingKind.Unknown:return"Unknown";case Kusto.Data.Ingestion.IngestionMappingKind.Csv:return"Csv";case Kusto.Data.Ingestion.IngestionMappingKind.Json:return"Json";case Kusto.Data.Ingestion.IngestionMappingKind.Avro:return"Avro";case Kusto.Data.Ingestion.IngestionMappingKind.Parquet:return"Parquet";case Kusto.Data.Ingestion.IngestionMappingKind.SStream:return"SStream";case Kusto.Data.Ingestion.IngestionMappingKind.Orc:return"Orc";case Kusto.Data.Ingestion.IngestionMappingKind.ApacheAvro:return"Apache Avro (through avro2json)";case Kusto.Data.Ingestion.IngestionMappingKind.W3CLogFile:return"W3C Extended Log File format";default:return null}}}}}),Bridge.define("Kusto.Data.Ingestion.IngestionMappingKind",{$kind:"enum",statics:{fields:{Unknown:0,Csv:1,Json:2,Avro:4,Parquet:5,SStream:6,Orc:7,ApacheAvro:8,W3CLogFile:9}}}),Bridge.define("Kusto.Data.IngestionQueueType",{$kind:"enum",statics:{fields:{All:0,InputQueue:1,InternalQueue:2,ReadyForAggregationQueue:3,SecuredReadyForAggregationQueue:4,AggregatedReadyForImportQueue:5,FailedIngestionsQueue:6,SuccessfulIngestionsQueue:7,AbandonedIngestionsQueue:9,SecuredAbandonedIngestionsQueue:10,InternalFailedIngestionsQueue:11,AbandonedInputQueues:12,ImporterDeadLetterQueue:13}}}),Bridge.define("Kusto.Data.IntelliSense.AdminEngineRuleKind",{$kind:"enum",statics:{fields:{None:0,Start:0,YieldShowCommandOptions:0,YieldTableNamesForAdminOptions:1,YieldFunctionNamesForAdminOptions:2,YieldDatabaseNames:3,YieldShowBasicAuthOptions:4,YieldShowDatabasePrincipalsPoliciesAndSchemaOptions:5,YieldShowDatabasesOptions:6,YieldShowClusterPrincipalsOptions:7,YieldSetDatabaseAdminsUsersViewersPrettyNameOptions:8,YieldSetClusterAdminsUsersViewersDatabaseCreatorsOptions:9,YieldSetTableAdminsOptions:10,YieldAddDatabaseAdminsUsersViewersOptions:11,YieldDropDatabaseOptions:12,YieldAddClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsOptions:13,YieldDropClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsOptions:14,YieldAddClusterBlockedPrincipalsOptions:15,YieldAddTableAdminsOptions:16,YieldDropTableEntitiesOptions:17,YieldDeleteTableEntitiesOptions:18,YieldCreateTableEntitiesOptions:19,YieldAlterTableEntitiesOptions:20,YieldDropTableColumnsSyntaxOptions:21,YieldSetDatabaseUsersNoneOptions:22,YieldSetDatabaseAdminsNoneOptions:23,YieldSetDatabaseViewersNoneOptions:24,YieldSetClusterUsersNoneOptions:25,YieldSetClusterAdminsNoneOptions:26,YieldSetClusterViewersNoneOptions:27,YieldSetClusterDatabaseCreatorsNoneOptions:28,YieldSetTableAdminsNoneOptions:29,YieldShowTableEntitiesOptions:30,YieldAlterExtentTagsOptions:31,YieldAttachExtentsOptions:32,YieldAttachExtentsIntoTableOptions:33,YieldDropExtentTagsOptions:34,YieldMoveExtentsOptions:35,YieldMoveSpecifiedExtentsOptions:36,YieldMoveExtentsToTableOptions:37,YieldReplaceCommandOptions:38,YieldReplaceExtentsOptions:39,YieldRunCommandOptions:40,YieldShowExtentsOptions:41,YieldShowExtentsByEntityOptions:42,YieldShowExtentsByEntityWithTagsFiltersOptions:43,YieldSetCommandOptions:44,YieldSetOrAppendCommandOptions:45,YieldAddCommandOptions:46,YieldAttachCommandOptions:47,YieldDropCommandOptions:48,YieldMoveCommandOptions:49,YieldPoliciesOptions:50,YieldClusterPoliciesOptions:51,YieldDatabasePoliciesOptions:52,YieldTablePoliciesOptions:53,YieldColumnPoliciesOptions:54,YieldAlterCommandOptions:55,YieldAlterMergeCommandOptions:56,YieldDeleteCommandOptions:57,YieldCreateCommandOptions:58,YieldMultiplePoliciesOptions:59,YieldDatabaseCreatePersistencyOptions:60,YieldCreateIfNotExistsOptions:61,YieldAdminCommandsOptions:62,YieldExportCommandOptions:63,YieldExportCommandWithModifiersAndOptions:64,YieldExportCommandNoModifiersAndOptions:65,YieldAlterDatabaseCommandOptions:66,YieldDeleteMultiplePoliciesOptions:67,YieldIngestionDuplicationOptions:68,YieldPurgeOptions:69,YieldPurgeCleanupOptions:70,YieldPurgeWhatIfOptions:71,YieldPurgeWithPropertiesOptions:72,YieldPurgeTableOptions:73,YieldShowPrincipalCommandOptions:74,YieldAlterFunctionEntitiesOptions:75,YieldAlterMergePolicyRetentionOptions:76,YieldAlterMergePolicyRetentionSoftDeleteDefinedOptions:77,YieldAlterTimeSpanPolicyOptions:78,YieldCreateOrAlterOptions:79,YieldShowFabricOptions:80,YieldRowStoreCreatePersistencyOptions:81,YieldSetDatabaseIngestorsNoneOptions:82,YieldSetTableIngestorsNoneOptions:83,YieldSuspendNodeControlCommandOptions:84},ctors:{init:function(){this.None=Kusto.Data.IntelliSense.RuleKind.None,this.Start=Kusto.Data.IntelliSense.RuleKind.Last}}}}),Bridge.define("Kusto.Data.IntelliSense.AnalyzedCommand",{fields:{Command:null,Context:null}}),Bridge.define("Kusto.Data.IntelliSense.ApiKind",{$kind:"enum",statics:{fields:{Query:0,AdminSyncCommand:1,AdminAsyncCommand:2}}}),Bridge.define("Kusto.Data.IntelliSense.ApplyPolicy",{statics:{fields:{NullApplyPolicy:null,AppendSpacePolicy:null,AppendPipePolicy:null,AppendStringLiteralArrayPolicy:null,StringComparisonPolicy:null,AppendCommaPolicy:null,AppendDoubleCommaPolicy:null,AppendSpaceStepBackPolicy:null,AppendSpaceAfterBracketPolicy:null,MoveAfterTheBracketPolicy:null,AppendAssignmentPolicy:null,AppendJoinClauseWithOpenningBracketPolicy:null,AppendJoinClauseWithoutOpenningBracketPolicy:null,AppendFindInClausePolicy:null,AppendSearchInClausePolicy:null,AppendFindInClauseWithoutOpenningBracketPolicy:null},ctors:{init:function(){var e;this.NullApplyPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text="",e),this.AppendSpacePolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=" ",e),this.AppendPipePolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=" | ",e),this.AppendStringLiteralArrayPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=' ("", "")',e.OffsetPosition=2,e.OffsetToken="(",e),this.StringComparisonPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=' "" ',e.OffsetPosition=-2,e),this.AppendCommaPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=", ",e.OffsetPosition=0,e),this.AppendDoubleCommaPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=", , ",e.OffsetPosition=-2,e),this.AppendSpaceStepBackPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=" ",e.OffsetPosition=-2,e),this.AppendSpaceAfterBracketPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=" ",e.OffsetToken="(",e.OffsetPosition=1,e),this.MoveAfterTheBracketPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text="",e.OffsetToken=")",e.OffsetPosition=1,e),this.AppendAssignmentPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.Text=" = ",e),this.AppendJoinClauseWithOpenningBracketPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.OffsetPosition=-13,e.Text=` (\r \r ) on Key1 `,e),this.AppendJoinClauseWithoutOpenningBracketPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.OffsetPosition=-13,e.Text=`\r \r ) on Key1 `,e),this.AppendFindInClausePolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.OffsetPosition=-8,e.Text=" () where ",e),this.AppendSearchInClausePolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.OffsetPosition=-2,e.Text=" () ",e),this.AppendFindInClauseWithoutOpenningBracketPolicy=(e=new Kusto.Data.IntelliSense.ApplyPolicy,e.OffsetPosition=-8,e.Text=") where ",e)}}},props:{Text:null,OffsetPosition:0,OffsetToken:null},ctors:{ctor:function(){this.$initialize()}}}),Bridge.define("Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase",{statics:{fields:{CommonRegexOptions:0,DefaultRegexOptions:0,s_isCommandRegex:null,s_firstWordAfterPipeRegex:null},ctors:{init:function(){this.CommonRegexOptions=16,this.DefaultRegexOptions=0,this.s_isCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_firstWordAfterPipeRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*(?<FirstWord>[\\w\\-]+)\\s+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions)}},methods:{FindRules:function(e,t,n,r,s){var a,i,l;a=Bridge.getEnumerator(e);try{for(;a.moveNext();)if(i=a.Current,(i.RequiredKeywords==null||!(i.RequiredKeywords.Count>0)||(l=!1,l=i.RequiresFullCommand?System.Linq.Enumerable.from(i.RequiredKeywords,System.String).any(function(o){return System.String.contains(t,o)}):!System.String.isNullOrEmpty(s)&&i.RequiredKeywords.contains(s),l))&&i.IsMatch(n,i.RequiresFullCommand?t:r))return i}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}return null},FindLastStatement:function(e){return System.String.isNullOrEmpty(e)?"":System.Linq.Enumerable.from(Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ParseAsStatements(e,59,!1),System.String).lastOrDefault(null,null)},ParseAsStatements:function(e,t,n){var r=new(System.Collections.Generic.List$1(System.String)).ctor,s,a,i,l,o,d;if(System.String.isNullOrEmpty(e))return r;for(s=0,a=System.String.toCharArray(e,0,e.length),i=0;i<a.length;i=i+1|0)l=a[System.Array.index(i,a)],!(l===34|l===39)||(i=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.SkipToBalancedChar(a,i+1|0,l,System.Array.init([34,39],System.Char))),o=i===(a.length-1|0),(l===t||o)&&(d=(i-s|0)+1|0,n&&l===t&&(d=d-1|0),d>0&&r.add(e.substr(s,d)),s=i+1|0);return r},SkipToBalancedChar:function(e,t,n,r){for(var s,a=t;a<e.length;a=a+1|0){if(s=e[System.Array.index(a,e)],s===n)return a;System.Array.contains(r,s,System.Char)&&(a=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.SkipToBalancedChar(e,a+1|0,s,r))}return e.length-1|0},GetApproximateCommandLastPart:function(e,t,n){var r=System.String.split(e,[124].map(function(a){return String.fromCharCode(a)})),s=System.Linq.Enumerable.from(r,System.String).lastOrDefault(null,null);if(t.v=s,r.length>1&&(t.v="|"+(s||"")),System.String.isNullOrEmpty(s)){n.v="";return}n.v=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.GetFirstWordAfterPipe(s)},GetFirstWordAfterPipe:function(e){var t=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.s_firstWordAfterPipeRegex.match(e);return t.getGroups().getByName("FirstWord").toString()}}},props:{Locker:null,GeneralRules:null,CommandRules:null,QueryParametersRules:null,DefaultRule:null,CommandToolTips:null,ContextConnection:null},ctors:{ctor:function(){this.$initialize(),this.Locker={}}},methods:{TryMatchAnyRule:function(e,t){var n,r,s=this.AnalyzeCommand$1(e,null),a=s.Context,i={},l={},o,d,m;if(Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.GetApproximateCommandLastPart(s.Command,l,i),o=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.s_isCommandRegex.isMatch(e),t.v=null,o){Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer.Tracer.TraceVerbose("TryMatchAnyRule: start matching rules for commands rules"),n=Bridge.getEnumerator(this.CommandRules);try{for(;n.moveNext();)if(d=n.Current,d.IsMatch(a,d.RequiresFullCommand?e:l.v)){t.v=d;break}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}}if(t.v==null&&(Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer.Tracer.TraceVerbose("TryMatchAnyRule: start matching rules for general rules"),t.v=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.FindRules(this.GeneralRules,e,a,l.v,i.v)),t.v==null){Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer.Tracer.TraceVerbose("TryMatchAnyRule: start matching rules for query parameters rules"),r=Bridge.getEnumerator(this.QueryParametersRules);try{for(;r.moveNext();)if(m=r.Current,m.IsMatch(a,m.RequiresFullCommand?e:l.v)){t.v=m;break}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}}return t.v!=null&&t.v.IsContextual?(Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer.Tracer.TraceVerbose("TryMatchAnyRule: rule {0} was found",[Bridge.box(t.v.Kind,System.Int32)]),this.UpdateProviderAvailableEntities(e,a),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer.Tracer.TraceVerbose("TryMatchAnyRule: Entities were updated",[Bridge.box(t.v.Kind,System.Int32)])):Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer.Tracer.TraceVerbose("TryMatchAnyRule: no rule was found"),t.v!=null},TryMatchSpecificRule:function(e,t,n,r){r.v=null;var s=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.s_isCommandRegex.isMatch(e);return s&&(r.v=System.Linq.Enumerable.from(this.CommandRules,Kusto.Data.IntelliSense.IntelliSenseRule).firstOrDefault(function(a){return a.Kind===n&&a.IsMatch(t,e)},null)),r.v==null&&(r.v=System.Linq.Enumerable.from(this.GeneralRules,Kusto.Data.IntelliSense.IntelliSenseRule).firstOrDefault(function(a){return a.Kind===n&&a.IsMatch(t,e)},null)),r.v!=null&&r.v.IsContextual&&this.UpdateProviderAvailableEntities(e,t),r.v!=null},SetQueryParametersRule:function(e){},Initialize:function(){this.CommandRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.GeneralRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.CommandToolTips=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTip)).ctor,this.QueryParametersRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor}}}),Bridge.define("Kusto.Data.IntelliSense.CMRuleKind",{$kind:"enum",statics:{fields:{None:0,Start:0,YieldServiceCancelMaintenance:0,YieldServiceMoveToMaintenance:1,YieldShowRegionsByHosters:2,YieldShowTridentCmServices:3,YieldAdminCommandsOptions:4,YieldPipeOptions:5,YieldOperatorsAfterPipe:6,YieldShowCommandOptions:7,YieldsAllocateVirtualClusterOptions:8,YieldShowFabricCommandOptions:9,YieldShowAccountCommandOptions:10,YieldShowAccountsKeywordOptions:11,YieldMoveAccountCommandOptions:12,YieldMoveAccountSubscriptionCommandOptions:13,YieldMoveCommandOptions:14,YieldMigrateCommandOptions:15,YieldAlterCommandOptions:16,YieldAddCommandOptions:17,YieldDropCommandOptions:18,YieldRemoveCommandOptions:19,YieldCreateCommandOptions:20,YieldCreateExternalCommandOptions:21,YieldDeleteCommandOptions:22,YieldDetachCommandOptions:23,YieldCheckCommandOptions:24,YieldSetCommandOptions:25,YieldRegisterCommandOptions:26,YieldPutCommandOptions:27,YieldListCommandOptions:28,YieldListKustoPoolsServicesCommandPropertiesSuffix:29,YieldSyncCommandOptions:30,YieldServiceKeywordOptions:31,YieldServiceOrClusterKeywordOptions:32,YieldStorageAccountsKeywordOptions:33,YieldIngestLogsIntoKeywordsOptions:34,YieldInServiceKeywordOptions:35,YieldShowClusterKeywordOptions:36,YieldOperationsKeywordOptions:37,YieldOrchestrationKeywordOptions:38,YieldOrchestrationTaskHubKeywordOptions:39,YieldPcCodeKeywordOptions:40,YieldsAlterServiceConfigurationKeywordOptions:41,YieldFromAccountKeywordOptions:42,YieldShowAuditLogCommandOptions:43,YieldShowAuditLogFromCommandOptions:44,YieldShowCmServiceCommandOptions:45,YieldShowClusterClientOptions:46,YieldShowClusterClientSubscriptionCommandOptions:47,YieldShowClusterClusterNamePrincipalCommandOptions:48,YieldShowServicesCompletionKeywordsOptions:49,YieldConfigurationPropertySetKeywordOptions:50,YieldConfigurationPropertyDropKeywordOptions:51,YieldToStringKeywordOptions:52,YieldToKeywordOptions:53,YieldConfigurationPropertyWithConsentKeywordOptions:54,YieldAccountAlterOperationsKeywordOptions:55,YieldAccountAddOperationsKeywordOptions:56,YieldAccountRemoveOperationsKeywordOptions:57,YieldAccountSetOperationsKeywordOptions:58,YieldAccountRenameOperationsKeywordOptions:59,YieldServiceAlterOperationsKeywordOptions:60,YieldMetadataKeywordOptions:61,YieldSummaryKeywordOptions:62,YieldSummaryOrMetadataKeywordOptions:63,YieldDatabaseOrAccountMetadataKeywordOptions:64,YieldAccountNames:65,YieldDmServiceAddKeywordOptions:66,YieldDmServiceDropKeywordOptions:67,YieldDmServiceAlterKeywordOptions:68,YieldDmServiceAlterSettingsOptions:69,YieldDmServiceShowKeywordOptions:70,YieldServicesNames:71,YieldTridentClusterUpdate:72,YieldServicesNamesCombinedWithOptions:73,YieldTargetServiceOptions:74,YieldWithPropertiesSuffix:75,YieldWithEventHubPropertiesSuffix:76,YieldWithCosmosDbDataConnectionPropertiesSuffix:77,YieldInstallCommandOptions:78,YieldReinstallCommandOptions:79,YieldUninstallServiceCommandOptions:80,YieldUninstallCommandOptions:81,YieldUpdateCommandOptions:82,YieldServiceUpdateCommandOptions:83,YieldCheckinCommandOptions:84,YieldMigrateServiceCommandOptions:85,YieldMigrateClusterCommandOptions:86,YieldFromServiceKeywordOptions:87,YieldDatabaseMoveFromServiceCommandOptions:88,YieldSetClusterPrincipalsCommandOptions:89,YieldAddClusterPrincipalsCommandOptions:90,YieldDropClusterPrincipalsCommandOptions:91,YieldAddClusterJitPrincipalsCommandOptions:92,YieldDropClusterJitPrincipalsCommandOptions:93,YieldSetClusterPrincipalsNoneOptions:94,YieldDropAccountPrincipalsCommandOptions:95,YieldDatabaseCreateCommandOptions:96,YieldServiceCreateCommandOptions:97,YieldShowPrincipalRolesCommandOptions:98,YieldAddKeywordOptions:99,YieldAlterServiceConfigurationPropertiesOptions:100,YieldAlterServiceConfigurationCommandOptions:101,YieldMoveServiceConfigurationCommandOptions:102,YieldAddServiceServiceNameOptions:103,YieldLoadBalancerKeywordOptions:104,YieldOperationKeywordOptions:105,YieldShowSubscriptionCommandOptions:106,YieldShowServiceSecurityRulesCommandOptions:107,YieldKeysCommandOptions:108,YieldKeyTypesCommandOptions:109,YieldAlterServiceStorageAccountsCommandOptions:110,YieldCmNotifyCommandOptions:111,YieldExecuteCommandOptions:112,YieldExecuteJobCommandOptions:113,YieldGenerateCommandOptions:114,YieldPublishCommandOptions:115,YieldSkuAvailabilityPrefix:116,YieldSkuAvailabilityCommandValues:117,YieldSkuAvailabilityPropertiesSuffix:118,YieldServiceRegenerateSuffix:119,YieldVersionKeywordOptions:120,YieldExportCommandOptions:121,YieldExportPackageForOptions:122,YieldExportPackageForServiceTypeOptions:123,YieldSharedIdentity:124,YieldSetRegionVisibility:125,YieldRegisterFeature:126,YieldBillingServiceCreateResources:127,YieldPublishServiceCommandOptions:128,YieldResultsKeywordOptions:129,YieldUnPublishCommandOptions:130,YieldUnPublishServiceCommandOptions:131,YieldRotateCommandOptions:132,YieldRotateServiceCommandOptions:133,YieldCreateFollowerDatabaseInServiceCommandOptions:134,YieldColumnNamesAfterPipeCommandOptions:135,YieldPutClientSubscriptionsNotification:136,YieldDatabaseKeywordOptions:137,YieldSyncKustoPoolRbacCommandOptions:138,YieldTridentServiceShowByResourceId:139,YieldSyncKeyVaultCertificate:140,YieldRegionKeyVaultRotateCertificate:141,YieldShowResourceCommandOptions:142,YieldShowResourceMetricsCommandPropertiesSuffix:143,YieldWithUnallocatedVirtualClustersPoolScaleSuffix:144,YieldShowAzureMonitorManifestCommandPropertiesSuffix:145,YieldPublishAzureMonitorManifestCommandPropertiesSuffix:146,YieldCheckinAzureMonitorManifestCommandPropertiesSuffix:147,YieldMigrateVirtualClusterCommandOptions:148,YieldMigrateVirtualClusterEventHubStorageAccountCommandOptions:149,YieldScaleTridentClusterCommandSuffix:150,YieldAlterVirtualClusterLimitsLevelCommandOptions:151,YieldProbePoolKeywordOptions:152},ctors:{init:function(){this.None=Kusto.Data.IntelliSense.RuleKind.None,this.Start=Kusto.Data.IntelliSense.RuleKind.Last}}}}),Bridge.define("Kusto.Data.IntelliSense.CompletionOption",{props:{Kind:0,Value:null},ctors:{ctor:function(e,t){this.$initialize(),this.Kind=e,this.Value=t}}}),Bridge.define("Kusto.Data.IntelliSense.CompletionOptionCollection",{fields:{m_materializedOptions:null},props:{Kind:0,Values:null,Priority:0},ctors:{ctor:function(e,t,n){n===void 0&&(n=0),this.$initialize(),this.Kind=e,this.Values=t,this.Priority=n}},methods:{GetCompletionOptions:function(){return this.m_materializedOptions==null&&(this.m_materializedOptions=System.Linq.Enumerable.from(this.Values,System.String).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.CompletionOptionCollection.f1)).ToArray(Kusto.Data.IntelliSense.CompletionOption)),this.m_materializedOptions}}}),Bridge.ns("Kusto.Data.IntelliSense.CompletionOptionCollection",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CompletionOptionCollection,{f1:function(e){return new Kusto.Data.IntelliSense.CompletionOption(this.Kind,e)}}),Bridge.define("Kusto.Data.IntelliSense.ContextOperation",{$kind:"enum",statics:{fields:{None:0,Union:1,Intersect:2}}}),Bridge.define("Kusto.Data.IntelliSense.IntelliSenseRule",{props:{Kind:0,RequiredKeywords:null,AfterApplyPolicies:null,BeforeApplyPolicies:null,DefaultAfterApplyPolicy:null,DefaultBeforeApplyPolicy:null},methods:{GetAfterApplyInfo:function(e){var t={v:null};return this.AfterApplyPolicies!=null&&this.AfterApplyPolicies.tryGetValue(e,t),t.v||this.DefaultAfterApplyPolicy||Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy},GetBeforeApplyInfo:function(e){var t={v:null};return this.BeforeApplyPolicies!=null&&this.BeforeApplyPolicies.tryGetValue(e,t),t.v||this.DefaultBeforeApplyPolicy||Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommand",{statics:{fields:{c_tabulation:null,s_newLineRegex:null,s_removeWhiteSpacesAfterPipeRegex:null,s_joinStartRegex:null,s_joinEndRegex:null,s_makeSeriesOperatorRegex:null,s_operatorRegex:null,s_operatorsNotRequiringFullEntitiesResolve:null,s_nameOrListRegex:null,s_hasAssignmentOperationRegex:null,s_startsWithAlpha:null},ctors:{init:function(){this.c_tabulation=" ",this.s_newLineRegex=new System.Text.RegularExpressions.Regex.ctor("[\\n\\r]",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeWhiteSpacesAfterPipeRegex=new System.Text.RegularExpressions.Regex.ctor("^\\|\\s+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_joinStartRegex=new System.Text.RegularExpressions.Regex.ctor("(?<JoinOpPart>^\\s*\\|\\s*join\\s+(kind\\s*=\\s*\\w+\\s*)?)(?<Bracket>\\()?(?<PostJoinPart>.+$)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_joinEndRegex=new System.Text.RegularExpressions.Regex.ctor("(?!^.*\\bmake-series\\b.*$)((?<InnerJoinPart>^.*?)(?<Bracket>\\)?)\\s*\\b(?<JoinOnPart>on\\s+.+))",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesOperatorRegex=new System.Text.RegularExpressions.Regex.ctor("\\bmake-series\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_operatorRegex=new System.Text.RegularExpressions.Regex.ctor("\\|\\s*(?<Operator>[\\w-]+)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_operatorsNotRequiringFullEntitiesResolve=u.$.Kusto.Data.IntelliSense.CslCommand.f1(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_nameOrListRegex="(?:\\w+)|(?:\\((\\w+)(,\\s*\\w+)*\\))",this.s_hasAssignmentOperationRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*\\|\\s*(extend|parse|summarize|project|mvexpand|mv-expand|make-series|project-rename)\\s+"+(Kusto.Data.IntelliSense.CslCommand.s_nameOrListRegex||"")+")|(^\\s*range)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_startsWithAlpha=new System.Text.RegularExpressions.Regex.ctor("^\\s*[a-z]",1)}},methods:{MakeTrivialCommandFromText:function(e){var t,n;return t=new Kusto.Data.IntelliSense.CslCommand,t.m_commandParts=(n=Kusto.Data.IntelliSense.CslCommandToken,System.Linq.Enumerable.from(System.Array.init([new Kusto.Data.IntelliSense.CslCommandToken(e,0,Kusto.Data.IntelliSense.CslCommandToken.Kind.CslCommandToken)],Kusto.Data.IntelliSense.CslCommandToken),n).toList(n)),t.Text=e,t.Length=e.length,t.AbsolutePositionBias=0,t.RelativeStart=0,t.ParseMode=Kusto.Data.IntelliSense.ParseMode.CommandTokensOnly,t.IsRunnable=!System.String.isNullOrWhiteSpace(e),t},UnionCommands:function(e){var t,n,r;return System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).count()<2?System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).firstOrDefault(null,null):(n=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).first(),r=(t=new Kusto.Data.IntelliSense.CslCommand,t.m_tokens=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.Data.IntelliSense.CslCommand.f2).toList(Kusto.Data.IntelliSense.CslCommandToken),t.m_commandParts=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.Data.IntelliSense.CslCommand.f3).toList(Kusto.Data.IntelliSense.CslCommandToken),t.m_commentsParts=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.Data.IntelliSense.CslCommand.f4).toList(Kusto.Data.IntelliSense.CslCommandToken),t.m_clientDirectivesParts=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.Data.IntelliSense.CslCommand.f5).toList(Kusto.Data.IntelliSense.CslCommandToken),t.m_bracketParts=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.Data.IntelliSense.CslCommand.f6).toList(Kusto.Data.IntelliSense.CslCommandToken),t.Text=Bridge.toArray(System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.Data.IntelliSense.CslCommand.f7)).join(""),t.IsRunnable=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommand).any(u.$.Kusto.Data.IntelliSense.CslCommand.f8),t.RelativeStart=n.RelativeStart,t.AbsolutePositionBias=n.AbsolutePositionBias,t.ParseMode=n.ParseMode,t),r.Length=r.Text.length,r)},NormalizeCommandPart:function(e){return e=e.trim(),Kusto.Data.IntelliSense.CslCommand.s_removeWhiteSpacesAfterPipeRegex.replace(e,"| ")},AppendTabulatedText:function(e,t,n){Kusto.Data.IntelliSense.CslCommand.AppendTabulations(e,t),e.append(n)},AppendTabulations:function(e,t){if(!(t<=0))for(var n=0;n<t;n=n+1|0)e.append(Kusto.Data.IntelliSense.CslCommand.c_tabulation)},ResolveOperatorContext:function(e){return e==null||System.String.indexOf(e.Text," on ")>0&&!Kusto.Data.IntelliSense.CslCommand.s_makeSeriesOperatorRegex.isMatch(e.Text)?"":Kusto.Data.IntelliSense.CslCommand.s_operatorRegex.match(e.Text).getGroups().getByName("Operator").toString()},GetKnownEntities:function(e,t,n,r,s,a,i,l,o){if(l.v=new(System.Collections.Generic.List$1(System.String)).ctor,o.v=n.containsKey(a)?n.getItem(a):new(System.Collections.Generic.List$1(System.String)).ctor,r==null||Kusto.Data.IntelliSense.CslCommand.s_operatorsNotRequiringFullEntitiesResolve.contains(i))return t.containsKey(a)&&(l.v=t.getItem(a)),!1;var d=s.toString();return e.GetKnownEntities(d,a,n,l,o)},IsMatchingRegex:function(e,t){return System.String.isNullOrWhiteSpace(e)?!1:t.isMatch(e)},StartsWithAlpha:function(e){return System.String.isNullOrWhiteSpace(e)?!1:Kusto.Data.IntelliSense.CslCommand.s_startsWithAlpha.isMatch(e)}}},fields:{m_tokens:null,m_commandParts:null,m_commentsParts:null,m_clientDirectivesParts:null,m_bracketParts:null,m_commandPartsParseStates:null},props:{CslExpressionStartPosition:{get:function(){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(Kusto.Data.IntelliSense.CslCommandToken,this.m_commandParts)?0:this.m_commandParts.getItem(0).RelativeStart}},CslExpressionLength:{get:function(){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(Kusto.Data.IntelliSense.CslCommandToken,this.m_commandParts)?0:System.Linq.Enumerable.from(this.m_commandParts,Kusto.Data.IntelliSense.CslCommandToken).last().RelativeEnd-this.m_commandParts.getItem(0).RelativeStart|0}},Tokens:{get:function(){return this.m_tokens}},CommandParts:{get:function(){return this.m_commandParts}},CommentParts:{get:function(){return this.m_commentsParts}},BracketParts:{get:function(){return this.m_bracketParts}},AllParts:{get:function(){var e=0,t=null;return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.CslCommandToken,this.m_commandParts)&&(e=e+1|0,t=this.m_commandParts),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.CslCommandToken,this.m_commentsParts)&&(e=e+1|0,t=t!=null?System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.CslCommandToken).union(this.m_commentsParts):Bridge.cast(this.m_commentsParts,System.Collections.Generic.IEnumerable$1(Kusto.Data.IntelliSense.CslCommandToken))),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.CslCommandToken,this.m_clientDirectivesParts)&&(e=e+1|0,t=t!=null?System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.CslCommandToken).union(this.m_clientDirectivesParts):Bridge.cast(this.m_clientDirectivesParts,System.Collections.Generic.IEnumerable$1(Kusto.Data.IntelliSense.CslCommandToken))),e>1?System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.CslCommandToken).orderBy(u.$.Kusto.Data.IntelliSense.CslCommand.f9):t}},Text:null,RelativeStart:0,Length:0,RelativeEnd:{get:function(){return(this.RelativeStart+this.Length|0)-1|0}},AbsoluteStart:{get:function(){return this.AbsolutePositionBias+this.RelativeStart|0}},AbsoluteEnd:{get:function(){return this.AbsolutePositionBias+this.RelativeEnd|0}},AbsolutePositionBias:0,IsRunnable:!1,ParseMode:0,ContextCache:null},ctors:{ctor:function(){this.$initialize()}},methods:{FormatAsString:function(e,t){var n,r,s,a,i;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(Kusto.Data.IntelliSense.CslCommandToken,this.m_commandParts))return"";r=this.m_commandParts,System.Enum.hasFlag(t,Bridge.box(Kusto.Data.IntelliSense.CslCommand.FormatTraits.IncludeComments,Kusto.Data.IntelliSense.CslCommand.FormatTraits,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommand.FormatTraits)))&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.CslCommandToken,this.m_commentsParts)&&(r=System.Linq.Enumerable.from(r,Kusto.Data.IntelliSense.CslCommandToken).union(this.m_commentsParts).union(this.m_clientDirectivesParts).orderBy(u.$.Kusto.Data.IntelliSense.CslCommand.f10).toList(Kusto.Data.IntelliSense.CslCommandToken));var l=new System.Text.StringBuilder,o={v:0},d=!0;n=Bridge.getEnumerator(r);try{for(;n.moveNext();)s=n.Current,a=Kusto.Data.IntelliSense.CslCommand.s_newLineRegex.replace(s.Value," "),d||l.append(e),d=!1,Kusto.Data.IntelliSense.CslCommand.AppendTabulations(l,o.v),i=!1,!i&&System.Enum.hasFlag(t,Bridge.box(Kusto.Data.IntelliSense.CslCommand.FormatTraits.IncludeComments,Kusto.Data.IntelliSense.CslCommand.FormatTraits,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommand.FormatTraits)))&&(i=this.HandleCommentsAndClientDirectives(e,l,o,s,a)),!i&&System.Enum.hasFlag(t,Bridge.box(Kusto.Data.IntelliSense.CslCommand.FormatTraits.TabulateOnFunctionBoundaries,Kusto.Data.IntelliSense.CslCommand.FormatTraits,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommand.FormatTraits)))&&(i=this.HandleFunctions(e,l,o,s)),!i&&System.Enum.hasFlag(t,Bridge.box(Kusto.Data.IntelliSense.CslCommand.FormatTraits.TabulateOnJoins,Kusto.Data.IntelliSense.CslCommand.FormatTraits,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommand.FormatTraits)))&&(i=this.HandleJoins(e,l,o,s,a)),i||l.append(Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(a))}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return l.toString()},HandleCommentsAndClientDirectives:function(e,t,n,r,s){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.None$1(Kusto.Data.IntelliSense.CslCommandToken,System.Linq.Enumerable.from(this.m_commentsParts,Kusto.Data.IntelliSense.CslCommandToken).union(this.m_clientDirectivesParts),function(a){return a.AbsoluteStart===r.AbsoluteStart&&a.AbsoluteEnd===r.AbsoluteEnd})?!1:(t.append(s.trim()),!0)},HandleFunctions:function(e,t,n,r){var s=!1,a=0,i=System.String.indexOf(r.Value,String.fromCharCode(123)),l=r.AbsoluteStart+i|0,o,d,m,c,p,h;return i>=0&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.None$1(Kusto.Data.IntelliSense.CslCommandToken,this.m_tokens,function(g){return l>=g.AbsoluteStart&&l<=g.AbsoluteEnd})&&(o=r.Value.substr(0,i).trim(),o=Kusto.Data.IntelliSense.CslCommand.s_newLineRegex.replace(o," "),t.append(o),t.append(e),t.append("{"),t.append(e),n.v=n.v+1|0,s=!0,a=i+1|0),d=System.String.indexOf(r.Value,String.fromCharCode(125)),m=r.AbsoluteStart+d|0,d>=0&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.None$1(Kusto.Data.IntelliSense.CslCommandToken,this.m_tokens,function(g){return m>=g.AbsoluteStart&&m<=g.AbsoluteEnd})&&i<d?(c=r.Value.substr(a,d-a|0).trim(),p=r.Value.substr(d+1|0).trim(),p=Kusto.Data.IntelliSense.CslCommand.s_newLineRegex.replace(p," "),s&&Kusto.Data.IntelliSense.CslCommand.AppendTabulations(t,n.v),t.append(c),t.append(e),t.append("}"),n.v=n.v-1|0,n.v<0&&(n.v=0),Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v,p),s=!0):s&&(h=r.Value.substr(a).trim(),h=Kusto.Data.IntelliSense.CslCommand.s_newLineRegex.replace(h," "),Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v,h)),s},HandleJoins:function(e,t,n,r,s){var a=!1,i=!1,l=s,o=Kusto.Data.IntelliSense.CslCommand.s_joinStartRegex.match(l),d=0,m,c,p,h;if(o.getSuccess()&&(m=o.getGroups().getByName("JoinOpPart").toString(),t.append(Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(m)),t.append(e),a=!System.String.isNullOrEmpty(o.getGroups().getByName("Bracket").toString()),n.v=n.v+1|0,l=o.getGroups().getByName("PostJoinPart").toString(),d=o.getGroups().getByName("PostJoinPart").getIndex(),i=!0),c=Kusto.Data.IntelliSense.CslCommand.s_joinEndRegex.match(l),c.getSuccess()&&System.Linq.Enumerable.from(this.m_tokens,Kusto.Data.IntelliSense.CslCommandToken).any(function(T){return T.TokenKind===Kusto.Data.IntelliSense.CslCommandToken.Kind.SubOperatorToken&&Bridge.referenceEquals(T.Value,"on")&&T.AbsoluteStart===((c.getGroups().getByName("JoinOnPart").getIndex()+r.AbsoluteStart|0)+d|0)})){var g=Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(c.getGroups().getByName("InnerJoinPart").toString()),S=Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(c.getGroups().getByName("JoinOnPart").toString()),y=!System.String.isNullOrEmpty(c.getGroups().getByName("Bracket").toString()),f=y||a,A=Kusto.Cloud.Platform.Utils.ExtendedString.CountNonOverlappingSubstrings(g,"("),C=Kusto.Cloud.Platform.Utils.ExtendedString.CountNonOverlappingSubstrings(g,")");y&&A>C&&(f=!1,g=(g||"")+")"),o.getSuccess()&&(a&&(Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v-1|0,"("),t.append(e)),Kusto.Data.IntelliSense.CslCommand.AppendTabulations(t,n.v)),n.v=n.v-1|0,n.v<0&&(n.v=0),System.String.isNullOrEmpty(g)?(p=Kusto.Data.IntelliSense.CslCommand.c_tabulation.length,t.replace(Kusto.Data.IntelliSense.CslCommand.c_tabulation,"",t.getLength()-p|0,p),h=!1,f&&(t.append(")"),t.append(e),h=!0),h?Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v,Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(S)):t.append(S)):(t.append(g),t.append(e),f&&(Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v,")"),t.append(e)),Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v,Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(S))),i=!0}else o.getSuccess()&&(a&&(Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v-1|0,"("),t.append(e)),Kusto.Data.IntelliSense.CslCommand.AppendTabulatedText(t,n.v,Kusto.Data.IntelliSense.CslCommand.NormalizeCommandPart(l)));return i},AcquireTokens:function(e){this.m_tokens=System.Linq.Enumerable.from(e.m_tokens,Kusto.Data.IntelliSense.CslCommandToken).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.CslCommand.f11)).toList(Kusto.Data.IntelliSense.CslCommandToken),this.m_commandParts=System.Linq.Enumerable.from(e.m_commandParts,Kusto.Data.IntelliSense.CslCommandToken).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.CslCommand.f11)).toList(Kusto.Data.IntelliSense.CslCommandToken),this.m_commentsParts=System.Linq.Enumerable.from(e.m_commentsParts,Kusto.Data.IntelliSense.CslCommandToken).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.CslCommand.f11)).toList(Kusto.Data.IntelliSense.CslCommandToken),this.m_clientDirectivesParts=System.Linq.Enumerable.from(e.m_clientDirectivesParts,Kusto.Data.IntelliSense.CslCommandToken).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.CslCommand.f11)).toList(Kusto.Data.IntelliSense.CslCommandToken),this.m_bracketParts=System.Linq.Enumerable.from(e.m_bracketParts,Kusto.Data.IntelliSense.CslCommandToken).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.CslCommand.f11)).toList(Kusto.Data.IntelliSense.CslCommandToken)},ParseTokens:function(e,t,n){var r=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandToken)).ctor,s,a,i,l,o,d;if(System.String.isNullOrEmpty(this.Text)){this.m_tokens=r;return}e!=null&&(e.ResetState(),n!=null&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(System.Int32,Kusto.Data.IntelliSense.KustoCommandContext),n.ContextCache)&&(e.ContextCache=new(System.Collections.Generic.Dictionary$2(System.Int32,Kusto.Data.IntelliSense.KustoCommandContext)).$ctor1(n.ContextCache))),s=e!=null?e.AllowQueryParameters:!1,a=new Kusto.Data.IntelliSense.CslCommandIndexer(s),a.AntiTokenizers=new(System.Collections.Generic.HashSet$1(System.Char)).$ctor1(System.Array.init([45,95,40],System.Char)),a.TokenStarters=System.Array.init([46],System.Char),a.TokenTerminators=new(System.Collections.Generic.HashSet$1(System.Char)).$ctor1(System.Array.init([40,46],System.Char)),a.IndexText(this.Text),i=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_commandParts=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandToken)).ctor,l=a.GetCommandPartsPositions(),this.AddCategorizedTokens(this.m_commandParts,null,l,Kusto.Data.IntelliSense.CslCommandToken.Kind.CommandPartToken),this.m_commentsParts=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandToken)).ctor,o=a.GetCommentsPositions(),this.AddCategorizedTokens(this.m_commentsParts,null,o,Kusto.Data.IntelliSense.CslCommandToken.Kind.CommentToken),this.m_clientDirectivesParts=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandToken)).ctor,d=a.GetClientDirectivesPositions(),this.AddCategorizedTokens(this.m_clientDirectivesParts,null,d,Kusto.Data.IntelliSense.CslCommandToken.Kind.ClientDirectiveToken),this.m_bracketParts=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandToken)).ctor,this.AddCategorizedTokens(this.m_bracketParts,null,a.GetBracketsPositions(),Kusto.Data.IntelliSense.CslCommandToken.Kind.BracketRangeToken),this.AddCategorizedTokens(r,i,o,Kusto.Data.IntelliSense.CslCommandToken.Kind.CommentToken),this.AddCategorizedTokens(r,i,d,Kusto.Data.IntelliSense.CslCommandToken.Kind.ClientDirectiveToken),s&&this.AddCategorizedTokens(r,i,a.GetQueryParametersPositions(),Kusto.Data.IntelliSense.CslCommandToken.Kind.QueryParametersToken),this.AddCategorizedTokens(r,i,a.GetStringLiteralsPositions(),Kusto.Data.IntelliSense.CslCommandToken.Kind.StringLiteralToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.ControlCommandsTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.ControlCommandToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.CslCommandsTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.CslCommandToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.OperatorCommandTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.SubOperatorsTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.SubOperatorToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.JoinKindTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.SubOperatorToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.ReduceByKindTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.SubOperatorToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.DataTypesTokens),Kusto.Data.IntelliSense.CslCommandToken.Kind.DataTypeToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.FunctionsTokens,40),Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken),this.AddCategorizedTokens(r,i,a.GetAllTokenPositions(Kusto.Data.IntelliSense.CslCommandParser.PluginTokens,40),Kusto.Data.IntelliSense.CslCommandToken.Kind.PluginToken),e!=null&&this.AddEntitiesTokens(e,r,i,a,l,n),r.Sort$2(u.$.Kusto.Data.IntelliSense.CslCommand.f12),this.ValidateTokensOutput(r,this.Text),t===Kusto.Data.IntelliSense.ParseMode.TokenizeAllText&&(this.EnsureAllTextIsAnnotated(a,r,i),r.Sort$2(u.$.Kusto.Data.IntelliSense.CslCommand.f12)),this.m_tokens=r,e!=null&&(this.ContextCache=e.ContextCache)},ValidateTokensOutput:function(e,t){for(var n,r,s,a=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandToken)).ctor,i=0,l=t.length,o=0;o<System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.CslCommandToken).count();o=o+1|0)n=e.getItem(o),n.RelativeEnd<i||n.RelativeStart<i||n.RelativeEnd>l?a.add(n):i=n.RelativeEnd;s=Bridge.getEnumerator(a);try{for(;s.moveNext();)r=s.Current,e.remove(r)}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}},AddEntitiesTokens:function(e,t,n,r,s,a){var i,l,o,d,m,c,p,h,g,S,y;this.AddCategorizedTokens(t,n,r.GetAllTokenPositions(e.TableNames),Kusto.Data.IntelliSense.CslCommandToken.Kind.TableToken),this.m_commandPartsParseStates=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommand.AddEntitiesTokensState)).ctor;var f=new System.Text.StringBuilder,A=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(e.FunctionNames),C=a!=null,T=null,K=null;for(i=0;i<(System.Array.getCount(s,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)+1|0);i=i+1|0){if(l=i>0?System.Array.getItem(s,i-1|0,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition):null,o={v:i<System.Array.getCount(s,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)?System.Array.getItem(s,i,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition):null},T=T!=null?T.Clone():new Kusto.Data.IntelliSense.CslCommand.AddEntitiesTokensState,o.v!=null&&f.append(o.v.Text),C=!!(C&(o.v!=null&&a!=null&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.CslCommandToken,a.CommandParts)&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.CslCommand.AddEntitiesTokensState,a.m_commandPartsParseStates)&&System.Linq.Enumerable.from(a.m_commandPartsParseStates,Kusto.Data.IntelliSense.CslCommand.AddEntitiesTokensState).count()>i&&System.Linq.Enumerable.from(a.CommandParts,Kusto.Data.IntelliSense.CslCommandToken).count()>i&&System.String.equals(o.v.Text,System.Linq.Enumerable.from(a.CommandParts,Kusto.Data.IntelliSense.CslCommandToken).elementAt(i).Value))),C){var w=System.Linq.Enumerable.from(a.CommandParts,Kusto.Data.IntelliSense.CslCommandToken).elementAt(i),v={v:o.v.Start-w.RelativeStart|0},R=System.Linq.Enumerable.from(a.Tokens,Kusto.Data.IntelliSense.CslCommandToken).where(function(_,k){return function(P){return(P.TokenKind===Kusto.Data.IntelliSense.CslCommandToken.Kind.CalculatedColumnToken||P.TokenKind===Kusto.Data.IntelliSense.CslCommandToken.Kind.TableColumnToken||P.TokenKind===Kusto.Data.IntelliSense.CslCommandToken.Kind.TableToken||P.TokenKind===Kusto.Data.IntelliSense.CslCommandToken.Kind.LetVariablesToken)&&P.RelativeStart>=k.v.Start&&P.RelativeEnd<=k.v.End}}(this,o)).select(function(_,k){return function(P){var O=Bridge.as(P.clone(),Kusto.Data.IntelliSense.CslCommandToken);return O.RelativeStart=O.RelativeStart+k.v|0,O}}(this,v)).ToArray(Kusto.Data.IntelliSense.CslCommandToken);t.AddRange(R),n.AddRange(r.GetTokenPositionsInRange(System.Linq.Enumerable.from(R,Kusto.Data.IntelliSense.CslCommandToken).select(u.$.Kusto.Data.IntelliSense.CslCommand.f13),o.v.Start,o.v.End)),this.AddLetStatementTokens(t,n,r,A,o.v),T=a.m_commandPartsParseStates.getItem(i).Clone(),this.m_commandPartsParseStates.add(T);continue}if(o.v!=null&&this.AddLetStatementTokens(t,n,r,A,o.v),K==null?(d=f.toString(),K=e.AnalyzeCommand$1(d,a)):o.v!=null&&(K=e.AnalyzeCommand(K,o.v.Text)),m=K.Context,!m.IsEmpty()){var D=Kusto.Data.IntelliSense.CslCommand.ResolveOperatorContext(o.v),x={},I={},b=Kusto.Data.IntelliSense.CslCommand.GetKnownEntities(e,T.MapOfKnownEntities,T.MapOfOriginallyKnownEntities,o.v,f,m,D,x,I);if(o.v!=null&&(e.ResolveKnownEntitiesFromContext(m),c=System.Linq.Enumerable.from(x.v,System.String).except(I.v),p=System.Linq.Enumerable.from(I.v,System.String).intersect(x.v),this.AddCategorizedTokens(t,n,r.GetTokenPositionsInRange(p,o.v.Start,o.v.End),Kusto.Data.IntelliSense.CslCommandToken.Kind.TableColumnToken),this.AddCategorizedTokens(t,n,r.GetTokenPositionsInRange(c,o.v.Start,o.v.End),Kusto.Data.IntelliSense.CslCommandToken.Kind.CalculatedColumnToken),this.AddCategorizedTokens(t,n,r.GetTokenPositionsInRange(e.RemoteTableNames,o.v.Start,o.v.End),Kusto.Data.IntelliSense.CslCommandToken.Kind.TableToken)),!b&&o.v!=null)switch(h=new(System.Collections.Generic.List$1(System.String)).ctor,g=e.ResolveEntitiesFromCommand((o.v.Text||"")+" | ",h,x.v),g){case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities:x.v=h;break;case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None:break;case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities:x.v=System.Linq.Enumerable.from(x.v,System.String).union(h).toList(System.String);break}T.MapOfKnownEntities.setItem(m,x.v),l!=null&&Kusto.Data.IntelliSense.CslCommand.IsMatchingRegex(l.Text,Kusto.Data.IntelliSense.CslCommand.s_hasAssignmentOperationRegex)&&T.MapOfPreviousCalculatedEntities.containsKey(m)&&(S=T.MapOfPreviousCalculatedEntities.getItem(m),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(System.String,S)&&(y=r.GetTokenPositionsInRange(S,l.Start,l.End),System.Linq.Enumerable.from(y,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).any()&&this.AddCategorizedTokens(t,n,y,Kusto.Data.IntelliSense.CslCommandToken.Kind.CalculatedColumnToken))),T.MapOfPreviousCalculatedEntities.setItem(m,System.Linq.Enumerable.from(x.v,System.String).except(I.v).toList(System.String)),this.m_commandPartsParseStates.add(T)}}},AddLetStatementTokens:function(e,t,n,r,s){var a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveLetVariable(s.Text);System.String.isNullOrEmpty(a)||r.add(a),r.Count>0&&this.AddCategorizedTokens(e,t,n.GetTokenPositionsInRange(r,s.Start,s.End),Kusto.Data.IntelliSense.CslCommandToken.Kind.LetVariablesToken)},AddCategorizedTokens:function(e,t,n,r){t?.AddRange(n),e.AddRange(System.Linq.Enumerable.from(n,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).select(Bridge.fn.bind(this,function(s){var a;return a=new Kusto.Data.IntelliSense.CslCommandToken(s.Text,this.RelativeStart,r),a.Length=s.Length,a.RelativeStart=s.Start,a})))},EnsureAllTextIsAnnotated:function(e,t,n){var r,s,a,i,l,o,d;if(t!=null){for(this.AddUnrecognizedTokens(e,t,n),t.Sort$2(u.$.Kusto.Data.IntelliSense.CslCommand.f12),r=0,s=t.Count,a=0;a<s;a=a+1|0)i=t.getItem(a),r<i.RelativeStart&&(l=i.RelativeStart-r|0,l>0&&(o=this.Text.substr(r,l),this.AddPlainOrUnrecognizedTokens(t,r,o))),r=i.RelativeEnd;r<this.Length&&(d=this.Text.substr(r,this.Length-r|0),this.AddPlainOrUnrecognizedTokens(t,r,d))}},AddUnrecognizedTokens:function(e,t,n){var r,s=e.GetUnrecognizedTokenPositions(n),a;r=Bridge.getEnumerator(s,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition);try{for(;r.moveNext();)a=r.Current,this.AddPlainOrUnrecognizedTokens(t,a.Start,a.Text)}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}},AddPlainOrUnrecognizedTokens:function(e,t,n){for(var r,s,a,i,l,o=System.String.toCharArray(n,0,n.length),d=-1,m=o.length,c=0;c<o.length;c=c+1|0)System.Char.isWhiteSpace(String.fromCharCode(o[System.Array.index(c,o)]))||(m=c+1|0,d=d>=0?d:c);d>0?(r=n.substr(0,d),s=(l=new Kusto.Data.IntelliSense.CslCommandToken(r,this.RelativeStart,Kusto.Data.IntelliSense.CslCommandToken.Kind.PlainTextToken),l.Length=d,l.RelativeStart=t,l),e.add(s)):d=0;var p=n.substr(d,m-d|0),h=Kusto.Data.IntelliSense.CslCommand.StartsWithAlpha(p)?Kusto.Data.IntelliSense.CslCommandToken.Kind.UnknownToken:Kusto.Data.IntelliSense.CslCommandToken.Kind.PlainTextToken,g=(l=new Kusto.Data.IntelliSense.CslCommandToken(p,this.RelativeStart,h),l.Length=p.length,l.RelativeStart=t+d|0,l);e.add(g),m<o.length&&(a=n.substr(m,o.length-m|0),i=(l=new Kusto.Data.IntelliSense.CslCommandToken(a,this.RelativeStart,Kusto.Data.IntelliSense.CslCommandToken.Kind.PlainTextToken),l.Length=a.length,l.RelativeStart=t+m|0,l),e.add(i))}}}),Bridge.ns("Kusto.Data.IntelliSense.CslCommand",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CslCommand,{f1:function(e){return e.add("distinct"),e.add("extend"),e.add("project"),e.add("project-rename"),e.add("mvexpand"),e.add("mv-expand"),e.add("where"),e.add("filter"),e.add("parse"),e.add("limit"),e.add("count"),e.add("order"),e.add("sort"),e.add("reduce"),e.add("take"),e.add("summarize"),e.add("top"),e.add("top-nested"),e.add("top-hitters"),e.add("render"),e.add("fork"),e.add("find"),e.add("sample"),e.add("sample-distinct"),e.add("search"),e.add("make-series"),e},f2:function(e){return e.m_tokens},f3:function(e){return e.m_commandParts},f4:function(e){return e.m_commentsParts},f5:function(e){return e.m_clientDirectivesParts},f6:function(e){return e.m_bracketParts},f7:function(e){return e.Text},f8:function(e){return e.IsRunnable},f9:function(e){return e.AbsoluteStart},f10:function(e){return e.RelativeStart},f11:function(e){var t=Bridge.as(e.clone(),Kusto.Data.IntelliSense.CslCommandToken);return t.AbsolutePositionBias=this.RelativeStart,t},f12:function(e,t){return e.CompareTo(t)},f13:function(e){return e.Value}}),Bridge.define("Kusto.Data.IntelliSense.CslCommand.AddEntitiesTokensState",{$kind:"nested class",fields:{MapOfKnownEntities:null,MapOfPreviousCalculatedEntities:null,MapOfOriginallyKnownEntities:null},ctors:{init:function(){this.MapOfKnownEntities=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.MapOfPreviousCalculatedEntities=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.MapOfOriginallyKnownEntities=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor}},methods:{Clone:function(){var e;return e=new Kusto.Data.IntelliSense.CslCommand.AddEntitiesTokensState,e.MapOfKnownEntities=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).$ctor1(this.MapOfKnownEntities),e.MapOfOriginallyKnownEntities=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).$ctor1(this.MapOfOriginallyKnownEntities),e.MapOfPreviousCalculatedEntities=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).$ctor1(this.MapOfPreviousCalculatedEntities),e}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommand.FormatTraits",{$kind:"nested enum",statics:{fields:{None:0,IncludeComments:1,TabulateOnJoins:2,TabulateOnFunctionBoundaries:4}},$flags:!0}),Bridge.define("Kusto.Data.IntelliSense.CslCommand.PrivateTracer",{$kind:"nested class",statics:{fields:{Tracer:null},ctors:{init:function(){this.Tracer=new Kusto.Data.IntelliSense.CslCommand.PrivateTracer}}},methods:{TraceVerbose:function(e,t){t===void 0&&(t=[])}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandIndexer",{statics:{fields:{MultiLineRegexOptions:0,SingleLineRegexOptions:0,s_defaultCommentRegex:null,s_defaultClientDirectivesRegex:null,s_defaultStringLiteralsRegex:null,s_defaultQueryParametersRegex:null,s_matchingBrackets:null},ctors:{init:function(){this.MultiLineRegexOptions=2,this.SingleLineRegexOptions=16,this.s_defaultCommentRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*//.*?(\\n|$))",Kusto.Data.IntelliSense.CslCommandIndexer.MultiLineRegexOptions),this.s_defaultClientDirectivesRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*#.*?(\\n|$))",Kusto.Data.IntelliSense.CslCommandIndexer.MultiLineRegexOptions),this.s_defaultStringLiteralsRegex=new System.Text.RegularExpressions.Regex.ctor(`(@?'.*?\\'|@?\\".*?\\")`,Kusto.Data.IntelliSense.CslCommandIndexer.MultiLineRegexOptions),this.s_defaultQueryParametersRegex=new System.Text.RegularExpressions.Regex.ctor("\\{([a-zA-Z]\\w+?)\\}",Kusto.Data.IntelliSense.CslCommandIndexer.MultiLineRegexOptions),this.s_matchingBrackets=u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f1(new(System.Collections.Generic.Dictionary$2(System.Char,System.Char)).ctor)}},methods:{AddToCollection:function(e,t,n,r,s){var a,i={},l=System.Array.init([10,13],System.Char),o=(a=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,a.Start=n,a.End=Kusto.Data.IntelliSense.CslCommandIndexer.ReadTill(t,r+1|0,l,null,i),a),d;return o.End>o.Start&&(i.v&&(o.End=o.End-1|0),d=(o.End-o.Start|0)+1|0,o.Text=e.substr(o.Start,d),s.add(o)),o.End},ReadTill:function(e,t,n,r,s){s.v=!0;for(var a=new(System.Collections.Generic.HashSet$1(System.Char)).ctor;t<e.length;t=t+1|0){if(System.Linq.Enumerable.from(a,System.Char).any()){if(System.Array.contains(n,e[System.Array.index(t,e)],System.Char)&&!a.contains(e[System.Array.index(t,e)])){a.add(e[System.Array.index(t,e)]);continue}s.v=!1,t=t-1|0;break}if(System.Array.contains(n,e[System.Array.index(t,e)],System.Char)){a.add(e[System.Array.index(t,e)]);continue}r!=null&&System.Linq.Enumerable.from(r,System.Char).any(function(i){return e[System.Array.index(t,e)]===i})&&(t=t+1|0)}return t>e.length?e.length:t},ReadVerbatimTill:function(e,t,n,r){r.v=!0;for(var s=0;t<e.length;t=t+1|0)if(System.Array.contains(n,e[System.Array.index(t,e)],System.Char)&&(s=s+1|0,s%2!=0&&t<(e.length-1|0)&&!System.Array.contains(n,e[System.Array.index(t+1|0,e)],System.Char))){r.v=!1;break}return t},CaptureTokensUsingRegex:function(e,t,n){var r,s,a,i,l,o,d,m,c;if(!Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.Text.RegularExpressions.Regex,t)){r=Bridge.getEnumerator(t);try{for(;r.moveNext();){l=r.Current,o=l.matches(e),s=Bridge.getEnumerator(o);try{for(;s.moveNext();){d=Bridge.cast(s.Current,System.Text.RegularExpressions.Match),a=Bridge.getEnumerator(d.getCaptures());try{for(;a.moveNext();)m=Bridge.cast(a.Current,System.Text.RegularExpressions.Capture),c=(i=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,i.Start=m.getIndex(),i.End=(m.getIndex()+m.getLength()|0)-1|0,i.Text=m.getValue(),i),n.add(c)}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}}}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}}}}},fields:{m_tokensAndPositions:null,m_commentTokenPositions:null,m_clientDirectivesTokenPositions:null,m_stringLiteralsPositions:null,m_queryParametersPositions:null,m_commandPartsPositions:null,m_bracketPartsPositions:null,m_sourceText:null,m_commentRegexCollection:null,m_clientDirectivesRegexCollection:null,m_stringLiteralsRegexCollection:null,m_queryParametersRegexCollection:null},props:{AntiTokenizers:null,TokenTerminators:null,TokenStarters:null},ctors:{init:function(){this.m_tokensAndPositions=new(System.Collections.Generic.Dictionary$2(System.String,System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition))).ctor,this.m_commentTokenPositions=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_clientDirectivesTokenPositions=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_stringLiteralsPositions=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_queryParametersPositions=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_commandPartsPositions=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_bracketPartsPositions=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,this.m_commentRegexCollection=new(System.Collections.Generic.List$1(System.Text.RegularExpressions.Regex)).ctor,this.m_clientDirectivesRegexCollection=new(System.Collections.Generic.List$1(System.Text.RegularExpressions.Regex)).ctor,this.m_stringLiteralsRegexCollection=new(System.Collections.Generic.List$1(System.Text.RegularExpressions.Regex)).ctor,this.m_queryParametersRegexCollection=new(System.Collections.Generic.List$1(System.Text.RegularExpressions.Regex)).ctor},ctor:function(e){this.$initialize(),this.m_commentRegexCollection.add(Kusto.Data.IntelliSense.CslCommandIndexer.s_defaultCommentRegex),this.m_clientDirectivesRegexCollection.add(Kusto.Data.IntelliSense.CslCommandIndexer.s_defaultClientDirectivesRegex),this.m_stringLiteralsRegexCollection.add(Kusto.Data.IntelliSense.CslCommandIndexer.s_defaultStringLiteralsRegex),e&&this.m_queryParametersRegexCollection.add(Kusto.Data.IntelliSense.CslCommandIndexer.s_defaultQueryParametersRegex)}},methods:{IndexText:function(e){var t,n,r,s,a,i,l,o;this.m_tokensAndPositions.clear(),this.m_sourceText=e,n=System.String.toCharArray(e,0,e.length),this.DetectCommentsAndStringLiterals(e);var d=this.GetTokenLookupSkipRanges(e.length),m=Kusto.Data.IntelliSense.CslCommandIndexer.State.LookingForTokenStart,c=null,p=null,h=null,g=new(System.Collections.Generic.Stack$1(System.Tuple$2(System.Char,System.Int32))).ctor;for(r=0;r<n.length;r=r+1|0){var S=d[System.Array.index(r,d)],y=System.Linq.Enumerable.from(this.m_commentTokenPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).where(function(T){return r>=T.Start&&r<=T.End}).any(),f=n[System.Array.index(r,n)],A=r===0||System.Char.isWhiteSpace(String.fromCharCode(n[System.Array.index(r-1|0,n)])),C=!0;switch(h!=null&&((f===124||f===59)&&!S||y||r===(n.length-1|0))&&(r===(n.length-1|0)||f===59?(h.End=r,C=!1):h.End=r-1|0,s=(h.End-h.Start|0)+1|0,s>1&&(a=e.substr(h.Start,s),h.Text=a,System.String.equals(a,` `)||System.String.isNullOrWhiteSpace(a)||this.m_commandPartsPositions.add(h)),h=null),h==null&&!y&&C&&(h=(t=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,t.Start=r,t.End=r,t)),S||Kusto.Data.IntelliSense.CslCommandIndexer.s_matchingBrackets.containsKey(f)&&(g.Count>0&&g.Peek().Item1===f?(i=g.Pop(),l=(t=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,t.Start=i.Item2,t.End=r,t),l.Text=e.substr(l.Start,(l.End-l.Start|0)+1|0),this.m_bracketPartsPositions.add(l)):g.Push({Item1:Kusto.Data.IntelliSense.CslCommandIndexer.s_matchingBrackets.getItem(f),Item2:r})),m){case Kusto.Data.IntelliSense.CslCommandIndexer.State.LookingForTokenStart:!S&&(this.IsPartOfTheToken(f)&&!this.IsTokenTerminator(f)||A&&this.IsTokenStarter(f))&&(c=new System.Text.StringBuilder,p=(t=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,t.Start=r,t.End=r,t),c.append(String.fromCharCode(f)),m=Kusto.Data.IntelliSense.CslCommandIndexer.State.LookingForTokenEnd);break;case Kusto.Data.IntelliSense.CslCommandIndexer.State.LookingForTokenEnd:o=!1,!S&&this.IsPartOfTheToken(f)?this.IsTokenTerminator(f)?(p.TokenTerminator=f,o=!0):(c.append(String.fromCharCode(f)),p.End=r):o=!0,(o||r===(n.length-1|0))&&(p.Text=c.toString(),this.AddTokenPosition(p),m=Kusto.Data.IntelliSense.CslCommandIndexer.State.LookingForTokenStart);break}}},GetTokenLookupSkipRanges:function(e){var t=new(System.Collections.Generic.List$1(System.Tuple$2(System.Int32,System.Int32))).ctor,n;t.AddRange(System.Linq.Enumerable.from(this.m_stringLiteralsPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).select(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f2)),t.AddRange(System.Linq.Enumerable.from(this.m_commentTokenPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).select(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f2)),t.AddRange(System.Linq.Enumerable.from(this.m_clientDirectivesTokenPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).select(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f2)),t.AddRange(System.Linq.Enumerable.from(this.m_queryParametersPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).select(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f2)),t.Sort$2(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f3);var r=0,s=System.Linq.Enumerable.from(t,System.Tuple$2(System.Int32,System.Int32)).firstOrDefault(null,null),a=System.Array.init(e,!1,System.Boolean);for(n=0;n<e&&s!=null;n=n+1|0)n>=s.Item1&&(a[System.Array.index(n,a)]=!0),s.Item2===n&&(s=System.Linq.Enumerable.from(t,System.Tuple$2(System.Int32,System.Int32)).elementAtOrDefault(r=r+1|0,null));return a},GetCommandPartsPositions:function(){return this.m_commandPartsPositions},GetCommentsPositions:function(){return this.m_commentTokenPositions},GetClientDirectivesPositions:function(){return this.m_clientDirectivesTokenPositions},GetStringLiteralsPositions:function(){return this.m_stringLiteralsPositions},GetQueryParametersPositions:function(){return this.m_queryParametersPositions},GetBracketsPositions:function(){return this.m_bracketPartsPositions},GetUnrecognizedTokenPositions:function(e){return System.Linq.Enumerable.from(this.m_tokensAndPositions.Values,System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).selectMany(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f4).except(e)},GetTokenPositionsInRange:function(e,t,n){var r,s=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,a,i;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.String,e))return s;r=Bridge.getEnumerator(e,System.String);try{for(;r.moveNext();)a=r.Current,System.String.isNullOrEmpty(a)||this.m_tokensAndPositions.containsKey(a)&&(i=System.Linq.Enumerable.from(this.m_tokensAndPositions.getItem(a),Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).where(function(l){return l.Start>=t&&l.End<=n}),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,i)&&s.AddRange(i))}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}return s},GetAllTokensSortedByPosition:function(){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.Collections.Generic.KeyValuePair$2(System.String,System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)),this.m_tokensAndPositions)?null:System.Linq.Enumerable.from(this.m_tokensAndPositions,System.Collections.Generic.KeyValuePair$2(System.String,System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition))).selectMany(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f5).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandIndexer.f6)},GetAllTokenPositions:function(e,t){var n,r,s;if(t===void 0&&(t=0),r=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor,Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.String,e))return r;n=Bridge.getEnumerator(e,System.String);try{for(;n.moveNext();)s=n.Current,this.m_tokensAndPositions.containsKey(s)&&r.AddRange(System.Linq.Enumerable.from(this.m_tokensAndPositions.getItem(s),Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).where(function(a){return a.TokenTerminator===t}))}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return r},IsPartOfTheToken:function(e){return System.Char.isDigit(e)||System.Char.isLetter(e)||this.AntiTokenizers!=null&&this.AntiTokenizers.contains(e)},IsTokenTerminator:function(e){return this.TokenTerminators!=null&&this.TokenTerminators.contains(e)},IsTokenStarter:function(e){return this.TokenStarters!=null&&System.Array.contains(this.TokenStarters,e,System.Char)},DetectCommentsAndStringLiterals:function(e){Kusto.Data.IntelliSense.CslCommandIndexer.CaptureTokensUsingRegex(e,this.m_queryParametersRegexCollection,this.m_queryParametersPositions),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.None(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,this.m_queryParametersPositions)?this.DetectCommentsAndStringLiterals_Simple(e):this.DetectCommentsAndStringLiterals_Complex(e)},DetectCommentsAndStringLiterals_Simple:function(e){for(var t,n=System.String.toCharArray(e,0,e.length),r=0,s=0;s<n.length;s=s+1|0)switch(t=n[System.Array.index(s,n)],r){case 0:t===64?r=1:t===39||t===34?s=this.AddStringLiteralToken(e,n,s,s,t,!1):t===47?r=2:t===35&&(s=this.AddClientDirectiveToken(e,n,s,s),r=0);break;case 1:(t===39||t===34)&&(s=this.AddStringLiteralToken(e,n,s-1|0,s,t,!0)),r=0;break;case 2:t===47&&(s=this.AddCommentToken(e,n,s-1|0,s)),r=0;break}},AddCommentToken:function(e,t,n,r){return Kusto.Data.IntelliSense.CslCommandIndexer.AddToCollection(e,t,n,r,this.m_commentTokenPositions)},AddClientDirectiveToken:function(e,t,n,r){return Kusto.Data.IntelliSense.CslCommandIndexer.AddToCollection(e,t,n,r,this.m_clientDirectivesTokenPositions)},AddStringLiteralToken:function(e,t,n,r,s,a){var i,l={},o=(i=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,i.Start=n,i.End=a?Kusto.Data.IntelliSense.CslCommandIndexer.ReadVerbatimTill(t,r+1|0,System.Array.init([s],System.Char),l):Kusto.Data.IntelliSense.CslCommandIndexer.ReadTill(t,r+1|0,System.Array.init([s],System.Char),System.Array.init([92],System.Char),l),i),d;return o.End>o.Start&&(l.v&&(o.End=o.End-1|0),d=(o.End-o.Start|0)+1|0,o.Text=e.substr(o.Start,d),this.m_stringLiteralsPositions.add(o)),o.End},DetectCommentsAndStringLiterals_Complex:function(e){var t,n,r,s,a,i,l,o,d;for(Kusto.Data.IntelliSense.CslCommandIndexer.CaptureTokensUsingRegex(e,this.m_commentRegexCollection,this.m_commentTokenPositions),Kusto.Data.IntelliSense.CslCommandIndexer.CaptureTokensUsingRegex(e,this.m_clientDirectivesRegexCollection,this.m_clientDirectivesTokenPositions),n=this.m_queryParametersPositions.Count-1|0;n>=0;n=n-1|0)r={v:this.m_queryParametersPositions.getItem(n)},System.Linq.Enumerable.from(this.m_commentTokenPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).where(function(m,c){return function(p){return p.Start<=c.v.Start&&p.End>=c.v.End}}(this,r)).any()&&this.m_queryParametersPositions.removeAt(n);for(Kusto.Data.IntelliSense.CslCommandIndexer.CaptureTokensUsingRegex(e,this.m_stringLiteralsRegexCollection,this.m_stringLiteralsPositions),s=this.m_stringLiteralsPositions.Count-1|0;s>=0;s=s-1|0)a={v:this.m_stringLiteralsPositions.getItem(s)},System.Linq.Enumerable.from(this.m_commentTokenPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).where(function(m,c){return function(p){return p.Start<=c.v.Start&&p.End>=c.v.End}}(this,a)).any()&&this.m_stringLiteralsPositions.removeAt(s);for(i=this.m_queryParametersPositions.Count-1|0;i>=0;i=i-1|0)l={v:this.m_queryParametersPositions.getItem(i)},o=System.Linq.Enumerable.from(this.m_stringLiteralsPositions,Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition).where(function(m,c){return function(p){return p.Start<=c.v.Start&&p.End>=c.v.End}}(this,l)).firstOrDefault(null,null),o!=null&&(d=(t=new Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition,t.Start=l.v.End+1|0,t.End=o.End,t.Text=o.Text.substr((l.v.End-o.Start|0)+1|0),t),o.End=l.v.Start-1|0,o.Text=o.Text.substr(0,o.Length),this.m_stringLiteralsPositions.add(d))},AddTokenPosition:function(e){this.m_tokensAndPositions.containsKey(e.Text)||this.m_tokensAndPositions.add(e.Text,new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition)).ctor),this.m_tokensAndPositions.getItem(e.Text).add(e)}}}),Bridge.ns("Kusto.Data.IntelliSense.CslCommandIndexer",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CslCommandIndexer,{f1:function(e){return e.add(40,41),e.add(41,40),e.add(91,93),e.add(93,91),e.add(123,125),e.add(125,123),e},f2:function(e){return{Item1:e.Start,Item2:e.End}},f3:function(e,t){return Bridge.compare(e.Item1,t.Item1)},f4:function(e){return e},f5:function(e){return e.value},f6:function(e){return e.Start}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandIndexer.State",{$kind:"nested enum",statics:{fields:{LookingForTokenStart:0,LookingForTokenEnd:1,InsideComment:2,InsideStringLiteral:3}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandIndexer.TokenPosition",{$kind:"nested class",props:{Text:null,Start:0,End:0,TokenTerminator:0,Length:{get:function(){return(this.End-this.Start|0)+1|0}}},ctors:{ctor:function(){this.$initialize(),this.TokenTerminator=0}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandParser",{statics:{fields:{ControlCommandsTokens:null,CslCommandsTokens:null,ChartRenderTypesTokens:null,ChartRenderKindTokens:null,SubOperatorsTokens:null,JoinKindTokens:null,ReduceByKindTokens:null,DataTypesTokens:null,ScalarFunctionsDateTimeTokens:null,ScalarFunctionsNoDateTimeTokens:null,SingleParameterFunctionsDateTimeTokens:null,ZeroParameterFunctionsNoDateTimeTokens:null,SingleParameterFunctionsNoDateTimeTokens:null,IntrinsicFunctionTokens:null,TwoParameterFunctionsTokens:null,ThreeParameterFunctionsTokens:null,ManyParametersFunctionsTokens:null,PromotedOperatorCommandTokens:null,ClientDirectiveTokens:null,OperatorCommandTokens:null,DataOperatorTokens:null,SummarizeAggregationSingleParameterTokens:null,SummarizeAggregationTwoParametersTokens:null,SummarizeAggregationThreeParametersTokens:null,SummarizeAggregationManyParametersTokens:null,MakeSeriesAggregationTokens:null,PluginTokens:null,DatetimeFunctionsTokens:null,ScalarFunctionsTokens:null,SingleParameterFunctionsTokens:null,SummarizeAggregationTokens:null,SummarizeAggregationAliasesTokens:null,SortedSummarizeAggregators:null,SortedMakeSeriesAggregationTokens:null,SortedDatetimeFunctions:null,SortedExtendFunctions:null,FunctionsTokens:null,SortedEvaluateFunctions:null,s_asyncSeeker:null,s_isCommentLineRegex:null},ctors:{init:function(){this.ControlCommandsTokens=System.Array.init([".add",".alter",".alter-merge",".attach",".append",".create",".create-merge",".create-set",".create-or-alter",".define",".detach",".delete",".drop",".drop-pretend",".dup-next-ingest",".dup-next-failed-ingest",".ingest",".export",".load",".move",".purge",".purge-cleanup",".remove",".replace",".save",".set",".set-or-append",".set-or-replace",".show",".rename",".run","async","data","into","ifnotexists","whatif","compressed","monitoring","metadata","folder","docstring","details","hot","records","until","as","csv","tsv","json","sql","policy","encoding","retention","merge","policies","update","ingestiontime","caching","sharding","callout","restricted_view_access","ingestionbatching","query_weak_consistency","partitioning","softdelete","harddelete","rowstore","rowstores","seal","writeaheadlog","streamingingestion","rowstore_references","follower"],System.String),this.CslCommandsTokens=System.Array.init(["set","let","restrict","access","alias","pattern","declare","query_parameters"],System.String),this.ChartRenderTypesTokens=System.Linq.Enumerable.from(System.Array.init(["columnchart","barchart","piechart","timechart","anomalychart","linechart","ladderchart","pivotchart","areachart","stackedareachart","scatterchart","timepivot","timeline","card","table","list","treemap","plotly"],System.String),System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandParser.f1).ToArray(System.String),this.ChartRenderKindTokens=System.Array.init(["default","stacked","stacked100","unstacked","map"],System.String),this.SubOperatorsTokens=System.Linq.Enumerable.from(System.Array.init(["like","notlike","contains","notcontains","!contains","contains_cs","!contains_cs","startswith","!startswith","has","!has","has_cs","!has_cs","hasprefix","!hasprefix","hassuffix","!hassuffix","matches","regex","in","!in","endswith","!endswith","between","!between","extent","database","diagnostics","jitmanagers","admins","basicauth","cache","capacity","cluster","continuous-export","continuous-exports","databases","extents","external","journal","memory","extentcontainers","viewers","unrestrictedviewers","tags","prettyname","blockedprincipals","failed","operations","password","principal","principals","settings","schema","table","tables","user","users","ingestors","monitors","version","roles","fabric","locks","service","services","nodes","unallocated","subscriptions","nonregistered","packages","configuration","commands","commands-and-queries","queries","query","function","functions","by","on","of","true","false","and","or","asc","desc","nulls","last","first","with","withsource","kind","flags","from","to","step","ingestion","failures","mapping","mappings","geneva","eventhub","source","sources","types","application","period","reason","title"],System.String),System.String).union(Kusto.Data.IntelliSense.CslCommandParser.ChartRenderTypesTokens).union(Kusto.Data.IntelliSense.CslCommandParser.ChartRenderKindTokens).distinct().ToArray(System.String),this.JoinKindTokens=System.Array.init(["anti","inner","innerunique","fullouter","leftanti","leftantisemi","leftouter","leftsemi","rightanti","rightantisemi","rightsemi","rightouter"],System.String),this.ReduceByKindTokens=System.Array.init(["mining"],System.String),this.DataTypesTokens=System.Array.init(["timespan","datetime","int","long","real","string","bool","double","dynamic","decimal","guid"],System.String),this.ScalarFunctionsDateTimeTokens=System.Array.init(["now","ago","datetime","ingestion_time"],System.String),this.ScalarFunctionsNoDateTimeTokens=System.Array.init(["time","timespan","dynamic","decimal"],System.String),this.SingleParameterFunctionsDateTimeTokens=System.Array.init(["todatetime","between","!between"],System.String),this.ZeroParameterFunctionsNoDateTimeTokens=System.Array.init(["row_number","extent_id","extent_tags","pi","pack_all","rowstore_ordinal_range"],System.String),this.SingleParameterFunctionsNoDateTimeTokens=System.Array.init(["strlen","tostring","toupper","tolower","typeof","reverse","parsejson","parse_json","parse_xml","parse_csv","tobool","toboolean","todynamic","toobject","toint","tolong","toguid","todouble","toreal","totimespan","tohex","todecimal","isempty","isnotempty","isnull","isnotnull","isnan","isinf","isfinite","dayofweek","dayofmonth","dayofyear","week_of_year","monthofyear","sqrt","rand","log","log10","log2","exp","exp2","exp10","abs","degrees","radians","sign","sin","cos","tan","asin","acos","atan","cot","getmonth","getyear","array_length","gettype","bag_keys","cursor_after","gamma","loggamma","dcount_hll","parse_ipv4","parse_url","parse_path","parse_version","parse_urlquery","url_encode","url_decode","binary_not","not","toscalar","materialize","series_stats","series_fit_line","series_fit_2lines","series_stats_dynamic","series_fit_line_dynamic","series_fit_2lines_dynamic","base64_encodestring","base64_decodestring","hash_sha256","ceiling","string_size","isascii","isutf8","geo_geohash_to_central_point"],System.String),this.IntrinsicFunctionTokens=System.Array.init(["cluster","database","table"],System.String),this.TwoParameterFunctionsTokens=System.Array.init(["bin","columnifexists","floor","countof","hash","round","pow","binary_and","binary_or","binary_xor","binary_shift_left","binary_shift_right","datepart","datetime_part","repeat","series_seasonal","series_outliers","array_split","series_add","series_subtract","series_multiply","series_divide","series_pow","series_pearson_correlation","series_greater","series_greater_equals","series_less","series_less_equals","series_equals","series_not_equals","rank_tdigest","percentrank_tdigest","trim","trim_start","trim_end","startofday","startofweek","startofmonth","startofyear","endofday","endofweek","endofmonth","endofyear","series_fill_backward","series_fill_forward","atan2","format_datetime","format_timespan","strrep","strcat_array","parse_user_agent","strcmp","row_cumsum"],System.String),this.ThreeParameterFunctionsTokens=System.Array.init(["iff","iif","range","replace","translate","series_iir","bin_at","series_fill_const","series_decompose","series_decompose_forecast","series_decompose_anomalies","datetime_diff","datetime_add","geo_point_to_geohash","geo_point_in_polygon"],System.String),this.ManyParametersFunctionsTokens=System.Array.init(["extract","extractjson","extractall","strcat","strcat_delim","substring","indexof","split","case","coalesce","max_of","min_of","percentile_tdigest","zip","pack","pack_dictionary","pack_array","array_concat","array_slice","welch_test","row_window_session","series_fir","series_periods_detect","prev","next","tdigest_merge","hll_merge","series_fill_linear","series_periods_validate","datatable","make_datetime","make_timespan","make_string","geo_distance_2points","geo_point_in_circle"],System.String),this.PromotedOperatorCommandTokens=System.Array.init(["where","count","extend","join","limit","order","project","project-away","project-rename","project-reorder","project-keep","render","sort","summarize","distinct","take","top","top-nested","top-hitters","union","mv-expand","mv-apply","reduce","evaluate","parse","parse-where","parse-kv","sample","sample-distinct","make-series","getschema","serialize","invoke","as","scan"],System.String),this.ClientDirectiveTokens=System.Array.init(["connect"],System.String),this.OperatorCommandTokens=System.Linq.Enumerable.from(System.Array.init(["filter","fork","facet","range","consume","find","search","print","partition","lookup"],System.String),System.String).union(Kusto.Data.IntelliSense.CslCommandParser.PromotedOperatorCommandTokens).ToArray(System.String),this.DataOperatorTokens=System.Array.init(["datatable","externaldata"],System.String),this.SummarizeAggregationSingleParameterTokens=System.Array.init(["count","countif","dcount","dcountif","sum","min","max","avg","avgif","any","makelist","makeset","make_dictionary","stdev","stdevif","varianceif","variance","buildschema","hll","hll_merge","tdigest","tdigest_merge"],System.String),this.SummarizeAggregationTwoParametersTokens=System.Array.init(["percentile","sumif"],System.String),this.SummarizeAggregationThreeParametersTokens=System.Array.init(["percentilew"],System.String),this.SummarizeAggregationManyParametersTokens=System.Array.init(["arg_min","arg_max","percentilesw_array","percentilesw","percentiles_array","percentiles"],System.String),this.MakeSeriesAggregationTokens=System.Array.init(["count","countif","dcount","dcountif","sum","min","max","avg","any","stdev","stdevp","variance","variancep","sumif"],System.String),this.PluginTokens=System.Array.init(["autocluster","diffpatterns","basket","extractcolumns"],System.String),this.DatetimeFunctionsTokens=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ScalarFunctionsDateTimeTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsDateTimeTokens).ToArray(System.String),this.ScalarFunctionsTokens=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ScalarFunctionsDateTimeTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.ScalarFunctionsNoDateTimeTokens).ToArray(System.String),this.SingleParameterFunctionsTokens=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsDateTimeTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsNoDateTimeTokens).ToArray(System.String),this.SummarizeAggregationTokens=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationSingleParameterTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationManyParametersTokens).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationThreeParametersTokens).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationTwoParametersTokens).ToArray(System.String),this.SummarizeAggregationAliasesTokens=System.Array.init(["argmax","argmin"],System.String),this.SortedSummarizeAggregators=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationTokens,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandParser.f2).select(u.$.Kusto.Data.IntelliSense.CslCommandParser.f3).ToArray(System.String),this.SortedMakeSeriesAggregationTokens=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.MakeSeriesAggregationTokens,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandParser.f2).select(u.$.Kusto.Data.IntelliSense.CslCommandParser.f3).ToArray(System.String),this.SortedDatetimeFunctions=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.DatetimeFunctionsTokens,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandParser.f2).select(u.$.Kusto.Data.IntelliSense.CslCommandParser.f3).ToArray(System.String),this.SortedExtendFunctions=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ManyParametersFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.ScalarFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.ZeroParameterFunctionsNoDateTimeTokens).union(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.TwoParameterFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.ThreeParameterFunctionsTokens).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandParser.f2).select(u.$.Kusto.Data.IntelliSense.CslCommandParser.f3).ToArray(System.String),this.FunctionsTokens=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ManyParametersFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.ScalarFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.ZeroParameterFunctionsNoDateTimeTokens).union(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.TwoParameterFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.ThreeParameterFunctionsTokens).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationTokens).union(Kusto.Data.IntelliSense.CslCommandParser.IntrinsicFunctionTokens).ToArray(System.String),this.SortedEvaluateFunctions=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.PluginTokens,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslCommandParser.f2).ToArray(System.String),this.s_asyncSeeker=new System.Text.RegularExpressions.Regex.ctor("^\\.[\\w\\-]+\\s+async",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_isCommentLineRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*//",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions)}},methods:{IsAdminCommand$1:function(e,t){return Kusto.Data.IntelliSense.CslCommandParser.IsStartingWithPrefix(e,".",t)},IsAdminCommand:function(e){var t={};return Kusto.Data.IntelliSense.CslCommandParser.IsAdminCommand$1(e,t)},ResolveRequestApiKind:function(e){var t={},n=Kusto.Data.IntelliSense.CslCommandParser.IsStartingWithPrefix(e,".",t);return n?Kusto.Data.IntelliSense.CslCommandParser.s_asyncSeeker.isMatch(t.v)?Kusto.Data.IntelliSense.ApiKind.AdminAsyncCommand:Kusto.Data.IntelliSense.ApiKind.AdminSyncCommand:Kusto.Data.IntelliSense.ApiKind.Query},IsStartingWithPrefix:function(e,t,n){var r,s,a;for(n.v=e.trim(),r=System.String.split(e,System.Array.init([13,10],System.Char).map(function(i){return String.fromCharCode(i)}),null,1),s=0;s<r.length;s=s+1|0){if(a=r[System.Array.index(s,r)],System.String.startsWith(System.String.trimStart(a),t))return s>0&&(n.v=Bridge.toArray(System.Linq.Enumerable.from(r,System.String).skip(s)).join(` `).trim()),!0;if(!Kusto.Data.IntelliSense.CslCommandParser.s_isCommentLineRegex.isMatch(a))return s>0&&(n.v=Bridge.toArray(System.Linq.Enumerable.from(r,System.String).skip(s)).join(` `).trim()),!1}return!1},IsClientDirective:function(e,t){return Kusto.Data.IntelliSense.CslCommandParser.IsStartingWithPrefix(e,"#",t)}}},fields:{m_hashedCommands:null,m_rulesProvider:null},props:{Results:null},ctors:{ctor:function(){this.$initialize(),this.Reset()}},methods:{Reset:function(){this.m_hashedCommands=new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.CslCommand)).ctor,this.Results=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommand)).ctor},Parse:function(e,t,n){var r=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommand)).ctor,s,a,i,l,o;if(Bridge.referenceEquals(this.m_rulesProvider,e)||(this.Reset(),this.m_rulesProvider=e),s=Kusto.Data.IntelliSense.CslCommandParser.CslCommandTokenizer.GetCommands(t),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.CslCommand,s))for(a=0;a<s.Count;a=a+1|0)i=s.getItem(a),i.ParseMode=n,l=this.FetchFromCache(n,i),l||(o=this.Results!=null?System.Linq.Enumerable.from(this.Results,Kusto.Data.IntelliSense.CslCommand).elementAtOrDefault(a,null):null,i.ParseTokens(e,n,o)),r.add(i);return this.m_hashedCommands=System.Linq.Enumerable.from(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.DistinctBy(Kusto.Data.IntelliSense.CslCommand,System.String,r,u.$.Kusto.Data.IntelliSense.CslCommandParser.f4),Kusto.Data.IntelliSense.CslCommand).toDictionary(u.$.Kusto.Data.IntelliSense.CslCommandParser.f4,u.$.Kusto.Data.IntelliSense.CslCommandParser.f5,System.String,Kusto.Data.IntelliSense.CslCommand),this.Results=r,r},FetchFromCache:function(e,t){var n=!1,r={};return this.m_hashedCommands.tryGetValue(t.Text,r)&&r.v.ParseMode===e&&(t.AcquireTokens(r.v),n=!0),n},Clone:function(){var e,t=new Kusto.Data.IntelliSense.CslCommandParser;return t.m_hashedCommands=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(System.String,Kusto.Data.IntelliSense.CslCommand),this.m_hashedCommands)?new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.CslCommand)).$ctor1(this.m_hashedCommands):new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.CslCommand)).ctor,t.m_rulesProvider=this.m_rulesProvider,t.Results=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.CslCommand,this.Results)?(e=Kusto.Data.IntelliSense.CslCommand,System.Linq.Enumerable.from(this.Results,e).toList(e)):new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommand)).ctor,t}}}),Bridge.ns("Kusto.Data.IntelliSense.CslCommandParser",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CslCommandParser,{f1:function(e){return e},f2:function(e){return e},f3:function(e){return(e||"")+"()"},f4:function(e){return e.Text},f5:function(e){return e}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandParser.CslCommandTokenizer",{$kind:"nested class",statics:{methods:{GetCommands:function(e){var t,n,r=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CslCommand)).ctor,s,a,i;if(System.String.isNullOrEmpty(e))return r;var l=null,o=0,d=!1,m=0,c=(t=System.Char,System.Linq.Enumerable.from(e,t).ToArray(t));for(s=0;s<c.length;s=s+1|0)switch(a=c[System.Array.index(s,c)],d=s===(c.length-1|0),d&&(o===0&&(l=(n=new Kusto.Data.IntelliSense.CslCommand,n.RelativeStart=s,n)),o=2),o){case 0:l=(n=new Kusto.Data.IntelliSense.CslCommand,n.RelativeStart=s,n),o=1;break;case 1:(a===13||a===10)&&(m=a,o=2);break;case 2:if((a===10||a===13)&&c[System.Array.index(s-1|0,c)]===a&&(a=m),a===m||d){if(l!=null){for(;!d&&(c[System.Array.index(s+1|0,c)]===13||c[System.Array.index(s+1|0,c)]===10);){s=s+1|0;d=s===(c.length-1|0)}i=(s-l.RelativeStart|0)+1|0,l.Text=e.substr(l.RelativeStart,i),l.Length=i,l.IsRunnable=!System.String.isNullOrWhiteSpace(l.Text),r.add(l)}o=0,l=null}else System.Char.isWhiteSpace(String.fromCharCode(a))||(o=1);break}return r}}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandToken",{inherits:[System.ICloneable],props:{AbsolutePositionBias:0,Value:null,TokenKind:0,AbsoluteStart:{get:function(){return this.RelativeStart+this.AbsolutePositionBias|0}},AbsoluteEnd:{get:function(){return this.RelativeEnd+this.AbsolutePositionBias|0}},RelativeStart:0,Length:0,RelativeEnd:{get:function(){return this.RelativeStart+this.Length|0}}},alias:["clone","System$ICloneable$clone"],ctors:{ctor:function(e,t,n){this.$initialize(),this.Value=e,this.TokenKind=n,this.AbsolutePositionBias=t}},methods:{CompareTo:function(e){return e==null?1:this.RelativeStart===e.RelativeStart?0:this.RelativeStart<e.RelativeStart?-1:1},clone:function(){var e;return e=new Kusto.Data.IntelliSense.CslCommandToken(this.Value,this.AbsolutePositionBias,this.TokenKind),e.RelativeStart=this.RelativeStart,e.Length=this.Length,e},equals:function(e){var t=Bridge.as(e,Kusto.Data.IntelliSense.CslCommandToken);return t==null?!1:Bridge.referenceEquals(this.Value,t.Value)&&this.TokenKind===t.TokenKind&&this.RelativeStart===t.RelativeStart&&this.RelativeEnd===t.RelativeEnd&&this.AbsolutePositionBias===t.AbsolutePositionBias},getHashCode:function(){return Bridge.getHashCode(this.Value)^Bridge.getHashCode(this.TokenKind)^this.RelativeStart^this.RelativeEnd^this.AbsolutePositionBias}}}),Bridge.define("Kusto.Data.IntelliSense.CslCommandToken.Kind",{$kind:"nested enum",statics:{fields:{TableToken:2,TableColumnToken:4,OperatorToken:8,SubOperatorToken:16,CalculatedColumnToken:32,StringLiteralToken:64,FunctionNameToken:128,UnknownToken:256,CommentToken:512,PlainTextToken:1024,DataTypeToken:2048,ControlCommandToken:4096,CommandPartToken:8192,QueryParametersToken:16384,CslCommandToken:32768,LetVariablesToken:65536,PluginToken:131072,BracketRangeToken:262144,ClientDirectiveToken:524288,IsRecognizedEntity:536870912,IsMismatchedTokenValue:1073741824}},$flags:!0}),Bridge.define("Kusto.Data.IntelliSense.CslDocumentation",{statics:{fields:{s_instance:null},props:{Instance:{get:function(){return Kusto.Data.IntelliSense.CslDocumentation.s_instance==null&&(Kusto.Data.IntelliSense.CslDocumentation.s_instance=new Kusto.Data.IntelliSense.CslDocumentation,Kusto.Data.IntelliSense.CslDocumentation.s_instance.Initialize()),Kusto.Data.IntelliSense.CslDocumentation.s_instance}}},methods:{TrimFunctionParameters:function(e){var t=System.String.indexOf(e,String.fromCharCode(40));return t>0?e.substr(0,t):e}}},fields:{m_documentation:null},props:{Topics:{get:function(){return this.m_documentation==null?System.Linq.Enumerable.empty():System.Linq.Enumerable.from(this.m_documentation,System.Collections.Generic.KeyValuePair$2(System.Tuple$2(Kusto.Data.IntelliSense.CslCommandToken.Kind,System.String),Kusto.Data.IntelliSense.CslTopicDocumentation)).select(u.$.Kusto.Data.IntelliSense.CslDocumentation.f1)}}},ctors:{init:function(){this.m_documentation=new(System.Collections.Generic.Dictionary$2(System.Tuple$2(Kusto.Data.IntelliSense.CslCommandToken.Kind,System.String),Kusto.Data.IntelliSense.CslTopicDocumentation)).ctor}},methods:{AddTopic:function(e){var t={Item1:e.TokenKind,Item2:e.Name.toLowerCase()};this.m_documentation.setItem(t,e)},GetTopic:function(e){return e.Kind===Kusto.Data.IntelliSense.OptionKind.Operator?this.GetTopic$1(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,e.Value):e.Kind===Kusto.Data.IntelliSense.OptionKind.FunctionAggregation||e.Kind===Kusto.Data.IntelliSense.OptionKind.FunctionScalar?this.GetTopic$1(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,Kusto.Data.IntelliSense.CslDocumentation.TrimFunctionParameters(e.Value)):null},GetTopic$1:function(e,t){var n={Item1:e,Item2:t.toLowerCase()},r={};return this.m_documentation.tryGetValue(n,r),r.v},GetTopicByMarkdownSource:function(e){var t,n;if(System.String.isNullOrWhiteSpace(e))return null;t=Bridge.getEnumerator(this.m_documentation);try{for(;t.moveNext();)if(n=t.Current,Bridge.referenceEquals(n.value.MarkdownSource,e))return n.value}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return null},GetTopicByName:function(e){var t,n;if(System.String.isNullOrWhiteSpace(e))return null;t=Bridge.getEnumerator(this.m_documentation);try{for(;t.moveNext();)if(n=t.Current,Bridge.referenceEquals(n.key.Item2,e))return n.value}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return null},equals:function(e){if(e==null)return!1;var t=Bridge.as(e,Kusto.Data.IntelliSense.CslDocumentation);return t==null||this.m_documentation.Count!==t.m_documentation.Count||System.Linq.Enumerable.from(t.m_documentation,System.Collections.Generic.KeyValuePair$2(System.Tuple$2(Kusto.Data.IntelliSense.CslCommandToken.Kind,System.String),Kusto.Data.IntelliSense.CslTopicDocumentation)).except(this.m_documentation).any()?!1:!System.Linq.Enumerable.from(this.m_documentation,System.Collections.Generic.KeyValuePair$2(System.Tuple$2(Kusto.Data.IntelliSense.CslCommandToken.Kind,System.String),Kusto.Data.IntelliSense.CslTopicDocumentation)).except(t.m_documentation).any()},getHashCode:function(){return Bridge.getHashCode(this.m_documentation)},Initialize:function(){System.Linq.Enumerable.from(this.m_documentation,System.Collections.Generic.KeyValuePair$2(System.Tuple$2(Kusto.Data.IntelliSense.CslCommandToken.Kind,System.String),Kusto.Data.IntelliSense.CslTopicDocumentation)).any()||(this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!~","Filters a record set for data that doesn't match a case-insensitive string.",'The following table provides a comparison of the `==` (equals) operators:\r\n\r\n|Operator |Description |Case-Sensitive |Example (yields `true`) |\r\n|-----------|--------------|----------------|-------------------------|\r\n|[`==`](equals-cs-operator.md)|Equals |Yes|`"aBc" == "aBc"`|\r\n|[`!=`](not-equals-cs-operator.md)|Not equals |Yes |`"abc" != "ABC"`|\r\n|[`=~`](equals-operator.md) |Equals |No |`"abc" =~ "ABC"`|\r\n|[`!~`](not-equals-operator.md) |Not equals |No |`"aBc" !~ "xyz"`|\r\n\r\nFor more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r\n\r\n## Performance tips\r\n\r\n[!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r\n\r\nWhen possible, use the case-sensitive [!=](not-equals-cs-operator.md).\r\n\r\n## Syntax\r\n\r\n*T* `|` `where` *column* `!~` `(`*expression*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓| The tabular input whose records are to be filtered.|\r\n| *column* | string | ✓| The column by which to filter.|\r\n| *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r\n\r\n## Returns\r\n\r\nRows in *T* for which the predicate is `true`.',`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAUNMFdBsU5BqSS1IrFYSVMhMS9FQQNJs4KdgrGBgYEmUE9BUX5WanIJxAwdZBsA00yL5oUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where (State !~ "texas") and (event_count > 3000)\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |KANSAS|3,166|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-equals-operator","not-equals-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!=","Filters a record set for data that doesn't match a case-sensitive string.",'The following table provides a comparison of the `==` (equals) operators:\r\n\r\n|Operator |Description |Case-Sensitive |Example (yields `true`) |\r\n|-----------|--------------|----------------|-------------------------|\r\n|[`==`](equals-cs-operator.md)|Equals |Yes|`"aBc" == "aBc"`|\r\n|[`!=`](not-equals-cs-operator.md)|Not equals |Yes |`"abc" != "ABC"`|\r\n|[`=~`](equals-operator.md) |Equals |No |`"abc" =~ "ABC"`|\r\n|[`!~`](not-equals-operator.md) |Not equals |No |`"aBc" !~ "xyz"`|\r\n\r\nFor more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r\n\r\n## Performance tips\r\n\r\n[!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r\n\r\n## Syntax\r\n\r\n*T* `|` `where` *column* `!=` `(`*expression*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓| The tabular input whose records are to be filtered.|\r\n| *column* | string | ✓| The column by which to filter.|\r\n| *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r\n\r\n## Returns\r\n\r\nRows in *T* for which the predicate is `true`.',`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAUNMFdB0VZByc3HP8jTxVFJUyExL0VBA0m7gp2CiYGBgSZQV0FRflZqcgnEFB1kOwDGtl9AhwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where (State != "FLORIDA") and (event_count > 4000)\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4,701|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-equals-cs-operator","not-equals-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!between","Matches the input that is outside of the inclusive range.","`!between` can operate on any numeric, datetime, or timespan expression.\r\n\r\n## Syntax\r\n\r\n*T* `|` `where` *expr* `!between` `(`*leftRange*` .. `*rightRange*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓| The tabular input whose records are to be matched.|\r\n| *expr* | scalar | ✓ | The expression to filter.|\r\n| *leftRange* | int, long, real, or datetime | ✓ | The expression of the left range. The range is inclusive.|\r\n| *rightRange* | int, long, real, datetime, or timespan | ✓ | The expression of the right range. The range is inclusive.<br/><br/>This value can only be of type [timespan](scalar-data-types/timespan.md) if *expr* and *leftRange* are both of type `datetime`. See [example](#filter-datetime-using-a-timespan-range).|\r\n\r\n## Returns\r\n\r\nRows in *T* for which the predicate of (*expr* < *leftRange* or *expr* > *rightRange*) evaluates to `true`.",`### Filter numeric values\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzA0UCguSS1QMOSqUSjPSC0CySompZaUp6bmKWiYKujpKVhqAgAyiN4KNwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1\r | where x !between (5 .. 9)\r \`\`\`\r \r **Output**\r \r |x|\r |---|\r |1|\r |2|\r |3|\r |4|\r |10|\r \r ### Filter datetime \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLCoJycxNVVBMSi0pT03NU9BISSxJLQEKaRgZGJjrApGRuaaCnp4ChrixgaYm0KTk/NK8EgDn7tLlXQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where StartTime !between (datetime(2007-07-27) .. datetime(2007-07-30))\r | count \r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |58590|\r \r ### Filter datetime using a timespan range\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLCoJycxNVVBMSi0pT03NU9BISSxJLQEKaRgZGJjrApGRuaaCnp6CcYomUF9yfmleCQDBjXU5SwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where StartTime !between (datetime(2007-07-27) .. 3d)\r | count \r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |58590|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/notbetweenoperator","notbetweenoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!contains","Filters a record set for data that doesn't include a case-sensitive string. `!contains` searches for characters rather than [terms](datatypes-string-operators.md#what-is-a-term) of three or more characters. The query scans the values in the column, which is slower than looking up a term in a term index.",`[!INCLUDE [contains-operator-comparison](../../includes/contains-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [!contains_cs](not-contains-cs-operator.md).\r \r Use \`!has\` if you're looking for a [term](datatypes-string-operators.md#what-is-a-term).\r \r ## Syntax\r \r ### Case insensitive syntax\r \r *T* \`|\` \`where\` *Column* \`!contains\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *Column* | string | ✓| The column by which to filter.|\r | *Expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTE5P68kMTOvWEEpOzFPCS6LZISCnYKxgYEBUKqgKD8rNbkEolUHWQ0AK1/nHYoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !contains "kan"\r | where event_count > 3000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4701|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-contains-operator","not-contains-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!contains_cs","Filters a record set for data that doesn't include a case-sensitive string. `!contains_cs` searches for characters rather than [terms](datatypes-string-operators.md#what-is-a-term) of three or more characters. The query scans the values in the column, which is slower than looking up a term in a term index.",`[!INCLUDE [contains-operator-comparison](../../includes/contains-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r If you're looking for a [term](datatypes-string-operators.md#what-is-a-term), use \`!has_cs\` for faster results.\r \r ## Syntax\r \r ### Case-sensitive syntax\r \r *T* \`|\` \`where\` *Column* \`!contains_cs\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *Column* | string | ✓| The column by which to filter.|\r | *Expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTE5P68kMTOvOD65WEHJMVgJKA/WAgDbLF9iXAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !contains_cs "AS"\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |-----|\r |59|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTE5P68kMTOvOD65WEEpxDVCCa4AyRQFOwVjAwMDoFRBUX5WanIJRLcOshoAY3LN3I0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !contains_cs "TEX"\r | where event_count > 3000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |KANSAS|3,166|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-contains-cs-operator","not-contains-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!endswith","Filters a record set for data that excludes a case-insensitive ending string.",`[!INCLUDE [endswith-operator-comparison](../../includes/endswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [!endswith_cs](not-endswith-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`!endswith\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered. |\r | *col* | string | ✓ | The column to filter. |\r | *expression* | string | ✓ | The expression used to filter. |\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVYAI2Sbnl+aVaGgqJFUqBJcklqQC1ZRnpBalQngKiql5KcXlmSUZCkqZxUpwSYhmBTsFIwMDA6BoQVF+VmpyCUSTDlQaADTefzN6AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize Events=count() by State\r | where State !endswith "is"\r | where Events > 2000\r | project State, Events\r \`\`\`\r \r **Output**\r \r |State|Events|\r |--|--|\r |TEXAS|4701|\r |KANSAS|3166|\r |IOWA|2337|\r |MISSOURI|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-endswith-operator","not-endswith-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!endswith_cs","Filters a record set for data that doesn't contain a case-insensitive ending string.",`[!INCLUDE [endswith-operator-comparison](../../includes/endswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`!endswith_cs\` \`(\`*expression*\`)\` \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered. |\r | *col* | string | ✓ | The column to filter. |\r | *expression* | string | ✓ | The expression used to filter. |\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVYAI2Sbnl+aVaGgqJFUqBJcklqQC1ZRnpBalQngKiql5KcXlmSUZ8cnFCkqOSgAvfsIqTgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize Events=count() by State\r | where State !endswith_cs "A"\r \`\`\`\r \r The following table only shows the first 10 results. To see the full output, run the query.\r \r |State| Events|\r |--|--|\r |TEXAS| 4701|\r |KANSAS| 3166|\r |ILLINOIS| 2022|\r |MISSOURI| 2016|\r |WISCONSIN| 1850|\r |NEW YORK| 1750|\r |COLORADO| 1654|\r |MICHIGAN| 1637|\r |KENTUCKY| 1391|\r |OHIO| 1233|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-endswith-cs-operator","not-endswith-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!has","Filters a record set for data that doesn't have a matching case-insensitive string. `!has` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`[!INCLUDE [has-operator-comparison](../../includes/has-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [!has_cs](not-has-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!has\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTEjsVhByc81XAkugaRbwU7B2MDAAChVUJSflZpcAtGlg6wGADV9h9KFAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !has "NEW"\r | where event_count > 3000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4,701|\r |KANSAS|3,166|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-has-operator","not-has-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!has_cs","Filters a record set for data that doesn't have a matching case-sensitive string. `!has_cs` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`[!INCLUDE [has-operator-comparison](../../includes/has-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!has_cs\` \`(\`*expression*\`)\` \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTEjsTg+uVhBKS+1XAkoB1YOAGM3qTFYAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !has_cs "new"\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |-----|\r |67|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-has-cs-operator","not-has-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!hasprefix","Filters a record set for data that doesn't include a case-insensitive starting string.",`For best performance, use strings of three characters or more. \`!hasprefix\` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.\r \r [!INCLUDE [has-prefix-operator-comparison](../../includes/has-prefix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [!hasprefix_cs](not-hasprefix-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *Column* \`!hasprefix\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered.|\r | *Column* | string | ✓ | The column used to filter.|\r | *Expression* | string | ✓ | The expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTEjsbigKDUts0JByU8JLolkgoKdgpGBgQFQqqAoPys1uQSiUwdZDQCJ3wPtiQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !hasprefix "N"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4701|\r |KANSAS|3166|\r |IOWA|2337|\r |ILLINOIS|2022|\r |MISSOURI|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-hasprefix-operator","not-hasprefix-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!hasprefix_cs","Filters a record set for data that doesn't have a case-sensitive starting string. `!hasprefix_cs` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`|Operator |Description |Case-Sensitive |Example (yields \`true\`) |\r |-----------|--------------|----------------|-------------------------|\r |[\`hasprefix\`](hasprefix-operator.md) |RHS is a term prefix in LHS |No |\`"North America" hasprefix "ame"\`|\r |[\`!hasprefix\`](not-hasprefix-operator.md) |RHS isn't a term prefix in LHS |No |\`"North America" !hasprefix "mer"\`|\r |[\`hasprefix_cs\`](hasprefix-cs-operator.md) |RHS is a term prefix in LHS |Yes |\`"North America" hasprefix_cs "Ame"\`|\r |[\`!hasprefix_cs\`](not-hasprefix-cs-operator.md) |RHS isn't a term prefix in LHS |Yes |\`"North America" !hasprefix_cs "CA"\`|\r \r > [!NOTE]\r > The following abbreviations are used in the above table:\r >\r > * RHS = right hand side of the expression\r > * LHS = left hand side of the expression\r \r For more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!hasprefix_cs\` \`(\`*expression*\`)\` \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTEjsbigKDUtsyI+uVhBKUAJKA/WAgDAMC2uXAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !hasprefix_cs "P"\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |-----|\r |64|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-hasprefix-cs-operator","not-hasprefix-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!hassuffix","Filters a record set for data that doesn't have a case-insensitive ending string. `!hassuffix` returns `true` if there's no [term](datatypes-string-operators.md#what-is-a-term) inside string column ending with the specified string expression.",`[!INCLUDE [hassuffix-operator-comparison](../../includes/hassuffix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use [!hassuffix_cs](not-hassuffix-cs-operator.md) - a case-sensitive version of the operator.\r \r > [!NOTE]\r > Text index cannot be fully utilized for this function, therefore the performance of this function is comparable to [!endswith](not-endswith-operator.md) function, though the semantics is different.\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!hassuffix\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTEjsbi4NC0ts0JByVEJLolkgoKdgpGBgQFQqqAoPys1uQSiUwdZDQCFtu1diQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !hassuffix "A"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4701|\r |KANSAS|3166|\r |ILLINOIS|2022|\r |MISSOURI|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-hassuffix-operator","not-hassuffix-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!hassuffix_cs","Filters a record set for data that doesn't have a case-sensitive ending string. `!hassuffix_cs` returns `true` if there is no [term](datatypes-string-operators.md#what-is-a-term) inside string column ending with the specified string expression.",`[!INCLUDE [hassuffix-operator-comparison](../../includes/hassuffix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r > [!NOTE]\r > Text index cannot be fully utilized for this function, therefore the performance of this function is comparable to [!endswith_cs](not-endswith-cs-operator.md) function, though the semantics is different.\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!hassuffix_cs\` \`(\`*expression*\`)\` \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQTEjsbi4NC0tsyI+uVhByTFYCa4AyRQFOwUjAwMDoFRBUX5WanIJRLcOshoAideoe40AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !hassuffix_cs "AS"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |IOWA|2337|\r |ILLINOIS|2022|\r |MISSOURI|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-hassuffix-cs-operator","not-hassuffix-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!in","Filters a record set for data without a case-sensitive string.",`[!INCLUDE [in-operator-comparison](../../includes/in-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`!in\` \`(\`*expression*\`,\` ... \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar or tabular | ✓ | An expression that specifies the values for which to search. Each expression can be a [scalar](scalar-data-types/index.md) value or a [tabular expression](tabularexpressionstatements.md) that produces a set of values. If a tabular expression has multiple columns, the first column is used. The search will consider up to 1,000,000 distinct values.|\r \r > [!NOTE]\r > An inline tabular expression must be enclosed with double parentheses. See [example](#tabular-expression).\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`### List of scalars\r \r The following query shows how to use \`!in\` with a comma-separated list of scalar values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVVDMzFPQUHLz8Q/ydHFU0lFQcnf1D3L3BDP9XMMVIv2DvJU0QbqS80vzSgDNxq+9SgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State !in ("FLORIDA", "GEORGIA", "NEW YORK") \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |54291|\r \r ### Dynamic array\r \r The following query shows how to use \`!in\` with a dynamic array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVVDMzFPQSKnMS8zNTNaIVnLz8Q/ydHFU0lFQcnf1D3L3BDP9XMMVIv2DvJViNTVBBiTnl+aVAAD4lvyYVQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State !in (dynamic(["FLORIDA", "GEORGIA", "NEW YORK"])) \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |54291| \r \r The same query can also be written with a [let statement](letstatement.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLkksSS1WsFVIqcxLzM1M1ohWcvPxD/J0cVTSUVByd/UPcvcEM/1cwxUi/YO8lWI1rbmCS/KLcl3LUvNKihW4ahTKM1KLUhWCQUYpKGbmKWhATNUEShWX5uYmFmVWpSok55fmlWhoKiRVQlQCAKFqvAF+AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let states = dynamic(["FLORIDA", "GEORGIA", "NEW YORK"]);\r StormEvents \r | where State !in (states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |54291|\r \r ### Tabular expression\r \r The following query shows how to use \`!in\` with an inline tabular expression. Notice that an inline tabular expression must be enclosed with double parentheses.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVVDMzFPQ0AjILyjNSSzJzM9zSSxJVIApQQgr2CmYGoABULKgKD8rNbkEYoKmJtDE4tLc3MSizKpUheT80rwSDU2FpEqINABw+yCTewAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State !in ((PopulationData | where Population > 5000000 | project State))\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|Count|\r |--|--|\r |KANSAS|3166|\r |IOWA|2337|\r |NEBRASKA|1766|\r |OKLAHOMA|1716|\r |SOUTH DAKOTA|1567|\r |...|...|\r \r The same query can also be written with a [let statement](letstatement.md). Notice that the double parentheses as provided in the last example aren't necessary in this case.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NvQrCQBCE+zzF2CWdjZXEKvZCHkDWsCQnd7dhby+i+PD5ESFTznwf49ngSXu+JyPjhBo3GbMncxIbMsIXr4GVdzUuOB23LOOo8uTO0K76uWhNNFwnjpZQ/NVtw8FFlPuvagFSDoHUfRid5Ghlhcf7x89eufmimgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let large_states = PopulationData | where Population > 5000000 | project State;\r StormEvents \r | where State !in (large_states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|Count|\r |--|--|\r |KANSAS|3166|\r |IOWA|2337|\r |NEBRASKA|1766|\r |OKLAHOMA|1716|\r |SOUTH DAKOTA|1567|\r |...|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-in-cs-operator","not-in-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!in~","Filters a record set for data without a case-insensitive string.",`[!INCLUDE [in-operator-comparison](../../includes/in-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [!in~](not-in-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`!in~\` \`(\`*expression*\`,\` ... \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar or tabular | ✓ | An expression that specifies the values for which to search. Each expression can be a [scalar](scalar-data-types/index.md) value or a [tabular expression](tabularexpressionstatements.md) that produces a set of values. If a tabular expression has multiple columns, the first column is used. The search will consider up to 1,000,000 distinct values. |\r \r > [!NOTE]\r > An inline tabular expression must be enclosed with double parentheses. See [example](#tabular-expression).\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`### List of scalars\r \r The following query shows how to use \`!in~\` with a comma-separated list of scalar values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVVDMzKtT0FByy8kvykxJVNJRUHJPzS9KzwQz/VLLFSLzi7KVNEHakvNL80oA5o2K+ksAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State !in~ ("Florida", "Georgia", "New York") \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |54,291| \r \r ### Dynamic array\r \r The following query shows how to use \`!in~\` with a dynamic array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVVDMzKtT0EipzEvMzUzWiFZyy8kvykxJVNJRUHJPzS9KzwQz/VLLFSLzi7KVYjU1QSYk55fmlQAAs+z4r1YAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State !in~ (dynamic(["Florida", "Georgia", "New York"])) \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |54291| \r \r The same query can also be written with a [let statement](letstatement.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyWMvQrCQBAG+zzF51V34BtISrWzSSXB4kwWXczdwt7GEJE8uz/pBmaYgQzFolFBjX7OMXHnW3cYRLmPbgt3JNEb//FEE86iD3cJu6ox0bR/UraC6o3pTkpofitsOC/w6zZ8XRlTisovQidjNh9wndf0A62lrc5/AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let states = dynamic(["Florida", "Georgia", "New York"]);\r StormEvents \r | where State !in~ (states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |54291|\r \r ### Tabular expression\r \r The following query shows how to use \`!in~\` with an inline tabular expression. Notice that an inline tabular expression must be enclosed with double parentheses.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVVDMzKtT0NAIyC8ozUksyczPc0ksSVSAqUEIK9gpmBqAAVCyoCg/KzW5BGKEpibQyOLS3NzEosyqVIXk/NK8Eg1NhaRKiDQAEmmU0nwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State !in~ ((PopulationData | where Population > 5000000 | project State))\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |--|--|\r |KANSAS|3166|\r |IOWA|2337|\r |NEBRASKA|1766|\r |OKLAHOMA|1716|\r |SOUTH DAKOTA|1567|\r |...|...|\r \r The same query can also be written with a [let statement](letstatement.md). Notice that the double parentheses as provided in the last example aren't necessary in this case.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHISSxKT40vLkksSS1WsFUIyC8ozUksyczPc0ksSVSoUSjPSC1KRRJWsFMwNQADoGRBUX5WanKJQjBIuzVXcEl+Ua5rWWpeSbECF0wrWE5BMTOvTkED2TJNoIri0tzcxKLMqlSF5PzSvBINTYWkSogGANAXanqbAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let large_states = PopulationData | where Population > 5000000 | project State;\r StormEvents \r | where State !in~ (large_states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |--|--|\r |KANSAS|3166|\r |IOWA|2337|\r |NEBRASKA|1766|\r |OKLAHOMA|1716|\r |SOUTH DAKOTA|1567|\r |...|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-in-operator","not-in-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!startswith","Filters a record set for data that doesn't start with a case-insensitive search string.",`[!INCLUDE [startswith-operator-comparison](../../includes/startswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [!startswith_cs](not-startswith-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!startswith\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQbG4JLGopLg8syRDQSlTCS6LZISCnYKRgYEBUKqgKD8rNbkEolUHWQ0ASJ6KLIoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !startswith "i"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4701|\r |KANSAS|3166|\r |MISSOURI|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-startswith-operator","not-startswith-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"!startswith_cs","Filters a record set for data that doesn't start with a case-sensitive search string.",`[!INCLUDE [startswith-operator-comparison](../../includes/startswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`!startswith_cs\` \`(\`*expression*\`)\` \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered.|\r | *column* | string | ✓| The column by which to filter.|\r | *expression* | scalar | ✓| The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPQbG4JLGopLg8syQjPrlYQclTCa4AyRQFOwUjAwMDoFRBUX5WanIJRLcOshoAsNzTI40AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State !startswith_cs "I"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4701|\r |KANSAS|3166|\r |MISSOURI|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/not-startswith-cs-operator","not-startswith-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"=~","Filters a record set for data with a case-insensitive string.",'The following table provides a comparison of the `==` (equals) operators:\r\n\r\n|Operator |Description |Case-Sensitive |Example (yields `true`) |\r\n|-----------|--------------|----------------|-------------------------|\r\n|[`==`](equals-cs-operator.md)|Equals |Yes|`"aBc" == "aBc"`|\r\n|[`!=`](not-equals-cs-operator.md)|Not equals |Yes |`"abc" != "ABC"`|\r\n|[`=~`](equals-operator.md) |Equals |No |`"abc" =~ "ABC"`|\r\n|[`!~`](not-equals-operator.md) |Not equals |No |`"aBc" !~ "xyz"`|\r\n\r\nFor more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r\n\r\n## Performance tips\r\n\r\n[!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r\n\r\nWhen possible, use [==](equals-cs-operator.md) - a case-sensitive version of the operator.\r\n\r\n## Syntax\r\n\r\n*T* `|` `where` *col* `=~` `(`*expression*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓| The tabular input whose records are to be filtered. |\r\n| *col* | string | ✓ | The column to filter. |\r\n| *expression* | string | ✓ | The expression used to filter. |\r\n\r\n## Returns\r\n\r\nRows in *T* for which the predicate is `true`.',`The \`State\` values in the \`StormEvents\` table are capitalized. The following query matches\r columns with the value "KANSAS".\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLElVsK1TUMpOzCtOLFYCyhQU5WelJpcogJV6puhAFAEAU9ecID4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State =~ "kansas"\r | project EventId, State\r \`\`\`\r \r The following table only shows the first 10 results. To see the full output, run the query.\r \r |EventId|State|\r |--|--|\r |70787 |KANSAS|\r |43450 |KANSAS|\r |43451 |KANSAS|\r |38844 |KANSAS|\r |18463 |KANSAS|\r |18464 |KANSAS|\r |18495 |KANSAS|\r |43466 |KANSAS|\r |43467 |KANSAS|\r |43470 |KANSAS|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/equals-operator","equals-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"==","Filters a record set for data matching a case-sensitive string.",'The following table provides a comparison of the `==` operators:\r\n\r\n|Operator |Description |Case-Sensitive |Example (yields `true`) |\r\n|-----------|--------------|----------------|-------------------------|\r\n|[`==`](equals-cs-operator.md)|Equals |Yes|`"aBc" == "aBc"`|\r\n|[`!=`](not-equals-cs-operator.md)|Not equals |Yes |`"abc" != "ABC"`|\r\n|[`=~`](equals-operator.md) |Equals |No |`"abc" =~ "ABC"`|\r\n|[`!~`](not-equals-operator.md) |Not equals |No |`"aBc" !~ "xyz"`|\r\n\r\nFor more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r\n\r\n## Performance tips\r\n\r\n[!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r\n\r\n## Syntax\r\n\r\n*T* `|` `where` *col* `==` `(`*expression*`,` ... `)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓| The tabular input whose records are to be filtered. |\r\n| *col* | string | ✓ | The column to filter. |\r\n| *expression* | string | ✓ | The expression used to filter. |\r\n\r\n## Returns\r\n\r\nRows in *T* for which the predicate is `true`.',`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5lIAghqF8ozUolSF4JLEklQFW1sFpezEvOLEYiWobHJ+aV4JACj9bS01AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State == "kansas"\r | count \r \`\`\`\r \r |Count|\r |---|\r |0| \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLElVsLVVUPJ29At2DFYCyiTnl+aVAABkHSoPLQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State == "KANSAS"\r | count \r \`\`\`\r \r |Count|\r |---|\r |3,166|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/equals-cs-operator","equals-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"abs","Calculates the absolute value of the input.",`## Syntax\r \r \`abs(\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x* | int, real, or timespan | ✓ | The value to make absolute. |\r \r ## Returns\r \r Absolute value of x.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhMKtbQNdUEADsyYK4NAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print abs(-5)\r \`\`\`\r \r **Output**\r \r |print_0|\r |------|\r |5|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/abs-function","abs-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"acos","Calculates the angle whose cosine is the specified number. Inverse operation of [`cos()`](cosfunction.md).","## Syntax\r\n\r\n`acos(`*x*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *x* | real | ✓ | The value used to calculate the arc cosine. |\r\n\r\n## Returns\r\n\r\nThe value of the arc cosine of `x`. The return value is `null` if `x` < -1 or `x` > 1.","","https://docs.microsoft.com/azure/data-explorer/kusto/query/acosfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"active_users_count","Calculates distinct count of values, where each value has appeared in at least a minimum number of periods in a lookback period.",'Useful for calculating distinct counts of "fans" only, while not including appearances of "non-fans". A user is counted as a "fan" only if it was active during the lookback period. The lookback period is only used to determine whether a user is considered `active` ("fan") or not. The aggregation itself doesn\'t include users from the lookback window. In comparison, the [sliding_window_counts](sliding-window-counts-plugin.md) aggregation is performed over a sliding window of the lookback period.\r\n\r\n## Syntax\r\n\r\n*T* `| evaluate` `active_users_count(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *LookbackWindow*`,` *Period*`,` *ActivePeriodsCount*`,` *Bin* `,` [*dim1*`,` *dim2*`,` ...]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n| -- | -- | -- | -- |\r\n| *T* | string | ✓ | The tabular input used to count active users.|\r\n| *IdColumn* | string | ✓ | The name of the column with ID values that represent user activity. |\r\n| *TimelineColumn* | string | ✓ | The name of the column that represents timeline. |\r\n| *Start* | datetime | ✓ | The analysis start period. |\r\n| *End* | datetime | ✓ | The analysis end period. |\r\n| *LookbackWindow* | timespan | ✓ | The time window defining a period where user appearance is checked. The lookback period starts at ([current appearance] - [lookback window]) and ends on ([current appearance]). |\r\n| *Period* | timespan | ✓ | A constant to count as single appearance (a user will be counted as active if it appears in at least distinct ActivePeriodsCount of this timespan. |\r\n| *ActivePeriodsCount* | decimal | ✓ | The minimal number of distinct active periods to decide if user is active. Active users are those users who appeared in at least (equal or greater than) active periods count. |\r\n| *Bin* | decimal, datetime, or timespan | ✓ | A constant value of the analysis step period. May also be a string of `week`, `month`, or `year`. All periods will be the corresponding [startofweek](startofweekfunction.md), [startofmonth](startofmonthfunction.md), or[startofyear](startofyearfunction.md) functions. |\r\n| *dim1*, *dim2*, ... | dynamic | | An array of the dimensions columns that slice the activity metrics calculation. |\r\n\r\n## Returns\r\n\r\nReturns a table that has distinct count values for IDs that have appeared in ActivePeriodCounts in the following periods: the lookback period, each timeline period, and each existing dimensions combination.\r\n\r\nOutput table schema is:\r\n\r\n|*TimelineColumn*|dim1|..|dim_n|dcount_values|\r\n|---|---|---|---|---|\r\n|type: as of *TimelineColumn*|..|..|..|long|',`Calculate weekly number of distinct users that appeared in at least three different days over a period of prior eight days. Period of analysis: July 2018.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42SwWvCMBTG74X+Dw9PFlJI0rJWhweF3XYYWNlhDIltGMGaSJO6y/74vdZWNlFMcnrv/ZJ85Ptq6WDtRONgAZVw0qmDnHLK8phmMWXRcxjUiLzo6haQXIBXY/Y7Ue7fla7MN7J5NUzeZKNMd5qNnWXp1Eme+xYHydBfKY1VNmIFFt2TuHe1nG6sbObWNUp/EShQhXXicJyPmqIw+AgDwDVZTQj060rvU8xnEXkIJfQCLe9A+DX84U0IpT5Q7vEc89HEUh8o84A49RDOU/zzTzSrgB+QJ1G3SIDozd226JbdlqbVrnfuj2XkHDjShYpcBYcMcSH/Q0K6bES/nOHnRKwCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Start = datetime(2018-07-01);\r let End = datetime(2018-07-31);\r let LookbackWindow = 8d;\r let Period = 1d;\r let ActivePeriods = 3;\r let Bin = 7d;\r let T = datatable(User:string, Timestamp:datetime)\r [\r "B", datetime(2018-06-29),\r "B", datetime(2018-06-30),\r "A", datetime(2018-07-02),\r "B", datetime(2018-07-04),\r "B", datetime(2018-07-08),\r "A", datetime(2018-07-10),\r "A", datetime(2018-07-14),\r "A", datetime(2018-07-17),\r "A", datetime(2018-07-20),\r "B", datetime(2018-07-24)\r ];\r T | evaluate active_users_count(User, Timestamp, Start, End, LookbackWindow, Period, ActivePeriods, Bin)\r \`\`\`\r \r **Output**\r \r |Timestamp|dcount|\r |---|---|\r |2018-07-01 00:00:00.0000000|1|\r |2018-07-15 00:00:00.0000000|1|\r \r A user is considered active if it fulfills both of the following criteria:\r \r * The user was seen in at least three distinct days (Period = 1d, ActivePeriods=3).\r * The user was seen in a lookback window of 8d before and including their current appearance.\r \r \r In the illustration below, the only appearances that are active by this criteria are the following instances: User A on 7/20 and User B on 7/4 (see plugin results above).\r The appearances of User B are included for the lookback window on 7/4, but not for the Start-End time range of 6/29-30.\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/active-users-count-plugin","active-users-count-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"activity_counts_metrics","Calculates useful activity metrics for each time window compared/aggregated to *all* previous time windows. Metrics include: total count values, distinct count values, distinct count of new values, and aggregated distinct count. Compare this plugin to [activity_metrics plugin](activity-metrics-plugin.md), in which every time window is compared to its previous time window only.","## Syntax\r\n\r\n*T* `| evaluate` `activity_counts_metrics(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *Step* [`,` *Dimensions*]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input used to count activities. |\r\n| *IdColumn* | string | ✓ | The name of the column with ID values that represent user activity. |\r\n| *TimelineColumn* | string | ✓ | The name of the column that represents the timeline. |\r\n| *Start* | datetime | ✓ | The analysis start period. |\r\n| *End* | datetime | ✓ | The analysis end period. |\r\n| *Step* | decimal, datetime, or timespan | ✓ | The analysis window period. The value may also be a string of `week`, `month`, or `year`, in which case all periods would be [startofweek](startofweekfunction.md), [startofmonth](startofmonthfunction.md), or [startofyear](startofyearfunction.md). |\r\n| *Dimensions* | string | | Zero or more comma-separated dimensions columns that slice the activity metrics calculation. |\r\n\r\n## Returns\r\n\r\nReturns a table that has the total count values, distinct count values, distinct count of new values, and aggregated distinct count for each time window. If *Dimensions* are provided, then there's another column for each dimension in the output table.\r\n\r\nThe following table describes the output table schema.\r\n\r\n| Column name | Type | Description |\r\n|---|---|---|\r\n| `Timestamp` | Same as the provided *TimelineColumn* argument| The time window start time. |\r\n| `count` | long | The total records count in the time window and *dim(s)* |\r\n| `dcount` | long | The distinct ID values count in the time window and *dim(s)* |\r\n| `new_dcount` | long | The distinct ID values in the time window and *dim(s)* compared to all previous time windows. |\r\n| `aggregated_dcount` | long | The total aggregated distinct ID values of *dim(s)* from first-time window to current (inclusive). |",`### Daily activity counts\r \r The next query calculates daily activity counts for the provided input table.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5XSzwuCMBQH8Lvg/7CbCQs0g6Lw0I9DdW2dImS5EYOp4V5J0B/fKxU6jEUMD+PzeG/yfVoCMcBrSAUHCaqQg1EUT4bRdBjF4dz3NBbIUlh43HOjSlE1aSy6OyMpwXI8Zy0HByPrrZgZqFV5oYRhDxxYXGd9x9D3jr4XLAJKbG+gaGuH7Ry2dNjKaqOPMYfZ57W2sVri6Pnb7PMSx/+1tv/bxm87YYiE4fck8s71DasIz0HdFTyyvLqVYLJCYpi56aL9ypS2u0TfG0O7vQhfyOSsfmMCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let start=datetime(2017-08-01);\r let end=datetime(2017-08-04);\r let window=1d;\r let T = datatable(UserId:string, Timestamp:datetime)\r [\r 'A', datetime(2017-08-01),\r 'D', datetime(2017-08-01),\r 'J', datetime(2017-08-01),\r 'B', datetime(2017-08-01),\r 'C', datetime(2017-08-02),\r 'T', datetime(2017-08-02),\r 'J', datetime(2017-08-02),\r 'H', datetime(2017-08-03),\r 'T', datetime(2017-08-03),\r 'T', datetime(2017-08-03),\r 'J', datetime(2017-08-03),\r 'B', datetime(2017-08-03),\r 'S', datetime(2017-08-03),\r 'S', datetime(2017-08-04),\r ];\r T\r | evaluate activity_counts_metrics(UserId, Timestamp, start, end, window)\r \`\`\`\r \r **Output**\r \r |\`Timestamp\`|\`count\`|\`dcount\`|\`new_dcount\`|\`aggregated_dcount\`|\r |---|---|---|---|---|\r |2017-08-01 00:00:00.0000000|4|4|4|4|\r |2017-08-02 00:00:00.0000000|3|3|2|6|\r |2017-08-03 00:00:00.0000000|6|5|2|8|\r |2017-08-04 00:00:00.0000000|1|1|0|8|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/activity-counts-metrics-plugin","activity-counts-metrics-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"activity_engagement","Calculates activity engagement ratio based on ID column over a sliding timeline window.",`The activity_engagement plugin can be used for calculating DAU/WAU/MAU (daily/weekly/monthly activities).\r \r ## Syntax\r \r *T* \`| evaluate\` \`activity_engagement(\`*IdColumn*\`,\` *TimelineColumn*\`,\` [*Start*\`,\` *End*\`,\`] *InnerActivityWindow*\`,\` *OuterActivityWindow* [\`,\` *dim1*\`,\` *dim2*\`,\` ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input used to calculate engagement. |\r | *IdCoumn* | string | ✓ | The name of the column with ID values that represent user activity. |\r | *TimelineColumn* | string | ✓ | The name of the column that represents timeline. |\r | *Start* | datetime | | The analysis start period. |\r | *End* | datetime | | The analysis end period. |\r | *InnerActivityWindow* | timespan | ✓ | The inner-scope analysis window period. |\r | *OuterActivityWindow* | timespan | ✓ | The outer-scope analysis window period. |\r | *dim1*, *dim2*, ... | dynamic | | An array of the dimensions columns that slice the activity metrics calculation. |\r \r ## Returns\r \r Returns a table that has a distinct count of ID values inside an inner-scope window, inside an outer-scope window, and the activity ratio for each inner-scope window period for each existing dimensions combination.\r \r Output table schema is:\r \r |TimelineColumn|dcount_activities_inner|dcount_activities_outer|activity_ratio|dim1|..|dim_n|\r |---|---|---|---|--|--|--|--|--|--|\r |type: as of *TimelineColumn*|long|long|double|..|..|..|`,`### DAU/WAU calculation\r \r The following example calculates DAU/WAU (Daily Active Users / Weekly Active Users ratio) over a randomly generated data.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21RQWrDMBC8B/KHvUVKbGy1hByKD6GBviDkUIoR1sZVsS0jr0MCfXxXiigp1NgCrWdmZ3aLAt5wQK8JwevBuB6MJg3uDPOEHnRD9mLJ4rRcdEhQT6Q9QRVQSLZH8VSqXV4qfuVLwuBg/kM8RwR3aRFqo29w9twuKZK782AiHEGZ5eIb8EqhFMTIdW5ohYi8PJFkoYx8AHoGhhBCbtRDuQ5Jpio2FknIrLfl2ssM/tw3quQzV1xXEoJEf8nxOrImWFPdhYJVuo3oziJQJXS2twRMDc9yURTwqrtm7sJMD/tjcdof2RZZFz1ddDeHP2myN07d6hZ7HEi8r6xZfWRxOlkKmcW5sCH+dve4o3df2FCCHfRcn/Rc/QrGXmv2ExN4ZvMiwyaaT9b7AZnMt5byAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-01-01);\r let _end = datetime(2017-01-31);\r range _day from _start to _end step 1d\r | extend d = tolong((_day - _start)/1d)\r | extend r = rand()+1\r | extend _users=range(tolong(d*50*r), tolong(d*50*r+100*r-1), 1) \r | mv-expand id=_users to typeof(long) take 1000000\r // Calculate DAU/WAU ratio\r | evaluate activity_engagement(['id'], _day, _start, _end, 1d, 7d)\r | project _day, Dau_Wau=activity_ratio*100 \r | render timechart \r \`\`\`\r \r \r \r ### DAU/MAU calculation\r \r The following example calculates DAU/WAU (Daily Active Users / Weekly Active Users ratio) over a randomly generated data.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VRwWrDMAy9F/oPutVuExKvlB1GDmWFnXrsaYxgYjXzSOLgKKWFffxk14yOhcRg5b2n96SigDcc0GtC8HowrgejSYM7wzyhB92QvViyOC0XHRLUE2lPUAUUku1RPJXqOS8Vv/IlYXAw/xG7fBsR3KVFqI2+wdlzu6RI7s6DiXAEZZaLb8ArhVIQI9e5oRUi8vJEkoUy8gHoGRhCCLlRD+U6JJmq2FgkIbPelWsvM/hz36iSz1xxXUkIEv0lx+vImmBNdRcKVuk2ojuLQJXQ2d4SMDU8y0VRwKvumrkLMz3sT8Vxf2JbZF30dNHdHP6kyd44datb7HEg8b6yZvWRxelkKWQW58KG+NuW97yjd1/YUMId9Fwf9Vz9KsZmazYUI3im8ybDKppPFvwB0tS5hPMBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-01-01);\r let _end = datetime(2017-05-31);\r range _day from _start to _end step 1d\r | extend d = tolong((_day - _start)/1d)\r | extend r = rand()+1\r | extend _users=range(tolong(d*50*r), tolong(d*50*r+100*r-1), 1) \r | mv-expand id=_users to typeof(long) take 1000000\r // Calculate DAU/MAU ratio\r | evaluate activity_engagement(['id'], _day, _start, _end, 1d, 30d)\r | project _day, Dau_Mau=activity_ratio*100 \r | render timechart \r \`\`\`\r \r \r \r ### DAU/MAU calculation with additional dimensions\r \r The following example calculates DAU/WAU (Daily Active Users / Weekly Active Users ratio) over a randomly generated data with additional dimension (\`mod3\`).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VRwWrDMAy9D/oPojBqtwmJF8oOI4eywk499jRGMLGaeSRxcJTSwj5+shtGx0JisPL03tNTlsEb9ug1IXjdG9eB0aTBnWAa0YOuyZ4tWRwXDy0SVCNpT1AGFJLtUDzl6jnNFb/yZcZgb/4jtmkREazSIFRGX+HkWW5mJHfrg5FwAGUWD9+AFwqlQEaudX0jROxL5yaZKSPvgJ6BYQghN+quXIVJxjIKi5nIrLf52ssE/tw3KuczVVxXEgJFd07xMjAnWFPeiIJVug7oTiK0SmhtZwm4NTx3up0zBTsaydeaxDJcy2XCRPAIBfvOMnjVbT21Ifz97pgddkf2T9ZFkrNup/BnXsGV42l0gx32JN5X1qw+khhjMqeRxADZOX9FzkcQjPEM3n1hTTN6r6fqoKfylzdKrtn/rSXO7ZmK1x/2V38y+Q8r5V3jKAIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-01-01);\r let _end = datetime(2017-05-31);\r range _day from _start to _end step 1d\r | extend d = tolong((_day - _start)/1d)\r | extend r = rand()+1\r | extend _users=range(tolong(d*50*r), tolong(d*50*r+100*r-1), 1) \r | mv-expand id=_users to typeof(long) take 1000000\r | extend mod3 = strcat("mod3=", id % 3)\r // Calculate DAU/MAU ratio\r | evaluate activity_engagement(['id'], _day, _start, _end, 1d, 30d, mod3)\r | project _day, Dau_Mau=activity_ratio*100, mod3 \r | render timechart \r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/activity-engagement-plugin","activity-engagement-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"activity_metrics","Calculates useful metrics that include distinct count values, distinct count of new values, retention rate, and churn rate. This plugin is different from [activity_counts_metrics plugin](activity-counts-metrics-plugin.md) in which every time window is compared to *all* previous time windows.",`## Syntax\r \r *T* \`| evaluate\` \`activity_metrics(\`*IdColumn*\`,\` *TimelineColumn*\`,\` [*Start*\`,\` *End*\`,\`] *Window* [\`,\` *dim1*\`,\` *dim2*\`,\` ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The input used to calculate activity metrics. |\r | *IdCoumn* | string | ✓ | The name of the column with ID values that represent user activity. |\r | *TimelineColumn* | string | ✓ | The name of the column that represents timeline. |\r | *Start* | datetime | ✓ | The analysis start period. |\r | *End* | datetime | ✓ | The analysis end period. |\r | *Step* | decimal, datetime, or timespan | ✓ | The analysis window period. This value may also be a string of \`week\`, \`month\`, or \`year\`, in which case all periods will be [startofweek](startofweekfunction.md), [startofmonth](startofmonthfunction.md), or [startofyear](startofyearfunction.md) respectively. |\r | *dim1*, *dim2*, ... | dynamic | | An array of the dimensions columns that slice the activity metrics calculation. |\r \r ## Returns\r \r The plugin returns a table with the distinct count values, distinct count of new values, retention rate, and churn rate for each timeline period for each existing dimensions combination.\r \r Output table schema is:\r \r |*TimelineColumn*|dcount_values|dcount_newvalues|retention_rate|churn_rate|dim1|..|dim_n|\r |---|---|---|---|---|--|--|--|--|--|--|\r |type: as of *TimelineColumn*|long|long|double|double|..|..|..|\r \r ### Notes\r \r ***Retention Rate Definition***\r \r \`Retention Rate\` over a period is calculated as:\r \r > *number of customers returned during the period*\r > / (divided by)\r > *number customers at the beginning of the period*\r \r where the \`# of customers returned during the period\` is defined as:\r \r > *number of customers at end of period*\r > \\- (minus)\r > *number of new customers acquired during the period*\r \r \`Retention Rate\` can vary from 0.0 to 1.0\r A higher score means a larger number of returning users.\r \r ***Churn Rate Definition***\r \r \`Churn Rate\` over a period is calculated as:\r \r > *number of customers lost in the period*\r > / (divided by)\r > *number of customers at the beginning of the period*\r \r where the \`# of customer lost in the period\` is defined as:\r \r > *number of customers at the beginning of the period*\r > \\- (minus)\r > *number of customers at the end of the period*\r \r \`Churn Rate\` can vary from 0.0 to 1.0\r The higher score means the larger number of users are NOT returning to the service.\r \r ***Churn vs. Retention Rate***\r The churn vs. retention Rate is derived from the definition of \`Churn Rate\` and \`Retention Rate\`. The following calculation is always true:\r \r > [\`Retention Rate\`] = 100.0% - [\`Churn Rate\`]`,`### Weekly retention rate and churn rate\r \r The next query calculates retention and churn rate for week-over-week window.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VRy26EIBTdm/gPdzc4g1FsJrNoXPcjmsYQuc7QqBi4mjHpxxeQxTRlQeDmPDiHqoIPnNFKQrByVmYCJUmCGWB1aEH2pDdNGl2ejUjQOZKWoA0oJD0ha2pxK2tR1k3xnjA4q/+Ia/kmAsK73BE6JXcYrLdLimQOHjjCBYTKsx/AJ4VRECMzmvnOWOSViVRUQhUvQOuBIQQrLuJl3IUkro3GLAmp87U+24LDn/ulqf1eCj8XUXjaSnwuXhK0ag+d8FLaFzQDC8wCRj1pAlHHlWdVFa03Oa6h1FTg3k1IVveOfZ60On3x2ABPQXjMzuF2xFms+caeEsSiT0HazF34JQ79Y7XHOWCtJ/p/CkX3Dy/1C38j6lLRAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-01-02);\r let _end = datetime(2017-05-31);\r range _day from _start to _end step 1d\r | extend d = tolong((_day - _start)/1d)\r | extend r = rand()+1\r | extend _users=range(tolong(d*50*r), tolong(d*50*r+200*r-1), 1)\r | mv-expand id=_users to typeof(long) take 1000000\r //\r | evaluate activity_metrics(['id'], _day, _start, _end, 7d)\r | project _day, retention_rate, churn_rate\r | render timechart\r \`\`\`\r \r **Output**\r \r |_day|retention_rate|churn_rate|\r |---|---|---|\r |2017-01-02 00:00:00.0000000|NaN|NaN|\r |2017-01-09 00:00:00.0000000|0.179910044977511|0.820089955022489|\r |2017-01-16 00:00:00.0000000|0.744374437443744|0.255625562556256|\r |2017-01-23 00:00:00.0000000|0.612096774193548|0.387903225806452|\r |2017-01-30 00:00:00.0000000|0.681141439205955|0.318858560794045|\r |2017-02-06 00:00:00.0000000|0.278145695364238|0.721854304635762|\r |2017-02-13 00:00:00.0000000|0.223172628304821|0.776827371695179|\r |2017-02-20 00:00:00.0000000|0.38|0.62|\r |2017-02-27 00:00:00.0000000|0.295519001701645|0.704480998298355|\r |2017-03-06 00:00:00.0000000|0.280387770320656|0.719612229679344|\r |2017-03-13 00:00:00.0000000|0.360628154795289|0.639371845204711|\r |2017-03-20 00:00:00.0000000|0.288008028098344|0.711991971901656|\r |2017-03-27 00:00:00.0000000|0.306134969325153|0.693865030674847|\r |2017-04-03 00:00:00.0000000|0.356866537717602|0.643133462282398|\r |2017-04-10 00:00:00.0000000|0.495098039215686|0.504901960784314|\r |2017-04-17 00:00:00.0000000|0.198296836982968|0.801703163017032|\r |2017-04-24 00:00:00.0000000|0.0618811881188119|0.938118811881188|\r |2017-05-01 00:00:00.0000000|0.204657727593507|0.795342272406493|\r |2017-05-08 00:00:00.0000000|0.517391304347826|0.482608695652174|\r |2017-05-15 00:00:00.0000000|0.143667296786389|0.856332703213611|\r |2017-05-22 00:00:00.0000000|0.199122325836533|0.800877674163467|\r |2017-05-29 00:00:00.0000000|0.063468992248062|0.936531007751938|\r \r \r \r ### Distinct values and distinct 'new' values\r \r The next query calculates distinct values and 'new' values (IDs that didn't appear in previous time window) for week-over-week window.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VRTWuEMBC9C/6HuW3cVTSWZQ/Fc39EKRLM7DaLJpKMdoX++CYxlC3NITCP95E3qWt4Q41WEIIVWpoJpCAB5gqLQwtiILUqUujybESC3pGwBF1gIakJWdvwS9XwqmmL18RBLf8zztULDwyfckPopdjgan1cciSz68ARzsBlnn0DPihAwYzMaPSNsairkqiouSyeiNYTQwlWnPgT3IcmrovBLBnJ47k52qKEP/OpbfxdcY/zaDytFT5mbwlKdrtPeCltM5orC8oCRjUpAt7Ek2d1HaNXMS5hqWmBWz8hWTU49n5Q8vBRxg2UqUgZu5dw2evM1txxoESRg1k09cEQ3e+o8WtHgsB6tf+ssO3h0/v9ADoJzJ7WAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-01-02);\r let _end = datetime(2017-05-31);\r range _day from _start to _end step 1d\r | extend d = tolong((_day - _start)/1d)\r | extend r = rand()+1\r | extend _users=range(tolong(d*50*r), tolong(d*50*r+200*r-1), 1)\r | mv-expand id=_users to typeof(long) take 1000000\r //\r | evaluate activity_metrics(['id'], _day, _start, _end, 7d)\r | project _day, dcount_values, dcount_newvalues\r | render timechart\r \`\`\`\r \r **Output**\r \r | _day | dcount_values | dcount_newvalues |\r |--|--|--|\r | 2017-01-02 00:00:00.0000000 | 630 | 630 |\r | 2017-01-09 00:00:00.0000000 | 738 | 575 |\r | 2017-01-16 00:00:00.0000000 | 1187 | 841 |\r | 2017-01-23 00:00:00.0000000 | 1092 | 465 |\r | 2017-01-30 00:00:00.0000000 | 1261 | 647 |\r | 2017-02-06 00:00:00.0000000 | 1744 | 1043 |\r | 2017-02-13 00:00:00.0000000 | 1563 | 432 |\r | 2017-02-20 00:00:00.0000000 | 1406 | 818 |\r | 2017-02-27 00:00:00.0000000 | 1956 | 1429 |\r | 2017-03-06 00:00:00.0000000 | 1593 | 848 |\r | 2017-03-13 00:00:00.0000000 | 1801 | 1423 |\r | 2017-03-20 00:00:00.0000000 | 1710 | 1017 |\r | 2017-03-27 00:00:00.0000000 | 1796 | 1516 |\r | 2017-04-03 00:00:00.0000000 | 1381 | 1008 |\r | 2017-04-10 00:00:00.0000000 | 1756 | 1162 |\r | 2017-04-17 00:00:00.0000000 | 1831 | 1409 |\r | 2017-04-24 00:00:00.0000000 | 1823 | 1164 |\r | 2017-05-01 00:00:00.0000000 | 1811 | 1353 |\r | 2017-05-08 00:00:00.0000000 | 1691 | 1246 |\r | 2017-05-15 00:00:00.0000000 | 1812 | 1608 |\r | 2017-05-22 00:00:00.0000000 | 1740 | 1017 |\r | 2017-05-29 00:00:00.0000000 | 960 | 756 |\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/activity-metrics-plugin","activity-metrics-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ago","Subtracts the given [timespan](scalar-data-types/timespan.md) from the current UTC time.",`Like \`now()\`, if you use \`ago()\` multiple times in a single query statement, the current UTC time\r being referenced is the same across all uses.\r \r ## Syntax\r \r \`ago(\`*timespan*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |---|---|---|---|\r | *timespan* | timespan | ✓ | The interval to subtract from the current UTC clock time \`now()\`. For a full list of possible timespan values, see [timespan literals](scalar-data-types/timespan.md#timespan-literals).|\r \r ## Returns\r \r A [datetime](./scalar-data-types/datetime.md) value equal to the current time minus the timespan.`,"All rows with a timestamp in the past hour:\r\n\r\n```\r\nT | where Timestamp > ago(1h)\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/agofunction","agofunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"arg_max","Finds a row in the group that maximizes *ExprToMaximize*.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r > **Deprecated aliases:** argmax()\r \r ## Syntax\r \r \`arg_max\` \`(\`*ExprToMaximize*\`,\` *\\** | *ExprToReturn* [\`,\` ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ExprToMaximize* | string | ✓ | The expression used for aggregation calculation. |\r | *ExprToReturn* | string | ✓ | The expression used for returning the value when *ExprToMaximize* is maximum. Use a wildcard \`*\` to return all columns of the input table. |\r \r ## Returns\r \r Returns a row in the group that maximizes *ExprToMaximize*, and the values of columns specified in *ExprToReturn*.`,`Find the maximum latitude of a storm event in each state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSguzc1NLMqsSlVILEqPz02s0HBKTc/M80ks0VGAsPKTE0sy8/M0FZIqFYJLEktSATqyPZtCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | summarize arg_max(BeginLat, BeginLocation) by State\r \`\`\`\r \r The results table displays only the first 10 rows.\r \r | State | BeginLat | BeginLocation |\r | -------------------- | -------- | -------------------- |\r | MISSISSIPPI | 34.97 | BARTON |\r | VERMONT | 45 | NORTH TROY |\r | AMERICAN SAMOA | -14.2 | OFU |\r | HAWAII | 22.2113 | PRINCEVILLE |\r | MINNESOTA | 49.35 | ARNESEN |\r | RHODE ISLAND | 42 | WOONSOCKET |\r | INDIANA | 41.73 | FREMONT |\r | WEST VIRGINIA | 40.62 | CHESTER |\r | SOUTH CAROLINA | 35.18 | LANDRUM |\r | TEXAS | 36.4607 | DARROUZETT |\r | ... | ... | ... |\r \r Find the last time an event with a direct death happened in each state showing all the columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVcElNLMkodsksSk0uUbBTMABKFJfm5iYWZValKiQWpcfnJlZoBJckFpWEZOam6ihoaSokVSoABUpSAQPollZPAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where DeathsDirect > 0\r | summarize arg_max(StartTime, *) by State\r \`\`\`\r \r The results table displays only the first 10 rows and first 3 columns.\r \r | State | StartTime | EndTime | ... |\r | -------------- | -------------------- | -------------------- | --- |\r | GUAM | 2007-01-27T11:15:00Z | 2007-01-27T11:30:00Z | ... |\r | MASSACHUSETTS | 2007-02-03T22:00:00Z | 2007-02-04T10:00:00Z | ... |\r | AMERICAN SAMOA | 2007-02-17T13:00:00Z | 2007-02-18T11:00:00Z | ... |\r | IDAHO | 2007-02-17T13:00:00Z | 2007-02-17T15:00:00Z | ... |\r | DELAWARE | 2007-02-25T13:00:00Z | 2007-02-26T01:00:00Z | ... |\r | WYOMING | 2007-03-10T17:00:00Z | 2007-03-10T17:00:00Z | ... |\r | NEW MEXICO | 2007-03-23T18:42:00Z | 2007-03-23T19:06:00Z | ... |\r | INDIANA | 2007-05-15T14:14:00Z | 2007-05-15T14:14:00Z | ... |\r | MONTANA | 2007-05-18T14:20:00Z | 2007-05-18T14:20:00Z | ... |\r | LAKE MICHIGAN | 2007-06-07T13:00:00Z | 2007-06-07T13:00:00Z | ... |\r |... | ... | ...| ... |\r \r The following example demonstrates null handling.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc6bc487453a064d3c9de.northeurope/databases/new-free-database?query=H4sIAAAAAAAAA31PwQrCMAy97ytCT530osfdnKBX8SCIiHQsjEKWjrRjKH68nWwoguYdkry8l5DaxoSKUG+ld7GAEMVxY2Djycu7PaIE57kAxzGHcwYp1LrrCJUBdcA6paX5oneCyKlIHs09UT4JSssJo+KERH74K/m1ZI9WxnkpfuCP6zM/+1Ymu2QPCH3bWnF3BCvNtXWsp5cMLHKobvD6/wlU5dHuDwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Fruit: string, Color: string, Version: int) [\r "Apple", "Red", 1,\r "Apple", "Green", int(null),\r "Banana", "Yellow", int(null),\r "Banana", "Green", int(null),\r "Pear", "Brown", 1,\r "Pear", "Green", 2,\r ]\r | summarize arg_max(Version, *) by Fruit\r \`\`\`\r \r **Output**\r \r | Fruit | Version | Color |\r |--|--|--|\r | Apple | 1 | Red |\r | Banana | | Yellow |\r | Pear | 2 | Green |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arg-max-aggfunction","arg-max-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"arg_min","Finds a row in the group that minimizes *ExprToMinimize*.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r > **Deprecated aliases:** argmin()\r \r ## Syntax\r \r \`arg_min\` \`(\`*ExprToMinimize*\`,\` *\\** | *ExprToReturn* [\`,\` ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ExprToMinimize*| string | ✓ | The expression used for aggregation calculation. |\r | *ExprToReturn* | string | ✓ | The expression used for returning the value when *ExprToMinimize* is minimum. Use a wildcard (*) to return all columns of the input table. |\r \r ## Null handling\r \r When *ExprToMinimize* is null for all rows in a group, one row in the group is picked. Otherwise, rows where *ExprToMinimize* is null are ignored.\r \r ## Returns\r \r Returns a row in the group that minimizes *ExprToMinimize*, and the value of *ExprToReturn*. Use or \`*\` to return the entire row.`,`Find the minimum latitude of a storm event in each state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoLs3NTSzKrEpVSCxKj8/NzNNwSk3PzPNJLNFRgLDykxNLMvPzNBWSKhWCSxJLUgG8tM4mQwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | summarize arg_min(BeginLat, BeginLocation) by State\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | BeginLat | BeginLocation |\r | -------------- | -------- | ------------- |\r | AMERICAN SAMOA | -14.3 | PAGO PAGO |\r | CALIFORNIA | 32.5709 | NESTOR |\r | MINNESOTA | 43.5 | BIGELOW |\r | WASHINGTON | 45.58 | WASHOUGAL |\r | GEORGIA | 30.67 | FARGO |\r | ILLINOIS | 37 | CAIRO |\r | FLORIDA | 24.6611 | SUGARLOAF KEY |\r | KENTUCKY | 36.5 | HAZEL |\r | TEXAS | 25.92 | BROWNSVILLE |\r | OHIO | 38.42 | SOUTH PT |\r | ... | ... | ... |\r \r Find the first time an event with a direct death happened in each state showing all of the columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVXBJTSzJKHbJLEpNLlGwUzAAyRSX5uYmFmVWpSokFqXH52bmaQSXJBaVhGTmpuooaGkqJFUqAAVKUgHnoTY6UQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where DeathsDirect > 0\r | summarize arg_min(StartTime, *) by State\r \`\`\`\r \r The results table shown includes only the first 10 rows and first 3 columns.\r \r | State | StartTime | EndTime | ... |\r | ---------- | -------------------- | -------------------- | --- |\r | INDIANA | 2007-01-01T00:00:00Z | 2007-01-22T18:49:00Z | ... |\r | FLORIDA | 2007-01-03T10:55:00Z | 2007-01-03T10:55:00Z | ... |\r | NEVADA | 2007-01-04T09:00:00Z | 2007-01-05T14:00:00Z | ... |\r | LOUISIANA | 2007-01-04T15:45:00Z | 2007-01-04T15:52:00Z | ... |\r | WASHINGTON | 2007-01-09T17:00:00Z | 2007-01-09T18:00:00Z | ... |\r | CALIFORNIA | 2007-01-11T22:00:00Z | 2007-01-24T10:00:00Z | ... |\r | OKLAHOMA | 2007-01-12T00:00:00Z | 2007-01-18T23:59:00Z | ... |\r | MISSOURI | 2007-01-13T03:00:00Z | 2007-01-13T08:30:00Z | ... |\r | TEXAS | 2007-01-13T10:30:00Z | 2007-01-13T14:30:00Z | ... |\r | ARKANSAS | 2007-01-14T03:00:00Z | 2007-01-14T03:00:00Z | ... |\r | ... | ... | ... | ... |\r \r The following example demonstrates null handling.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA31QPQvCQAzdC/0PoVMrt+jYzQp2FQdBRORKQzlIcyW9UhR/vKlYFEHzhny9F5LUNigqwnQrgws59EEcNwY2nry80wNK7zzn4DhkcIojUEvWXUeYGEj2WKtbmu96KYisgapSHoiymVFYVkyUIxL58T/n55gdWpkIhfiRPzeYG7NypY1zHN2hH9rWirshWGkureP0dZqBRQbVFZ5/eADFBqWOFwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Fruit: string, Color: string, Version: int) [\r "Apple", "Red", 1,\r "Apple", "Green", int(null),\r "Banana", "Yellow", int(null),\r "Banana", "Green", int(null),\r "Pear", "Brown", 1,\r "Pear", "Green", 2,\r ]\r | summarize arg_min(Version, *) by Fruit\r \`\`\`\r \r **Output**\r \r | Fruit | Version | Color |\r |--|--|--|\r | Apple | 1 | Red |\r | Banana | | Yellow |\r | Pear | 1 | Brown |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arg-min-aggfunction","arg-min-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"around","Creates a `bool` value indicating if the first argument is within a range around the center value.",'## Syntax\r\n\r\n`around(`*value*`,`*center*`,`*delta*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n|*value*| int, long, real, datetime, or timespan | ✓ | The value to compare to the *center*.|\r\n| *center* | int, long, real, datetime, or timespan | ✓ | The center of the range defined as [(`center`-`delta`) .. (`center` + `delta`)]. |\r\n| *delta* | int, long, real, datetime, or timespan | ✓ | The delta value of the range defined as [(`center`-`delta`) .. (`center` + `delta`)].|\r\n\r\n## Returns\r\n\r\nReturns `true` if the value is within the range, `false` if the value is outside the range.\r\nReturns `null` if any of the arguments is `null`.\r\n\r\n## Example: Filtering values around a specific timestamp\r\n\r\nThe following example filters rows around specific timestamp.\r\n\r\n> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVUgpUeBSAIK0ovxchZTEktSSzNxUDSMDI0NdAxBSMDC0MjDQhCgqyceuxAihpLgktUDBMDczj6tGoTwjtShVIbEovzQvRSOlRAeX+cYGmjpgPZoA56xhi5QAAAA=" target="_blank">Run the query</a>\r\n\r\n```\r\nrange dt \r\n from datetime(2021-01-01 01:00) \r\n to datetime(2021-01-01 02:00) \r\n step 1min\r\n| where around(dt, datetime(2021-01-01 01:30), 1min)\r\n```\r\n\r\n**Output**\r\n\r\n|dt|\r\n|---|\r\n|2021-01-01 01:29:00.0000000|\r\n|2021-01-01 01:30:00.0000000|\r\n|2021-01-01 01:31:00.0000000|',"","https://docs.microsoft.com/azure/data-explorer/kusto/query/around-function","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_concat","Concatenates many dynamic arrays to a single array.",`## Syntax\r \r \`array_concat(\`*arr*\`[\`, \`*arr2*, ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *arr1...arrN* | dynamic | ✓ | The arrays to concatenate into a dynamic array.|\r \r ## Returns\r \r Returns a dynamic array of arrays with arr1, arr2, ... , arrN.`,`The following example shows concatenated arrays.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA13LMQ6DMAxG4b1S7/CPBGUJnXsWZKUuEogkcj3EiMMTmCrWT+8JpYlR8ZW8IkAzXvgpF4TnYwdX5fSB4d2SHsOfbc3sZhQaForLSCJkXfXmN+dBw91h7vyK5Jmj4uIx5hRJOwrn4Q5bQXxcmgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | extend a1 = pack_array(x,y,z), a2 = pack_array(x, y)\r | project array_concat(a1, a2)\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |[1,2,4,1,2]|\r |[2,4,8,2,4]|\r |[3,6,12,3,6]|\r \r ## See also\r \r * [pack_array()](packarrayfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arrayconcatfunction","arrayconcatfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_iff","Element-wise iif function on dynamic arrays.",`> The \`array_iff()\` and \`array_iif()\` functions are equivalent\r \r ## Syntax\r \r \`array_iff(\`*condition_array*, *when_true*, *when_false*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *condition_array*| dynamic | ✓| An array of *boolean* or numeric values.|\r | *when_true* | dynamic or scalar | ✓ | An array of values or primitive value. This will be the result when *condition_array* is *true*.|\r | *when_false* | dynamic or scalar | ✓ | An array of values or primitive value. This will be the result when *condition_array* is *false*.|\r \r > [!NOTE]\r >\r > * The length of the return value will be the same as the input *condition_array*.\r > * Numeric condition values are considered \`true\` if not equal to 0.\r > * Non-numeric and non-boolean condition values will be null in the corresponding index of the return value.\r > * If *when_true* or *when_false* is shorter than *condition_array*, missing values will be treated as null.\r \r ## Returns\r \r Returns a dynamic array of the values taken either from the *when_true* or *when_false* array values, according to the corresponding value of the condition array.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjOz0vJLMnMz7NNqcxLzM1M1oguKSpN1UlLzClO1QExYzV1FHIQsoY6RjrGILEihJiJjqmOWaymAi9XjUJqRUlqXopCUWqxbWJRUWJlfGZmmgbcFqBRQJ2aACda2uZ8AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print condition=dynamic([true,false,true]), if_true=dynamic([1,2,3]), if_false=dynamic([4,5,6]) \r | extend res= array_iff(condition, if_true, if_false)\r \`\`\`\r \r **Output**\r \r |condition|if_true|if_false|res|\r |---|---|---|---|\r |[true, false, true]|[1, 2, 3]|[4, 5, 6]|[1, 5, 3]|\r \r ### Numeric condition values\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjOz0vJLMnMz7NNqcxLzM1M1og21DHQMTWI1dRRyEyLLykqTbVVqkwtVgJz0xJzioH8vHwlBa4ahdSKktS8FIWi1GLbxKKixMr4zMw0DbiJcP0InZoAPCLjbHUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print condition=dynamic([1,0,50]), if_true="yes", if_false="no" \r | extend res= array_iff(condition, if_true, if_false)\r \`\`\`\r \r **Output**\r \r |condition|if_true|if_false|res|\r |---|---|---|---|\r |[1, 0, 50]|yes|no|[yes, no, yes]|\r \r ### Non-numeric and non-boolean condition values\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WNwQrDIBBE7/2KxZOBFIx3v6SUsMS1LOhadFMa6MdXekhhYAYej3k2FoWtSmTlKiEegoU3ezO9FoKugz/ghXknM0NEJeVC1rjlOuKd92aaQfac76M5rdp2CstvJsydgrt8gN5KEqFRD9gaHitzsufp6f2t6QsxYYlomAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print condition=dynamic(["some string value", datetime("01-01-2022"), null]), if_true=1, if_false=0\r | extend res= array_iff(condition, if_true, if_false)\r \`\`\`\r \r **Output**\r \r |condition|if_true|if_false|res|\r |---|---|---|---|\r |[true, false, true]|1|0|[null, null, null]|\r \r ### Mismatched array lengths\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjOz0vJLMnMz7NNqcxLzM1M1oguKSpN1YETsZo6Cplp8SAmQomhjhFUPC0xpxhJwljHJFZTgatGIbWiJDUvRaEotdg2sagosTI+MzNNA24Z3EiEGZoACxaCE5AAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print condition=dynamic([true,true,true]), if_true=dynamic([1,2]), if_false=dynamic([3,4]) \r | extend res= array_iff(condition, if_true, if_false)\r \`\`\`\r \r **Output**\r \r |condition|if_true|if_false|res|\r |---|---|---|---|\r |[true, true, true]|[1, 2]|[3, 4]|[1, 2, null]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arrayifffunction","arrayifffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_index_of","Searches an array for the specified item, and returns its position.",`## Syntax\r \r \`array_index_of(\`*array*,*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *array*| dynamic | ✓ | The array to search.|\r | *value* | long, integer, double, datetime, timespan, decimal, string, guid, or boolean | ✓ | The value to lookup. |\r | *start* | number | | The search start position. A negative value will offset the starting search value from the end of the array by \`abs(start_index)\` steps.\r | *length* | int | | The number of values to examine. A value of -1 means unlimited length.\r | *occurrence* | int | The number of the occurrence. The default is 1.\r \r ## Returns\r \r Returns a zero-based index position of lookup.\r Returns -1 if the value isn't found in the array.\r Returns *null* for irrelevant inputs (*occurrence* < 0 or *length* < -1).`,`The following example shows the position number of specific words within the array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52T7WrCMBiF/3sVB//MQoq0dV8Mr2QMielbDUuTkqRO735pmsk2dQ5LG0jhPOfkvK0iD27tsj5o3koxe536rXRThum4cj2stOdtp+j0xVv2Mums1H4CWe8LLAcYP6ykrmm/Ms0sbNmgyRCu+RzKmPe+Q2N6XUPqcHe9h/OBsZmADZTyAuUYomBVdo5lyRG3Yks1LNcbQgJW14FlBI7ykIZb79BY0yIqUDCsY0zTOfDGk0WJHVc9OQZnvpIIru881jRGSu6LC+5DvyVbnDEeDYwQvbWkBcE0ySEh768dqGR5kZ30ndQP59VptOGoeXjKbJyXI2FCu9/C/BpdbDqRH/9DrhJZG4RPzf5gH6mRkqhPf1LzI4823MsdjS2mwX1IpWIH4B6KO48KpKgl7V3CP1/Cxx8gX9yK/wT41ILVWgMAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let arr=dynamic(["this", "is", "an", "example", "an", "example"]);\r print\r idx1 = array_index_of(arr,"an") // lookup found in input string\r , idx2 = array_index_of(arr,"example",1,3) // lookup found in researched range \r , idx3 = array_index_of(arr,"example",1,2) // search starts from index 1, but stops after 2 values, so lookup can't be found\r , idx4 = array_index_of(arr,"is",2,4) // search starts after occurrence of lookup\r , idx5 = array_index_of(arr,"example",2,-1) // lookup found\r , idx6 = array_index_of(arr, "an", 1, -1, 2) // second occurrence found in input range\r , idx7 = array_index_of(arr, "an", 1, -1, 3) // no third occurrence in input array\r , idx8 = array_index_of(arr, "an", -3) // negative start index will look at last 3 elements\r , idx9 = array_index_of(arr, "is", -4) // negative start index will look at last 3 elements\r \`\`\`\r \r **Output**\r \r |idx1|idx2|idx3|idx4|idx5|idx6|idx7|idx8|idx9|\r |----|----|----|----|----|----|----|----|----|\r |2 |3 |-1 |-1 |3 |4 |-1 |4 |-1 |\r \r ## See also\r \r Use [set_has_element(\`arr\`, \`value\`)](sethaselementfunction.md) to check whether a value exists in an array. This function will improve the readability of your query. Both functions have the same performance.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arrayindexoffunction","arrayindexoffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_length","Calculates the number of elements in a dynamic array.",`> **Deprecated aliases:** arraylength()\r \r ## Syntax\r \r \`array_length(\`*array*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *array* | dynamic | ✓ | The array for which to calculate length.\r \r ## Returns\r \r Returns the number of elements in *array*, or \`null\` if *array* isn't an array.`,`The following example shows the number of elements in the array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKkqsjM9JzUsvydAoSCwqTo3PKs7P01CPNtRRMNJRMNZRUErLLy1SilXX1AQAe4KK2TMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print array_length(dynamic([1, 2, 3, "four"]))\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |4|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arraylengthfunction","arraylengthfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_reverse","Reverses the order of the elements in a dynamic array.",`## Syntax\r \r \`array_reverse(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*value*| dynamic | ✓| The array to reverse.|\r \r ## Returns\r \r Returns an array that contains the same elements as the input array in reverse order.`,`This example shows an array of words reversed.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1ohWKsnILFbSUVCCkIl5IDK1IjG3ICdVKVZTgZerRqGgKD8rNblEISi1uDSnxBaoP7Eyvii1LLWoOFUDyNMEAKks9PlYAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic(["this", "is", "an", "example"]) \r | project Result=array_reverse(arr)\r \`\`\`\r \r **Output**\r \r |Result|\r |---|\r |["example","an","is","this"]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/array-reverse-function","array-reverse-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_rotate_left","Rotates values inside a `dynamic` array to the left.",`## Syntax\r \r \`array_rotate_left(\`*array*, *rotate_count*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*array* | dynamic | ✓| The array to rotate.|\r |*rotate_count*| integer | ✓| The number of positions that array elements will be rotated to the left. If the value is negative, the elements will be rotated to the right.|\r \r ## Returns\r \r Dynamic array containing the same elements as the original array with each element rotated according to *rotate_count*.`,`Rotating to the left by two positions:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eSqUUitKEnNSwGpiC/KL0ksSU2xBbITK6G8+JzUtBINoIiOgpEmACPTVOVNAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_rotated=array_rotate_left(arr, 2)\r \`\`\`\r \r **Output**\r \r |arr|arr_rotated|\r |---|---|\r |[1,2,3,4,5]|[3,4,5,1,2]|\r \r Rotating to the right by two positions by using negative rotate_count value:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eSqUUitKEnNSwGpiC/KL0ksSU2xBbITK6G8+JzUtBINoIiOgq6RJgCXfX6MTgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_rotated=array_rotate_left(arr, -2)\r \`\`\`\r \r **Output**\r \r |arr|arr_rotated|\r |---|---|\r |[1,2,3,4,5]|[4,5,1,2,3]|\r \r ## See also\r \r * To rotate an array to the right, use [array_rotate_right()](array_rotate_rightfunction.md).\r * To shift an array to the left, use [array_shift_left()](array_shift_leftfunction.md).\r * To shift an array to the right, use [array_shift_right()](array_shift_rightfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/array_rotate_leftfunction","array_rotate_leftfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_rotate_right","Rotates values inside a `dynamic` array to the right.",`## Syntax\r \r \`array_rotate_right(\`*array*, *rotate_count*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*array* | dynamic | ✓| The array to rotate.|\r |*rotate_count*| integer | ✓| The number of positions that array elements will be rotated to the right. If the value is negative, the elements will be rotated to the Left.|\r \r ## Returns\r \r Dynamic array containing the same elements as the original array with each element rotated according to *rotate_count*.`,`Rotating to the right by two positions:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eSqUUitKEnNSwGpiC/KL0ksSU2xBbITK6G8+KLM9IwSDaCQjoKRJgBslCYKTgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_rotated=array_rotate_right(arr, 2)\r \`\`\`\r \r **Output**\r \r |arr|arr_rotated|\r |---|---|\r |[1,2,3,4,5]|[4,5,1,2,3]|\r \r Rotating to the left by two positions by using negative rotate_count value:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eSqUUitKEnNSwGpiC/KL0ksSU2xBbITK6G8+KLM9IwSDaCQjoKukSYA0VPyak8AAAA=" target="_blank">Run the query</a>\r \r **Results**\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_rotated=array_rotate_right(arr, -2)\r \`\`\`\r \r **Output**\r \r |arr|arr_rotated|\r |---|---|\r |[1,2,3,4,5]|[3,4,5,1,2]|\r \r ## See also\r \r * To rotate an array to the left, use [array_rotate_left()](array_rotate_leftfunction.md).\r * To shift an array to the left, use [array_shift_left()](array_shift_leftfunction.md).\r * To shift an array to the right, use [array_shift_right()](array_shift_rightfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/array_rotate_rightfunction","array_rotate_rightfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_shift_left","Shifts the values inside a `dynamic` array to the left.",`## Syntax\r \r \`array_shift_left(\`*array*, *shift_count* \`[,\` *default_value* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*array* | dynamic |✓ | The array to shift.|\r |*shift_count* | integer | ✓ | The number of positions that array elements will be shifted to the left. If the value is negative, the elements will be shifted to the right. |\r |*default_value* | scalar | | The value used for an element that was shifted and removed. The default is null or an empty string depending on the type of elements in the *array*.|\r \r ## Returns\r \r Returns a dynamic array containing the same number of elements as in the original array. Each element has been shifted according to *shift_count*. New elements that are added in place of removed elements will have a value of *default_value*.`,`Shifting to the left by two positions:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eTlqlFIrShJzUsBKYkvzshMK7EFshIrIez4nNS0Eg2ggI6CkSYADEKYSUsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_shift=array_shift_left(arr, 2)\r \`\`\`\r \r **Output**\r \r |\`arr\`|\`arr_shift\`|\r |---|---|\r |[1,2,3,4,5]|[3,4,5,null,null]|\r \r Shifting to the left by two positions and adding default value:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eTlqlFIrShJzUsBKYkvzshMK7EFshIrIez4nNS0Eg2ggI6CkY6CrqEmAA+qvHJPAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_shift=array_shift_left(arr, 2, -1)\r \`\`\`\r \r **Output**\r \r |\`arr\`|\`arr_shift\`|\r |---|---|\r |[1,2,3,4,5]|[3,4,5,-1,-1]|\r \r Shifting to the right by two positions by using negative *shift_count* value:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eTlqlFIrShJzUsBKYkvzshMK7EFshIrIez4nNS0Eg2ggI6CrhEQG2oCAIeuighQAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_shift=array_shift_left(arr, -2, -1)\r \`\`\`\r \r **Output**\r \r |arr|arr_shift|\r |---|---|\r |[1,2,3,4,5]|[-1,-1,1,2,3]|\r \r ## See also\r \r * To shift an array to the right, use [array_shift_right()](array_shift_rightfunction.md).\r * To rotate an array to the right, use [array_rotate_right()](array_rotate_rightfunction.md).\r * To rotate an array to the left, use [array_rotate_left()](array_rotate_leftfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/array_shift_leftfunction","array_shift_leftfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_shift_right","Shifts the values inside a dynamic array to the right.",`## Syntax\r \r \`array_shift_right(\`*array*, *shift_count* [, *default_value* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*array* | dynamic |✓ | The array to shift.|\r |*shift_count* | integer | ✓ | The number of positions that array elements will be shifted to the right. If the value is negative, the elements will be shifted to the left. |\r |*default_value* | scalar | | The value used for an element that was shifted and removed. The default is null or an empty string depending on the type of elements in the *array*.|\r \r ## Returns\r \r Returns a dynamic array containing the same amount of the elements as in the original array. Each element has been shifted according to *shift_count*. New elements that are added instead of the removed elements will have a value of *default_value*.`,`Shifting to the right by two positions:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eTlqlFIrShJzUsBKYkvzshMK7EFshIrIez4osz0jBINoIiOgpEmAKRlW6FMAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_shift=array_shift_right(arr, 2)\r \`\`\`\r \r **Output**\r \r |arr|arr_shift|\r |---|---|\r |[1,2,3,4,5]|[null,null,1,2,3]|\r \r Shifting to the right by two positions and adding a default value:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eTlqlFIrShJzUsBKYkvzshMK7EFshIrIez4osz0jBINoIiOgpGOgq6hJgBHJWeJUAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_shift=array_shift_right(arr, 2, -1)\r \`\`\`\r \r **Output**\r \r |arr|arr_shift|\r |---|---|\r |[1,2,3,4,5]|[-1,-1,1,2,3]|\r \r Shifting to the left by two positions by using a negative shift_count value:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1eTlqlFIrShJzUsBKYkvzshMK7EFshIrIez4osz0jBINoIiOgq4REBtqAgCqvHZwUQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5])\r | extend arr_shift=array_shift_right(arr, -2, -1)\r \`\`\`\r \r **Output**\r \r |arr|arr_shift|\r |---|---|\r |[1,2,3,4,5]|[3,4,5,-1,-1]|\r \r ## See also\r \r * To shift an array to the left, use [array_shift_left()](array_shift_leftfunction.md).\r * To rotate an array to the right, use [array_rotate_right()](array_rotate_rightfunction.md).\r * To rotate an array to the left, use [array_rotate_left()](array_rotate_leftfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/array_shift_rightfunction","array_shift_rightfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_slice","Extracts a slice of a dynamic array.",`## Syntax\r \r \`array_slice\`(*array*, *start*, *end*)\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *array* | dynamic | ✓ | The array from which to extract the slice.|\r | *start*| int | ✓ | The start index of the slice (inclusive). Negative values are converted to \`array_length\`+\`start\`.|\r | *end*| int | ✓ | The last index of the slice. (inclusive). Negative values are converted to \`array_length\`+\`end\`.|\r \r > [!NOTE]\r > Out of bounds indices are ignored.\r \r ## Returns\r \r Returns a dynamic array of the values in the range [\`start..end\`] from \`array\`.`,`The following examples return a slice of the array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMY7VVOCqUUitKEnNS1EozslMTk2xBapKrIwHczSAbB0FQx0FI00AeoUyQ0IAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3]) \r | extend sliced=array_slice(arr, 1, 2)\r \`\`\`\r \r **Output**\r \r |arr|sliced|\r |---|---|\r |[1,2,3]|[2,3]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1VTgqlFIrShJzUtRKM7JTE5NsQWqTKyMB3M0gGwdBSMdBV1DTQAv2T4vRwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5]) \r | extend sliced=array_slice(arr, 2, -1)\r \`\`\`\r \r **Output**\r \r |arr|sliced|\r |---|---|\r |[1,2,3,4,5]|[3,4,5]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1VTgqlFIrShJzUtRKM7JTE5NsQWqTKyMB3M0gGwdBV1jIDbSBABajMjTSAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5]) \r | extend sliced=array_slice(arr, -3, -2)\r \`\`\`\r \r **Output**\r \r |arr|sliced|\r |---|---|\r |[1,2,3,4,5]|[3,4]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arrayslicefunction","arrayslicefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_sort_asc","Receives one or more arrays. Sorts the first array in ascending order. Orders the remaining arrays to match the reordered first array.",`## Syntax\r \r \`array_sort_asc(\`*array1*[, ..., *argumentN*]\`)\`\r \r \`array_sort_asc(\`*array1*[, ..., *argumentN*]\`,\`*nulls_last*\`)\`\r \r If *nulls_last* isn't provided, a default value of \`true\` is used.\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*array1...arrayN*| dynamic | ✓ | The array or list of arrays to sort.|\r | *nulls_last* | bool | | Determines whether \`null\`s should be last.|\r \r ## Returns\r \r Returns the same number of arrays as in the input, with the first array sorted in ascending order, and the remaining arrays ordered to match the reordered first array.\r \r \`null\` will be returned for every array that differs in length from the first one.\r \r If an array contains elements of different types, it will be sorted in the following order:\r \r * Numeric, \`datetime\`, and \`timespan\` elements\r * String elements\r * Guid elements\r * All other elements\r \r ## Example 1 - Sorting two arrays\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFILCpKrDRUsFVIqcxLzM1M1og21DHWMdEx1TGK1bTmyoEpMUJWopSopKOUBMTJQJwCxKlKIMUFRZl5UOXxxflFJfGJxckaEAt0IIZoAgAts93scwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let array1 = dynamic([1,3,4,5,2]);\r let array2 = dynamic(["a","b","c","d","e"]);\r print array_sort_asc(array1,array2)\r \`\`\`\r \r **Output**\r \r |array1_sorted|array2_sorted|\r |---|---|\r |[1,2,3,4,5]|["a","e","b","c","d"]|\r \r > [!NOTE]\r > The output column names are generated automatically, based on the arguments to the function. To assign different names to the output columns, use the following syntax: \`... | extend (out1, out2) = array_sort_asc(array1,array2)\`\r \r ## Example 2 - Sorting substrings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHwS8xNLVawVVDyys/I0wlILM3RcU/NL0pP1QnKzEvPV7LmygGqCs4vKklNgaktLilKTiyJTywqSqzUAJPxxUAF8YnFyRrFBTmZJRpglToKSjpKmpoQypqroCgzr0ShKLW4NKcEaAiSkQD+ChdoiAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Names = "John,Paul,George,Ringo";\r let SortedNames = strcat_array(array_sort_asc(split(Names, ",")), ",");\r print result = SortedNames\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |George,John,Paul,Ringo|\r \r ## Example 3 - Combining summarize and array_sort_asc\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5WR0WoDIRBF3/crJC9ZYQO7tiU00C8JQSYqiY2uy4yhpPTjq23sFmIK1ZdxOPdy5WqI6e6daVXwHka9oYh2PHTs+pbRerPREE0eOnYmg9IWjDfbhqWzVEcf9LJLY0Fb0Q/Pq369Gp543i+yclh037yjL7jG96LCa4tXwQ0varw/FcVtnscKj/5uHrGu8NObvpun9t+//B9mXvzTP/O75oPROZWF9t2wjFIEPxF7YR5ORjpLsf3dJv8pt8pwtr+UmpP1hOHVqFg2s1baUaojhjG4cLAKnAyoDSZLQISLpIBRAql2jjSL+XbYfQJov9dSfAIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(command:string, command_time:datetime, user_id:string)\r [\r 'chmod', datetime(2019-07-15), "user1",\r 'ls', datetime(2019-07-02), "user1",\r 'dir', datetime(2019-07-22), "user1",\r 'mkdir', datetime(2019-07-14), "user1",\r 'rm', datetime(2019-07-27), "user1",\r 'pwd', datetime(2019-07-25), "user1",\r 'rm', datetime(2019-07-23), "user2",\r 'pwd', datetime(2019-07-25), "user2",\r ]\r | summarize timestamps = make_list(command_time), commands = make_list(command) by user_id\r | project user_id, commands_in_chronological_order = array_sort_asc(timestamps, commands)[1]\r \`\`\`\r \r **Output**\r \r |user_id|commands_in_chronological_order|\r |---|---|\r |user1|[<br> "ls",<br> "mkdir",<br> "chmod",<br> "dir",<br> "pwd",<br> "rm"<br>]|\r |user2|[<br> "rm",<br> "pwd"<br>]|\r \r > [!NOTE]\r > If your data may contain \`null\` values, use [make_list_with_nulls](make-list-with-nulls-aggfunction.md) instead of [make_list](makelist-aggfunction.md).\r \r ## Example 4 - Controlling location of \`null\` values\r \r By default, \`null\` values are put last in the sorted array. However, you can control it explicitly by adding a \`bool\` value as the last argument to \`array_sort_asc()\`.\r \r Example with default behavior:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKkqsjC/OLyqJTyxO1kipzEvMzUzWiM4rzcnRUUrKKU1V0lGqTM3JyS8HMtKLUlPzlHRAkrGamgDOvUliQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print array_sort_asc(dynamic([null,"blue","yellow","green",null]))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |["blue","green","yellow",null,null]|\r \r Example with non-default behavior:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAxXJUQqAIAwA0KvIvhR2owhZtkJYMzYlvH319+DdVrUHMqOZvVnP5CXuU+mqJS46RBA2GQwIk0Xa8+E0ZgX8c00YDhLn9ALNIgvjSQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print array_sort_asc(dynamic([null,"blue","yellow","green",null]), false)\r \`\`\`\r \r **Output**\r \r |\`print_0\`|\r |---|\r |[null,null,"blue","green","yellow"]|\r \r ## See also\r \r To sort the first array in descending order, use [array_sort_desc()](arraysortdescfunction.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/arraysortascfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_sort_desc","Receives one or more arrays. Sorts the first array in descending order. Orders the remaining arrays to match the reordered first array.",`## Syntax\r \r \`array_sort_desc(\`*array1*[, ..., *argumentN*]\`)\`\r \r \`array_sort_desc(\`*array1*[, ..., *argumentN*]\`,\`*nulls_last*\`)\`\r \r If *nulls_last* isn't provided, a default value of \`true\` is used.\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*array1...arrayN*| dynamic | ✓ | The array or list of arrays to sort.|\r | *nulls_last* |bool | | Determines whether \`null\`s should be last.|\r \r ## Returns\r \r Returns the same number of arrays as in the input, with the first array sorted in ascending order, and the remaining arrays ordered to match the reordered first array.\r \r \`null\` will be returned for every array that differs in length from the first one.\r \r If an array contains elements of different types, it will be sorted in the following order:\r \r * Numeric, \`datetime\`, and \`timespan\` elements\r * String elements\r * Guid elements\r * All other elements\r \r ## Example 1 - Sorting two arrays\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFILCpKrDRUsFVIqcxLzM1M1og21DHWMdEx1TGK1bTmyoEpMUJWopSopKOUBMTJQJwCxKlKIMUFRZl5UOXxxflFJfEpqcXJGhAbdCCmaAIAmTiTMnQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let array1 = dynamic([1,3,4,5,2]);\r let array2 = dynamic(["a","b","c","d","e"]);\r print array_sort_desc(array1,array2)\r \`\`\`\r \r **Output**\r \r |array1_sorted|array2_sorted|\r |---|---|\r |[5,4,3,2,1]|["d","c","b","e","a"]|\r \r > [!NOTE]\r > The output column names are generated automatically, based on the arguments to the function. To assign different names to the output columns, use the following syntax: \`... | extend (out1, out2) = array_sort_desc(array1,array2)\`\r \r ## Example 2 - Sorting substrings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHwS8xNLVawVVDyys/I0wlILM3RcU/NL0pP1QnKzEvPV7LmygGqCs4vKklNgaktLilKTiyJTywqSqzUAJPxxUAF8SmpxckaxQU5mSUaYKU6Cko6SpqaEMqaq6AoM69EoSi1uDSnBGgKkpkA+RSmRokAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Names = "John,Paul,George,Ringo";\r let SortedNames = strcat_array(array_sort_desc(split(Names, ",")), ",");\r print result = SortedNames\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |Ringo,Paul,John,George|\r \r ## Example 3 - Combining summarize and array_sort_desc\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5WR0WoDIRBF3/crJC9ZYQO7tiU00C8JQYwOiY2uy4yhpPTjq23sFmIK1ZdxOPdy5RoV0907aHXwXo1mQxHteOjY9S2j9bAxKkIeOnYmQGkLxpttw9JZ6qMPZtmlsaCt6IfnVb9eDU887xdZOSy6b97RF1zje1HhjcWr4IYXNd6fiuI2z2OFR383j1hX+OnN3M1T++9f/g8zL/7pn/ld88HonMpC+w4soxSVn4i9MK9OIJ2l2P5uk/+UW2U4219Kzcl6wvAKOpbNrJV2lPqIYQwuHKxWTgY0gMlSIaqLpIBRGiDdzplmNd8Ou0832AsNfQIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(command:string, command_time:datetime, user_id:string)\r [\r 'chmod', datetime(2019-07-15), "user1",\r 'ls', datetime(2019-07-02), "user1",\r 'dir', datetime(2019-07-22), "user1",\r 'mkdir', datetime(2019-07-14), "user1",\r 'rm', datetime(2019-07-27), "user1",\r 'pwd', datetime(2019-07-25), "user1",\r 'rm', datetime(2019-07-23), "user2",\r 'pwd', datetime(2019-07-25), "user2",\r ]\r | summarize timestamps = make_list(command_time), commands = make_list(command) by user_id\r | project user_id, commands_in_chronological_order = array_sort_desc(timestamps, commands)[1]\r \`\`\`\r \r **Output**\r \r |user_id|commands_in_chronological_order|\r |---|---|\r |user1|[<br> "rm",<br> "pwd",<br> "dir",<br> "chmod",<br> "mkdir",<br> "ls"<br>]|\r |user2|[<br> "pwd",<br> "rm"<br>]|\r \r > [!NOTE]\r > If your data may contain \`null\` values, use [make_list_with_nulls](make-list-with-nulls-aggfunction.md) instead of [make_list](makelist-aggfunction.md).\r \r ## Example 4 - Controlling location of \`null\` values\r \r By default, \`null\` values are put last in the sorted array. However, you can control it explicitly by adding a \`bool\` value as the last argument to \`array_sort_desc()\`.\r \r Example with default behavior:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKkqsjC/OLyqJT0ktTtZIqcxLzM1M1ojOK83J0VFKyilNVdJRqkzNyckvBzLSi1JT85R0QJKxmpoAGsR2QUMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print array_sort_desc(dynamic([null,"blue","yellow","green",null]))\r \`\`\`\r \r **Output**\r \r |\`print_0\`|\r |---|\r |["yellow","green","blue",null,null]|\r \r Example with non-default behavior:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAAxXJUQqAIAwA0KvIvhR2owhZukKYM6YS3r76e/BuKzocmdGKvdmImXvyeSnVkvymUwThkMmAsFikPR8uY1bAP/eA7iTpHF4VdlwBSgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print array_sort_desc(dynamic([null,"blue","yellow","green",null]), false)\r \`\`\`\r \r **Output**\r \r |\`print_0\`|\r |---|\r |[null,null,"yellow","green","blue"]|\r \r ## See also\r \r To sort the first array in ascending order, use [array_sort_asc()](arraysortascfunction.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/arraysortdescfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_split","Splits an array to multiple arrays according to the split indices and packs the generated array in a dynamic array.",`## Syntax\r \r \`array_split\`(*array*, *index*)\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *array*| dynamic | ✓ | The array to split.|\r | *index* | integer or dynamic | ✓| An integer or dynamic array of integers used to indicate the location at which to split the array. The start index of arrays is zero. Negative values are converted to \`array_length\` + \`value\`.|\r \r ## Returns\r \r Returns a dynamic array containing N+1 arrays with the values in the range \`[0..i1), [i1..i2), ... [iN..array_length)\` from \`array\`, where N is the number of input indices and \`i1...iN\` are the indices.`,`This following example shows how to split and array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1VTgqlFIrShJzUsBKYkvLsjJLLEFshIrIWwNIFtHwUgTAB7YikBGAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5]) \r | extend arr_split=array_split(arr, 2)\r \`\`\`\r \r **Output**\r \r |arr|arr_split|\r |---|---|\r |[1,2,3,4,5]|[[1,2],[3,4,5]]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYx0TGN1VTgqlFIrShJzUsBKYkvLsjJLLEFshIrIWwNIFtHAUmncaymJgD5vl9PUwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4,5]) \r | extend arr_split=array_split(arr, dynamic([1,3]))\r \`\`\`\r \r **Output**\r \r |arr|arr_split|\r |---|---|\r |[1,2,3,4,5]|[[1],[2,3],[4,5]]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/arraysplitfunction","arraysplitfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"array_sum","Calculates the sum of elements in a dynamic array.",`## Syntax\r \r \`array_sum\`(*array*)\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *array*| dynamic | ✓| The array to sum.|\r \r ## Returns\r \r Returns a double type value with the sum of the elements of the array.\r \r > [!NOTE]\r > If the array contains elements of non-numeric types, the result is \`null\`.`,`This following example shows the sum of an array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1og21DHSMdYxidVU4OWqUUitKEnNSwGpiC8uzbUF0omVIJYGkKUJANbCqMA+AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic([1,2,3,4]) \r | extend arr_sum=array_sum(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_sum|\r |---|---|\r |[1,2,3,4]|10|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/array-sum-function","array-sum-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"as","Binds a name to the operator's input tabular expression. This allows the query to reference the value of the tabular expression multiple times without breaking the query and binding a name through the [let statement](letstatement.md).","To optimize multiple uses of the `as` operator within a single query, see [Named expressions](named-expressions.md).\r\n\r\n## Syntax\r\n\r\n*T* `|` `as` [`hint.materialized` `=` *Materialized*] *Name*\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n|*T*| string | ✓ | The tabular expression to rename.|\r\n| *Name*| string| ✓ | The temporary name for the tabular expression.|\r\n| *`hint.materialized`*| bool | | If *Materialized* is set to `true`, the value of the tabular expression will be as if it was wrapped by a [materialize()](./materializefunction.md) function call. Otherwise, the value will be recalculated on every reference.||\r\n\r\n> [!NOTE]\r\n>\r\n> * The name given by `as` will be used in the `withsource=` column of [union](./unionoperator.md), the `source_` column of [find](./findoperator.md), and the `$table` column of [search](./searchoperator.md).\r\n> * The tabular expression named using the operator in a [join](./joinoperator.md)'s outer tabular input (`$left`) can also be used in the join's tabular inner input (`$right`).",`In the following two examples the union's generated TableName column will consist of 'T1' and 'T2'.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzA0UCguSS0AcrhqFBKLFULAjNK8zPw8hfLMkozi/NKi5FTbkMSknFS/xNxUBY0iPGZAjDDSBAAgKK6faAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1 \r | as T1 \r | union withsource=TableName (range x from 1 to 10 step 1 | as T2)\r \`\`\`\r \r Alternatively, you can write the same example as follows:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAAyvNy8zPUyjPLMkozi8tSk61DUlMykn1S8xNVdAoSsxLT1WoUEgrys9VMFQoyVcwNFAoLkktAHJqFBKLFUIMNXWIUWakCQB5tG07ZwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r union withsource=TableName (range x from 1 to 10 step 1 | as T1), (range x from 1 to 10 step 1 | as T2)\r \`\`\`\r \r In the following example, the 'left side' of the join will be:\r \`MyLogTable\` filtered by \`type == "Event"\` and \`Name == "Start"\`\r and the 'right side' of the join will be:\r \`MyLogTable\` filtered by \`type == "Event"\` and \`Name == "Stop"\`\r \r \`\`\`\r MyLogTable \r | where type == "Event"\r | as T\r | where Name == "Start"\r | join (\r T\r | where Name == "Stop"\r ) on ActivityId\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/asoperator","asoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"asin","Calculates the angle whose sine is the specified number, or the arc sine. This is the inverse operation of [`sin()`](sinfunction.md).","## Syntax\r\n\r\n`asin(`*x*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n|*x* | real | ✓| A real number in range [-1, 1] used to calculate the arc sine.|\r\n\r\n## Returns\r\n\r\nReturns the value of the arc sine of `x`. Returns `null` if `x` < -1 or `x` > 1.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbFNLM7M0zDQszTVBAC0CzxqFwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r asin(0.5)\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |1.2532358975033751|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/asinfunction","asinfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"assert","Checks for a condition. If the condition is false, outputs error messages and fails the query.",`> [!NOTE]\r > The \`assert\` function gets evaluated during the query analysis phase, before optimizations such as constant-folding and predicate short-circuiting get applied.\r \r > [!NOTE]\r > The parameters given to \`assert\` must be evaluated to constants during the query analysis phase. In other words, it can be constructed from other expressions referencing constants only, and can't be bound to row-context.\r \r ## Syntax\r \r \`assert(\`*condition*\`,\`*message*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *condition* | bool | ✓ | The conditional expression to evaluate. The condition must be evaluated to constant during the query analysis phase.|\r | *message* | string | ✓ | The message used if assertion is evaluated to \`false\`.|\r \r ## Returns\r \r Returns \`true\` if the condition is \`true\`.\r Raises a semantic error if the condition is evaluated to \`false\`.`,`The following query defines a function \`checkLength()\` that checks input string length, and uses \`assert\` to validate input length parameter (checks that it's greater than zero).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAA02OywrCMBBF9/mKoZsmEMH6hEr9Av9AXKTtkBTjVJIpgo9/N60izmzuYs6d45GhcdicD0iWHVQgPVLpe7IaYhk5dGSVeAhIY2LEwOMB7GGuIftClyEy1Ag2oGEMwM4Q3DH0mQJD7cSmpsTJqBKagnjtRGs4be1RdnQd+PfsOAF5sVjm+hNX6802FyfxhJvDgP/Go0016spZoTRMTeoNUTSJPdYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let checkLength = (len:long, s:string)\r {\r assert(len > 0, "Length must be greater than zero") and\r strlen(s) > len\r };\r datatable(input:string)\r [\r '123',\r '4567'\r ]\r | where checkLength(len=long(-1), input)\r \`\`\`\r \r Running this query yields an error:\r \`assert() has failed with message: 'Length must be greater than zero'\`\r \r Example of running with valid \`len\` input:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAA02OzQrCMBCE73mKoZc2kINaf6BSn8A3EA9pXZJiTCXZIvjz7qZVxN3LHOabGUeM1lJ73pM3bFGjcOQr13ujEKvIofNGiodAOh0jBR4N2GGmkH2hyxAZDcEE0kwBbLXHnUKfSWh/QkpJTBFlwpIQr604aU7fOCo6fx34V3SYivL5oszVRy5X600ujuKJm6VA/2vHJXWpMEXIN3+iHkjLAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let checkLength = (len:long, s:string)\r {\r assert(len > 0, "Length must be greater than zero") and strlen(s) > len\r };\r datatable(input:string)\r [\r '123',\r '4567'\r ]\r | where checkLength(len=3, input)\r \`\`\`\r \r **Output**\r \r |input|\r |---|\r |4567|\r \r The following query will always fail, demonstrating that the \`assert\` function gets evaluated even though the \`where b\` operator returns no data when \`b\` is \`false\`:\r \r \`\`\`\r let b=false;\r print x="Hello"\r | where b\r | where assert(b, "Assertion failed")\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/assert-function","assert-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"atan","Returns the angle whose tangent is the specified number. This is the inverse operation of [`tan()`](tanfunction.md).",`## Syntax\r \r \`atan(\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x* | real | ✓ | The number used to calculate the arc tangent.|\r \r ## Returns\r \r The value of the arc tangent of \`x\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbFNLEnM0zDQM9UEACNi3wIWAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r atan(0.5)\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |0.46364760900080609|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/atanfunction","atanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"atan2","Calculates the angle, in radians, between the positive x-axis and the ray from the origin to the point (y, x).",`## Syntax\r \r \`atan2(\`*y*\`,\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *y* | real | ✓ | The Y coordinate.|\r | *x* | real | ✓ | The X coordinate.|\r \r ## Returns\r \r Returns the angle in radians between the positive x-axis and the ray from the origin to the point (y, x).`,`The following example returns the angle measurements in radians.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/?query=H4sIAAAAAAAAAysoyswrUUgsScwzijdQsIWwNAx1DDUV9PUVAjIV9BVMFIoSUzIT84oVNExMFVJS04tSU4s1uWoUUitKUvNSoJoN4ZoNdHThuuE6DS0McGo1gmvVNdQxAGvVhVhthDBA1xJhAAA4Vl3utQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print atan2_0 = atan2(1,1) // Pi / 4 radians (45 degrees)\r | extend atan2_1 = atan2(0,-1) // Pi radians (180 degrees)\r | extend atan2_2 = atan2(-1,0) // - Pi / 2 radians (-90 degrees)\r \`\`\`\r \r **Output**\r \r |atan2_0|atan2_1|atan2_2|\r |---|---|---|\r |0.785398163397448|3.14159265358979|-1.5707963267949|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/atan2function","atan2function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"autocluster","`autocluster` finds common patterns of discrete attributes (dimensions) in the data. It then reduces the results of the original query, whether it's 100 or 100,000 rows, to a few patterns. The plugin was developed to help analyze failures (such as exceptions or crashes) but can potentially work on any filtered data set. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",`> [!NOTE]\r > \`autocluster\` is largely based on the Seed-Expand algorithm from the following paper: [Algorithms for Telemetry Data Mining using Discrete Attributes](https://www.scitepress.org/DigitalLibrary/PublicationsDetail.aspx?ID=d5kcrO+cpEU=&t=1).\r \r ## Syntax\r \r *Table* \`|\` \`evaluate\` \`autocluster\` \`(\`[*SizeWeight*, *WeightColumn*, *NumSeeds*, *CustomWildcard*, *CustomWildcard*, ...]\`)\`\r \r ## Parameters\r \r The parameters must be ordered as specified in the [syntax](#syntax). To indicate that the default value should be used, put the string tilde value \`~\`. For more information, see the "Example" column of the following table.\r \r |Name | Type, range, default |Description | Example |\r |----------------|-----------------------------------|---------------------------|------------------------------------------------|\r | SizeWeight | 0 < *double* < 1 [default: 0.5] | Gives you some control over the balance between generic (high coverage) and informative (many shared) values. If you increase the value, it usually reduces the number of patterns, and each pattern tends to cover a larger percentage coverage. If you decrease the value, it usually produces more specific patterns with more shared values, and a smaller percentage coverage. The under-the-hood formula is a weighted geometric mean, between the normalized generic score and the informative score with weights \`SizeWeight\` and \`1-SizeWeight\` | \`T | evaluate autocluster(0.8)\` |\r |WeightColumn | *column_name* | Considers each row in the input according to the specified weight (by default each row has a weight of '1'). The argument must be a name of a numeric integer column. A common usage of a weight column is to take into account sampling or bucketing/aggregation of the data that is already embedded into each row. | \`T | evaluate autocluster('~', sample_Count)\` |\r | NumSeeds | *int* [default: 25] | The number of seeds determines the number of initial local search points of the algorithm. In some cases, depending on the structure of the data and if you increase the number of seeds, then the number (or quality) of the results increases through the expanded search space with a slower query tradeoff. The value has diminishing results in both directions, so if you decrease it to below five, it will achieve negligible performance improvements. If you increase to above 50, it will rarely generate additional patterns. | \`T | evaluate autocluster('~', '~', 15)\` |\r | CustomWildcard | *"any_value_per_type"* | Sets the wildcard value for a specific type in the results table. It will indicate that the current pattern doesn't have a restriction on this column. The default is null, since the string default is an empty string. If the default is a good value in the data, a different wildcard value should be used (such as \`*\`). | \`T | evaluate autocluster('~', '~', '~', '*', int(-1), double(-1), long(0), datetime(1900-1-1))\` |\r \r ## Returns\r \r The \`autocluster\` plugin usually returns a small set of patterns. The patterns capture portions of the data with shared common values across multiple discrete attributes. Each pattern in the results is represented by a row.\r \r The first column is the segment ID. The next two columns are the count and percentage of rows out of the original query that are captured by the pattern. The remaining columns are from the original query. Their value is either a specific value from the column, or a wildcard value (which are by default null) meaning variable values.\r \r The patterns aren't distinct, may be overlapping, and usually don't cover all the original rows. Some rows may not fall under any pattern.\r \r > [!TIP]\r > Use [where](./whereoperator.md) and [project](./projectoperator.md) in the input pipe to reduce the data to just what you're interested in.\r >\r > When you find an interesting row, you might want to drill into it further by adding its specific values to your \`where\` filter.`,`### Using evaluate\r \r \`\`\`\r T | evaluate autocluster()\r \`\`\`\r \r ### Using autocluster\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy1OPQ+CMBDd/RUvTBCNYdENF2VVk7I4NngIhrbkONAm/nhbcbr3lfdOiWNTzmRlXH3waokJxllpXeNJc6pEs1SdoQxFgV3I0FvI3nHSRj8IBbqmSRdyZDeMWP+ta2DE4nFAjg2SW6mSeM+XJAs1A7sn1YIwIBT03w+VHyJeCuLWrPsp+noSV/fTKMRpvt1nX4BZevm3AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where monthofyear(StartTime) == 5\r | extend Damage = iff(DamageCrops + DamageProperty > 0 , "YES" , "NO")\r | project State , EventType , Damage\r | evaluate autocluster(0.6)\r \`\`\`\r \r **Output**\r \r |SegmentId|Count|Percent|State|EventType|Damage|\r |---|---|---|---|---|---|---|---|---|\r |0|2278|38.7||Hail|NO\r |1|512|8.7||Thunderstorm Wind|YES\r |2|898|15.3|TEXAS||\r \r ### Using custom wildcards\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzVOMQ6CQBDsfcWEBlBiiIklNkqrJtBYXnARDMeRZUFJjG/3TrTZ2ZnZzGwmhnU6Uiv94oVHRUzQppXKlBMpDjJRLHmtKUSSYGtv6CnUXnFQWt0ICeqyDGayZ9P1WP2ss2XEMmGHGBG8S5p5Do8nL7QxHZs7FQJbIGT17w/51Ll9DnBdo2oG56tBTNEMvRAH8XoTwX/7/7H0ww9RvGz7xgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where monthofyear(StartTime) == 5\r | extend Damage = iff(DamageCrops + DamageProperty > 0 , "YES" , "NO")\r | project State , EventType , Damage\r | evaluate autocluster(0.2, '~', '~', '*')\r \`\`\`\r \r **Output**\r \r |SegmentId|Count|Percent|State|EventType|Damage|\r |---|---|---|---|---|---|---|---|---|\r |0|2278|38.7|\\*|Hail|NO\r |1|512|8.7|\\*|Thunderstorm Wind|YES\r |2|898|15.3|TEXAS|\\*|\\*\r \r ## See also\r \r * [basket](./basketplugin.md)\r * [reduce](./reduceoperator.md)\r \r \r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # autocluster plugin - Internal\r \r If you have questions about autocluster or other ML related workflows in Kusto you can post them on the following DL: [KustoML](mailto:kustoML@microsoft.com).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/autoclusterplugin","autoclusterplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"avg","Calculates the average (arithmetic mean) of *expr* across the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`avg(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for aggregation calculation. Records with \`null\` values are ignored and not included in the calculation. |\r \r ## Returns\r \r Returns the average value of *expr* across the group.`,`This example returns the average number of damaged crops per state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVXAsS3dJzE1MTw3Jdy7KLyhWsFVILEvXgIiBRTQVkioVgksSS1IBk8Ju20QAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize AvgDamageToCrops = avg(DamageCrops) by State\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | AvgDamageToCrops |\r | -------------------- | ---------------- |\r | TEXAS | 7524.569241 |\r | KANSAS | 15366.86671 |\r | IOWA | 4332.477535 |\r | ILLINOIS | 44568.00198 |\r | MISSOURI | 340719.2212 |\r | GEORGIA | 490702.5214 |\r | MINNESOTA | 2835.991494 |\r | WISCONSIN | 17764.37838 |\r | NEBRASKA | 21366.36467 |\r | NEW YORK | 5.714285714 |\r | ... | ... |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/avg-aggfunction","avg-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"avgif","Calculates the [average](avg-aggfunction.md) of *expr* in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`avgif\` \`(\`*expr*\`,\` *predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for aggregation calculation. Records with \`null\` values are ignored and not included in the calculation. |\r | *predicate* | string | ✓ | The predicate that if true, the *expr* calculated value will be added to the average. |\r \r ## Returns\r \r Returns the average value of *expr* in records where *predicate* evaluates to \`true\`.`,`This example calculates the average damage by state in cases where there was any damage.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVXAsSy1KTE9NScwFkrYl+Tn5eekaiWXpGgouYCHnovyCYk1NHai68IzUPBd0tZlpGkiKdZDYCnYGmpoKSZUKwSWJJakAP4a4kIQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize Averagedamage=tolong(avg( DamageCrops)),AverageWhenDamage=tolong(avgif(DamageCrops,DamageCrops >0)) by State\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | Averagedamage | Averagewhendamage |\r | -------------------- | ------------- | ----------------- |\r | TEXAS | 7524 | 491291 |\r | KANSAS | 15366 | 695021 |\r | IOWA | 4332 | 28203 |\r | ILLINOIS | 44568 | 2574757 |\r | MISSOURI | 340719 | 8806281 |\r | GEORGIA | 490702 | 57239005 |\r | MINNESOTA | 2835 | 144175 |\r | WISCONSIN | 17764 | 438188 |\r | NEBRASKA | 21366 | 187726 |\r | NEW YORK | 5 | 10000 |\r | ... | ... | ... |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/avgif-aggfunction","avgif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"azure_digital_twins_query_request","The `azure_digital_twins_query_request` plugin runs an Azure Digital Twins query as part of a Kusto Query Language (KQL) query. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",`Using the plugin, you can query across data in both Azure Digital Twins and any data source accessible through KQL. For example, you can [perform time series analytics](#perform-time-series-analytics).\r \r For more information about the plugin, see [Azure Digital Twins query plugin for Azure Data Explorer](https://docs.microsoft.com/azure/digital-twins/concepts-data-explorer-plugin#using-the-plugin).\r \r ## Syntax\r \r \`evaluate\` \`azure_digital_twins_query_request\` \`(\` *AdtInstanceEndpoint* \`,\` *AdtQuery* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *AdtInstanceEndpoint* | string | ✓ | The Azure Digital Twins instance endpoint to be queried. |\r | *AdtQuery* | string | ✓ | The query to run against the Azure Digital Twins endpoint. This query is written in a custom SQL-like query language for Azure Digital Twins, called the Azure Digital Twins query language. For more information, see [Query language for Azure Digital Twins](https://docs.microsoft.com/azure/digital-twins/concepts-query-language).|\r \r ## Authentication and authorization\r \r The \`azure_digital_twins_query_request\` plugin uses the Azure AD account of the user running the query to authenticate. To run a query, a user must at least be granted the **Azure Digital Twins Data Reader** role. Information on how to assign this role can be found in [Security for Azure Digital Twins solutions](https://docs.microsoft.com/azure/digital-twins/concepts-security#authorization-azure-roles-for-azure-digital-twins).`,`The following examples show how you can run various Azure Digital Twins queries, including queries that use additional Kusto expressions.\r \r ### Retrieval of all twins within an Azure Digital Twins instance\r \r The following example returns all digital twins within an Azure Digital Twins instance.\r \r \`\`\`\r evaluate azure_digital_twins_query_request(\r 'https://contoso.api.wcus.digitaltwins.azure.net',\r 'SELECT T AS Twins FROM DIGITALTWINS T')\r \`\`\`\r \r \r \r ### Projection of twin properties as columns along with additional Kusto expressions\r \r The following example returns the result from the plugin as separate columns, and then performs additional operations using Kusto expressions.\r \r \`\`\`\r evaluate azure_digital_twins_query_request(\r 'https://contoso.api.wcus.digitaltwins.azure.net',\r 'SELECT T.Temperature, T.Humidity FROM DIGITALTWINS T WHERE IS_PRIMITIVE(T.Temperature) AND IS_PRIMITIVE(T.Humidity)')\r | where Temperature > 20\r | project TemperatureInC = Temperature, Humidity\r \`\`\`\r \r **Output**\r \r |TemperatureInC|Humidity|\r |---|---|\r |21|48|\r |49|34|\r |80|32|\r \r ## Perform time series analytics\r \r You can use the data history integration feature of Azure Digital Twins to historize digital twin property updates. To learn how to view the historized twin updates, see [View the historized twin updates in Azure Data Explorer](https://docs.microsoft.com/azure/digital-twins/how-to-use-data-history?tabs=cli#view-the-historized-twin-updates-in-azure-data-explorer)\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # azure_digital_twins_query_request plugin (preview)\r \r Runs an Azure Digital Twins query as part of the KQL query.\r \r Using the plugin, you can reason across data in both Azure Digital Twins and any data source accessible through the Kusto Query Language (KQL). For example, you can use the plugin to contextualize time series data in Kusto by joining it with knowledge graph data held in Azure Digital Twins.\r \r >[!NOTE]\r >* The Azure Digital Twins query plugin is in preview.\r \r ## Syntax\r \r \`evaluate\` \`azure_digital_twins_query_request\` \`(\` *AdtInstanceEndpoint* \`,\` *AdtQuery* \`)\`\r \r ## Arguments\r \r * *AdtInstanceEndpoint*: A \`string\` literal indicating the Azure Digital Twins instance endpoint to be queried.\r \r * *AdtQuery*: A \`string\` literal indicating the query that is to be executed against the Azure Digital Twins endpoint. This query is written in a custom SQL-like query language for Azure Digital Twins, referred to as the **Azure Digital Twins query language**. For more information on the query language, see [**Query language | Azure Digital Twins documentation**](https://docs.microsoft.com/azure/digital-twins/concepts-query-language).\r \r \r ## Authentication and Authorization\r \r The user of the azure_digital_twins_query_request plugin must be granted the **Azure Digital Twins Data Reader** role, as the user's Azure AD token is used to authenticate. Information on how to assign this role can be found in [**Security for Azure Digital Twins solutions | Azure Digital Twins documentation**](https://docs.microsoft.com/azure/digital-twins/concepts-security#authorization-azure-roles-for-azure-digital-twins).\r \r ## Setup\r \r This plugin is disabled by default, as it is in still in preview. To enable the plugin on your cluster, run the following command:\r \`.enable plugin azure_digital_twins_query_request\`. This command requires **All Databases admin** permission. \r \r For more information on this command, see [**.enable plugin | Azure Data Explorer documentation**](../management/enable-plugin.md). For more information on role-based authorization in Kusto, see [**Role-based Authorization in Kusto | Azure Data Explorer documentation**](https://docs.microsoft.com/azure/data-explorer/kusto/management/access-control/role-based-authorization).\r \r ## Examples\r \r The following examples show how you can perform various queries, along with using additional Kusto expressions.\r \r ### Retrieval of all twins within an Azure Digital Twins instance\r \r This example returns all digital twins within an Azure Digital Twins instance.\r \r \`\`\`kusto\r evaluate azure_digital_twins_query_request(\r 'https://contoso.api.wcus.digitaltwins.azure.net',\r 'SELECT T AS Twins FROM DIGITALTWINS T')\r \`\`\`\r \r The result looks like this:\r \r \r \r ### Projection of twin properties as columns along with additional Kusto expressions\r \r This example returns the result from the plugin as separate columns, and then performs additional operations using Kusto expressions.\r \r \`\`\`kusto\r evaluate azure_digital_twins_query_request(\r 'https://contoso.api.wcus.digitaltwins.azure.net',\r 'SELECT T.Temperature, T.Humidity FROM DIGITALTWINS T WHERE IS_PRIMITIVE(T.Temperature) AND IS_PRIMITIVE(T.Humidity)')\r | where Temperature > 20\r | project TemperatureInC = Temperature, Humidity\r \`\`\`\r \r The result looks like this:\r \r |TemperatureInC|Humidity|\r |---|---|\r |21|48|\r |49|34|\r |80|32|\r \r ### Joining the plugin results with another data source\r \r This example shows how to perform complex analysis, such as anomaly detection, through a \`join\` operation between the plugin results and a table containing historical data in a Kusto table, based on the ID column (\`$dtid\`).\r \r \`\`\`kusto\r evaluate azure_digital_twins_query_request(\r 'https://contoso.api.wcus.digitaltwins.azure.net',\r 'SELECT T.$dtId AS tid, T.Temperature FROM DIGITALTWINS T WHERE IS_PRIMITIVE(T.$dtId) AND IS_PRIMITIVE(T.Temperature)')\r | project tostring(tid), todouble(Temperature)\r | join kind=inner (\r ADT_Data_History\r ) on $left.tid == $right.twinId\r | make-series num=avg(value) on timestamp from min_t to max_t step dt by tid\r | extend (anomalies, score , baseline) = \r series_decompose_anomalies(num, 1.5, -1, 'linefit')\r | render anomalychart with(anomalycolumns=anomalies, title= 'Test, anomalies')\r \`\`\`\r \r ADT_Data_History is a table whose schema as follows:\r \r |timestamp|twinId|modelId|name|value|relationshipTarget|relationshipId|\r |---|---|---|---|---|---|---|\r |2021-02-01 17:24|contosoRoom|dtmi:com:contoso:Room;1|Temperature|24|...|..|\r \r The output looks like this:\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/azure-digital-twins-query-request-plugin","azure-digital-twins-query-request-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_has_key","Checks whether a dynamic property bag object contains a given key.",`## Syntax\r \r \`bag_has_key(\`*bag*\`,\`*key*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *bag* | dynamic | ✓ | The property bag to search. |\r | *key* | string | ✓ | The key for which to search. Search for a nested key using the [JSONPath](jsonpath.md) notation. Array indexing isn't supported. |\r \r ## Returns\r \r True or false depending on if the key exists in the bag.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcy8gtISK4WUyrzE3MxkTa5oLgUggHI1qtWzUysN1RWsFAyNjHUUQDwjdSsF9cSkZPVaTR1Cao2R1cZy1SikVpSk5qUoFKUWl+aUKNgqJCWmx2ckFscD1UJcArNDEwDPKMflogAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(input: dynamic)\r [\r dynamic({'key1' : 123, 'key2': 'abc'}),\r dynamic({'key1' : 123, 'key3': 'abc'}),\r ]\r | extend result = bag_has_key(input, 'key2')\r \`\`\`\r \r **Output**\r \r |input|result|\r |---|---|\r |{<br> "key1": 123,<br> "key2": "abc"<br>}|true<br>|\r |{<br> "key1": 123,<br> "key3": "abc"<br>}|false<br>|\r \r ### Search using a JSONPath key\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2OwQqDMBBE7/mKPRTWQJAk3gL9EhGJGlqpTUUjGK3/3g3p7unN7DA72EDbTa4Y/bwFA0P09j32nNUMaP5YnPhyUaEBpSsBCTTBifPymRWCAbRdj+QkIVm4xwOvfFoR10pKAVrK5uKCNewLbg/OD7C4dZsC3KGzj/Zp15YC+RkK38rUVOYW/gOk4uu+rQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(input: dynamic)\r [\r dynamic({'key1': 123, 'key2': {'prop1' : 'abc', 'prop2': 'xyz'}, 'key3': [100, 200]}),\r ]\r | extend result = bag_has_key(input, '$.key2.prop1')\r \`\`\`\r \r **Output**\r \r |input|result|\r |---|---|\r |{<br> "key1": 123,<br> "key2": {<br> "prop1": "abc",<br> "prop2": "xyz"<br> },<br> "key3": [<br> 100,<br> 200<br> ]<br>}|true<br>|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bag-has-key-function","bag-has-key-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_keys","Enumerates all the root keys in a dynamic property bag object.",`## Syntax\r \r \`bag_keys(\`*object*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *object* | dynamic | ✓ | The property bag object for which to enumerate keys. |\r \r ## Returns\r \r An array of keys, order is undetermined.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3XMSwrDIBCA4b2nmN0ouEnSBwg9iUjRjIRQaxdNICHt3WvzqN1kZjP8fAzZLq0LnreR/KDCIzYSSNEY7b2tBWgGaYrUlsIntKjQoQSsURVl9RYSZlTuoQlpkYnOstqT+kfNZg/Zxj6EtR7/PmzylFt6usZzjtoIZtgL/ND5SHDz4xMu4Gxz/Z6cxAfYZXgQDQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(index:long, d:dynamic) [\r 1, dynamic({'a':'b', 'c':123}), \r 2, dynamic({'a':'b', 'c':{'d':123}}),\r 3, dynamic({'a':'b', 'c':[{'d':123}]}),\r 4, dynamic(null),\r 5, dynamic({}),\r 6, dynamic('a'),\r 7, dynamic([])\r ]\r | extend keys = bag_keys(d)\r \`\`\`\r \r **Output**\r \r |index|d|keys|\r |---|---|---|\r |1|{<br> "a": "b",<br> "c": 123<br>}|[<br> "a",<br> "c"<br>]|\r |2|{<br> "a": "b",<br> "c": {<br> "d": 123<br> }<br>}|[<br> "a",<br> "c"<br>]|\r |3|{<br> "a": "b",<br> "c": [<br> {<br> "d": 123<br> }<br> ]<br>}|[<br> "a",<br> "c"<br>]|\r |4|||\r |5|{}|[]|\r |6|a||\r |7|[]||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bagkeysfunction","bagkeysfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_merge","Merges `dynamic` property bags into a `dynamic` property bag object with all properties merged.",`## Syntax\r \r \`bag_merge(\`*bag1*\`,\`*bag2*\`[\`,\`*bag3*, ...])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *bag1...bagN* | dynamic | ✓ | The property bags to merge. The function accepts between 2 to 64 arguments. |\r \r ## Returns\r \r Returns a \`dynamic\` property bag. Results from merging all of the input property bag objects. If a key appears in more than one input object, an arbitrary value out of the possible values for this key will be chosen.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUhKTI/PTS1KT9XgUlBQSKnMS8zNTNaoVnc0VLcyNNJRUHcCMkC0M5A2rtXUQVNmpG5lYQhSBmKA1IE11mpqAgDRMHuwaAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result = bag_merge(\r dynamic({'A1':12, 'B1':2, 'C1':3}),\r dynamic({'A2':81, 'B2':82, 'A1':1}))\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |{<br> "A1": 12,<br> "B1": 2,<br> "C1": 3,<br> "A2": 81,<br> "B2": 82<br>}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bag-merge-function","bag-merge-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_pack","Creates a [dynamic](scalar-data-types/dynamic.md) property bag object from a list of keys and values.",`> **Deprecated aliases**: pack(), pack_dictionary()\r \r ## Syntax\r \r \`bag_pack(\`*key1*\`,\` *value1*\`,\` *key2*\`,\` *value2*\`,... )\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*key*| string | ✓ | The key name.|\r |*value*| string | ✓ | The key value.|\r \r > [!NOTE]\r > The *key* and *value* strings are an alternating list the total length of the list must be even.\r \r ## Returns\r \r Returns a \`dynamic\` property bag object from the listed *key* and *value* inputs.`,`**Example 1**\r \r The following example creates and returns a property bag from an alternating list of keys and values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhKTI8vSEzO1lDySS1LzVHSUVDyzEvLL8pNLMnMzwNxA4ryk1OLiz1dgBxDI2MToJBLYkkikIfQW1oE1lleXq6XlJmXrpecn6ukqQkA9RzT32IAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print bag_pack("Level", "Information", "ProcessID", 1234, "Data", bag_pack("url", "www.bing.com"))\r \`\`\`\r \r **Results**\r \r |print_0|\r |--|\r |{"Level":"Information","ProcessID":1234,"Data":{"url":"www.bing.com"}}|\r \r **Example 2**\r \r The following example uses two tables, *SmsMessages* and *MmsMessages*, and returns their common columns and a property bag from the other columns. The tables are created ad-hoc as part of the query.\r \r SmsMessages\r \r |SourceNumber |TargetNumber| CharsCount |\r |---|---|---|\r |555-555-1234 |555-555-1212 | 46 |\r |555-555-1234 |555-555-1213 | 50 |\r |555-555-1212 |555-555-1234 | 32 |\r \r MmsMessages\r \r |SourceNumber |TargetNumber| AttachmentSize | AttachmentType | AttachmentName |\r |---|---|---|---|---|\r |555-555-1212 |555-555-1213 | 200 | jpeg | Pic1 |\r |555-555-1234 |555-555-1212 | 250 | jpeg | Pic2 |\r |555-555-1234 |555-555-1213 | 300 | png | Pic3 |\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA61Sy26DMBC88xUrnxKJSmBCD604VDknikRuVVUZWIEJGGQb9aF+fG1olJgmbQ/FwmZ3Zr3MaBvUkLZqg0qxEhUkUDBtVtYgLDwwT9oNMsft0GYo70BpyUXpj8ieyRL1JWRdManW3SD0Me8t4XGESBzHN/YNabQi/nkcUhuvbs3+KzUa44D4c+Z0ybwyogS8p3uvMXI3/y73QWuWVy0KnfJ3vIbt3/qr2Ja1+JNVc1WTfhoE9qh7LO2543n43ZDLLtN4Xkr/UDp2jaauvThWRsRaez5F3gfUHRdw4KJIuBAoHdc74dhs2PiqURSwY/kBiyRj5XNvPhfkNEim1ykwfV3PDeomHIZ13mHYhMOw/jsMm1haHS8VSnR+F5JkZpKh9bKrMdcO0XdGxv9S9wkokKY3cgMAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let SmsMessages = datatable (\r SourceNumber: string,\r TargetNumber: string,\r CharsCount: string\r ) [\r "555-555-1234", "555-555-1212", "46", \r "555-555-1234", "555-555-1213", "50",\r "555-555-1212", "555-555-1234", "32" \r ];\r let MmsMessages = datatable (\r SourceNumber: string,\r TargetNumber: string,\r AttachmentSize: string,\r AttachmentType: string,\r AttachmentName: string\r ) [\r "555-555-1212", "555-555-1213", "200", "jpeg", "Pic1",\r "555-555-1234", "555-555-1212", "250", "jpeg", "Pic2",\r "555-555-1234", "555-555-1213", "300", "png", "Pic3"\r ];\r SmsMessages \r | join kind=inner MmsMessages on SourceNumber\r | extend Packed=bag_pack("CharsCount", CharsCount, "AttachmentSize", AttachmentSize, "AttachmentType", AttachmentType, "AttachmentName", AttachmentName) \r | where SourceNumber == "555-555-1234"\r | project SourceNumber, TargetNumber, Packed\r \`\`\`\r \r **Results**\r \r | SourceNumber | TargetNumber | Packed |\r |--|--|--|--|\r | 555-555-1234 | 555-555-1213 | {"CharsCount":"50","AttachmentSize":"250","AttachmentType":"jpeg","AttachmentName":"Pic2"} |\r | 555-555-1234 | 555-555-1212 | {"CharsCount":"46","AttachmentSize":"250","AttachmentType":"jpeg","AttachmentName":"Pic2"} |\r | 555-555-1234 | 555-555-1213 | {"CharsCount":"50","AttachmentSize":"300","AttachmentType":"png","AttachmentName":"Pic3"} |\r | 555-555-1234 | 555-555-1212 | {"CharsCount":"46","AttachmentSize":"300","AttachmentType":"png","AttachmentName":"Pic3"} |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/packfunction","packfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_pack_columns","Creates a dynamic property bag object from a list of columns.",`## Syntax\r \r \`bag_pack_columns(\`*column1*\`,\` *column2*\`,... )\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*column*| scalar | ✓ | A column to pack. The name of the column is the property name in the property bag.|\r \r ## Returns\r \r Returns a \`dynamic\` property bag object from the listed *columns*.`,`The following example creates a property bag that includes the \`Id\` and \`Value\` columns:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUDc8UK4XikqLMvHQdhbDEnNJUBNe/JCO1yEohJz8vXZOXK5qXSwEIlByVdBSUyhJz4hOBDEMdqKgTTDQJyDCCiTrDRJOBDGNerlherhqF1IqS1LwUhYDE5OzUFAVbhaTE9PgCICc+OT+nNDevGOgkqFM0AV8bSzWnAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Id: string, Value: string, Other: long)\r [\r "A", "val_a", 1,\r "B", "val_b", 2,\r "C", "val_c", 3\r ]\r | extend Packed = bag_pack_columns(Id, Value)\r \`\`\`\r \r |Id|Value|Other|Packed|\r |---|---|---|---|\r |A|val_a|1|{<br> "Id": "A",<br> "Value": "val_a"<br>}|\r |B|val_b|2|{<br> "Id": "B",<br> "Value": "val_b"<br>}|\r |C|val_c|3|{<br> "Id": "C",<br> "Value": "val_c"<br>}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bag-pack-columns-function","bag-pack-columns-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_remove_keys","Removes keys and associated values from a `dynamic` property bag.",`## Syntax\r \r \`bag_remove_keys(\`*bag*\`,\`*keys*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *bag* | dynamic | ✓ | The property bag from which to remove keys. |\r | *keys* | dynamic | ✓ | List of keys to be removed from the input. The keys are the first level of the property bag. You can specify keys on the nested levels using [JSONPath](jsonpath.md) notation. Array indexing isn't supported. |\r \r ## Returns\r \r Returns a \`dynamic\` property bag without specified keys and their values.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcy8gtISq5TKvMTczGRNrmguBSCAcjWq1bNTKw3VFawUDI2MdUAyCiARI3UrBfXEpGT1Wk0dHOrVyxJzSlPVdcDqjYHqTYz0DEDKY7lqFFIrSlLzUhSKUotLc0pskxLT44tSc/PLUuOBaoshLtKBmxkNsRFikol6rKYmAD1YmXe9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(input:dynamic)\r [\r dynamic({'key1' : 123, 'key2': 'abc'}),\r dynamic({'key1' : 'value', 'key3': 42.0}),\r ]\r | extend result=bag_remove_keys(input, dynamic(['key2', 'key4']))\r \`\`\`\r \r **Output**\r \r |input|result|\r |---|---|\r |{<br> "key1": 123,<br> "key2": "abc"<br>}|{<br> "key1": 123<br>}|\r |{<br> "key1": "value",<br> "key3": 42.0<br>}|{<br> "key1": "value",<br> "key3": 42.0<br>}|\r \r ### Remove inner properties of dynamic values using JSONPath notation\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2O3QqDMAyF7/sUuRjEQpFW74Q9iRSpNgyZf2gVnfPd19JtydWXk5wTa5zvuqOkHabVFfYYTN82nJUMfH0xOfFJh8ICVJYLCJB5OHGax0khFICmbtArYRAk3I8XXnE191wqKQVkUuqLC6bZG2h3NFiYaVk7d6/No5qpHzeq/MUSvxH//BJvaQhNY+DPV3P+AU1I1W7BAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(input:dynamic)\r [\r dynamic({'key1': 123, 'key2': {'prop1' : 'abc', 'prop2': 'xyz'}, 'key3': [100, 200]}),\r ]\r | extend result=bag_remove_keys(input, dynamic(['$.key2.prop1', 'key3']))\r \`\`\`\r \r **Output**\r \r |input|result|\r |---|---|\r |{<br> "key1": 123,<br> "key2": {<br> "prop1": "abc",<br> "prop2": "xyz"<br> },<br> "key3": [<br> 100,<br> 200<br> ]<br>}|{<br> "key1": 123,<br> "key2": {<br> "prop2": "xyz"<br> }<br>}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bag-remove-keys-function","bag-remove-keys-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_set_key","bag_set_key() receives a `dynamic` property-bag, a key and a value. The function sets the given key in the bag to the given value. The function will override any existing value in case the key already exists.",`## Syntax\r \r \`bag_set_key(\`*bag*\`,\`*key*\`,\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *bag* | dynamic | ✓ | The property bag to modify. |\r | *key* | string | ✓ | The key to set. Either a JSON path (you can specify a key on the nested levels using [JSONPath](jsonpath.md) notation) or the key name for a root level key. Array indexing or root JSON path aren't supported. |\r | *value* | any scalar data type | ✓ | The value to which the key is set. |\r \r ## Returns\r \r Returns a \`dynamic\` property-bag with specified key-value pairs. If the input bag isn't a property-bag, a \`null\` value is returned.\r \r > [!NOTE]\r > To treat \`null\`s as empty bags, use \`coalesce(x, dynamic({}))\`\u200B.`,`### Use a root-level key\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcy8gtISK4WUyrzE3MxkTYVoXi4FIIDyNarVs1MrDdWtFAx1FEBMIyDTqFZTRwG/MmMgUz0xKVkdqJSXK5aXq0YhtaIkNS9FoSi1uDSnRMFWISkxPb44tSQeqBriCJhOHQVjTQAoaFq+oAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(input: dynamic) [\r dynamic({'key1': 1, 'key2': 2}), \r dynamic({'key1': 1, 'key3': 'abc'}),\r ]\r | extend result = bag_set_key(input, 'key3', 3)\r \`\`\`\r \r |input|result|\r |---|---|\r |{<br> "key1": 1,<br> "key2": 2<br>}|{<br> "key1": 1,<br> "key2": 2,<br> "key3": 3<br>}|\r |{<br> "key1": 1,<br> "key3": "abc"<br>}|{<br> "key1": 1,<br> "key3": 3<br>}|\r \r ### Use a JSONPath key\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcy8gtISK4WUyrzE3MxkzWheLgUggHI1qtWzUysN1a0UDI2MdRRAHCMgp1q9oCi/ACEM4oHE1Ssqq9RrazV1cBtSq8nLFcvLVaOQWlGSmpeiUJRaXJpTomCrkJSYHl+cWhIPVApxE9BcFT2QhXoQy4D8xKRkdU0AFVPFlLsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(input: dynamic)[\r dynamic({'key1': 123, 'key2': {'prop1': 123, 'prop2': 'xyz'}}),\r dynamic({'key1': 123})\r ]\r | extend result = bag_set_key(input, '$.key2.prop1', 'abc')\r \`\`\`\r \r |input|result|\r |---|---|\r |{<br> "key1": 123,<br> "key2": {<br> "prop1": 123,<br> "prop2": "xyz"<br>}<br>}|{<br> "key1": 123,<br> "key2": {<br> "prop1": "abc",<br> "prop2": "xyz"<br>}<br>}|\r |{<br> "key1": 123<br>}|{<br> "key1": 123,<br> "key2": {<br> "prop1": "abc"<br>}<br>}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bag-set-key-function","bag-set-key-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bag_unpack","The `bag_unpack` plugin unpacks a single column of type `dynamic`, by treating each property bag top-level slot as a column. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*T* `|` `evaluate` `bag_unpack(` *Column* [`,` *OutputColumnPrefix* ] [`,` *columnsConflict* ] [`,` *ignoredProperties* ] `)` [`:` *OutputSchema*]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required| Description |\r\n|---|---|---|---|\r\n| *T* | string | ✓ | The tabular input whose column *Column* is to be unpacked. |\r\n| *Column* | dynamic | ✓ | The column of *T* to unpack. |\r\n| *OutputColumnPrefix* | string | | A common prefix to add to all columns produced by the plugin. |\r\n| *columnsConflict* | string | | The direction for column conflict resolution. Valid values: <br />`error` - Query produces an error (default)<br />`replace_source` - Source column is replaced<br />`keep_source` - Source column is kept\r\n| *ignoredProperties* | dynamic | An optional set of bag properties to be ignored.\r\n| *OutputSchema* | | | The names and types for the expected columns of the `bag_unpack` plugin output.<br /><br />**Syntax**: `(` *ColumnName* `:` *ColumnType* [`,` ...] `)`<br /><br />Specifying the expected schema optimizes query execution by not having to first run the actual query to explore the schema. An error is raised if the run-time schema doesn't match the *OutputSchema* schema. |\r\n\r\n## Returns\r\n\r\nThe `bag_unpack` plugin returns a table with as many records as its tabular input (*T*). The schema of the table is the same as the schema of its tabular input with the following modifications:\r\n\r\n* The specified input column (*Column*) is removed.\r\n* The schema is extended with as many columns as there are distinct slots in\r\n the top-level property bag values of *T*. The name of each column corresponds\r\n to the name of each slot, optionally prefixed by *OutputColumnPrefix*. Its\r\n type is either the type of the slot, if all values of the same slot have the\r\n same type, or `dynamic`, if the values differ in type.\r\n\r\n> [!NOTE]\r\n> If the *OutputSchema* is not specified, the plugin's output schema varies according to the input data values. Therefore, multiple executions of the plugin using different data inputs, may produce different output schema.\r\n\r\n> [!NOTE]\r\n> The input data to the plugin must be such that the output schema follows all the rules for a tabular schema. In particular:\r\n>\r\n> * An output column name can't be the same as an existing column in the tabular\r\n input *T*, unless it's the column to be unpacked (*Column*), since that will produce two columns with the same name.\r\n>\r\n> * All slot names, when prefixed by *OutputColumnPrefix*, must be valid\r\n entity names and follow the [identifier naming rules](./schema-entities/entity-names.md#identifier-naming-rules).",`### Expand a bag\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjRSrlMq8xNzMZE2uaC4FIIByNaqV/BJzU5WsFJS88jPylHQUlBzTgVwjg1pNHRwKXRLLUuEKTfAo9Eoszs3MQ6g1BquN5apRSC1LzClNLElVSEpMjy/NK0hMztZI0QQABlsx468AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(d:dynamic)\r [\r dynamic({"Name": "John", "Age":20}),\r dynamic({"Name": "Dave", "Age":40}),\r dynamic({"Name": "Jasmine", "Age":30}),\r ]\r | evaluate bag_unpack(d)\r \`\`\`\r \r **Output**\r \r |Age|Name |\r |---|-------|\r |20 |John |\r |40 |Dave |\r |30 |Jasmine|\r \r ### Expand a bag with OutputColumnPrefix\r \r Expand a bag and use the \`OutputColumnPrefix\` option to produce column names that begin with the prefix 'Property_'.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjRSrlMq8xNzMZE2uaC4FIIByNaqV/BJzU5WsFJS88jPylHQUlBzTgVwjg1pNHRwKXRLLUuEKTfAo9Eoszs3MQ6g1BquN5apRSC1LzClNLElVSEpMjy/NK0hMztZI0VFQDyjKL0gtKqmMV9cEAG0gI1O8AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(d:dynamic)\r [\r dynamic({"Name": "John", "Age":20}),\r dynamic({"Name": "Dave", "Age":40}),\r dynamic({"Name": "Jasmine", "Age":30}),\r ]\r | evaluate bag_unpack(d, 'Property_')\r \`\`\`\r \r **Output**\r \r |Property_Age|Property_Name|\r |------------|-------------|\r |20 |John |\r |40 |Dave |\r |30 |Jasmine |\r \r ### Expand a bag with columnsConflict\r \r Expand a bag and use the \`columnsConflict\` option to resolve conflicts between existing columns and columns produced by the \`bag_unpack()\` operator.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA43NsQrCMBAG4L1PcWRJC4WKOhUcRKcOOjmJlGty1mKalCapiPrupgq69m66/+fjJLqwlaJ4hy3l1vWNrlOQubxrbBuRRMcIwvC9kmVIiIfyW8UPNhqWAyvMRbMU2LoO53z2StIJaIsD/dByIirQto3+u8XHnaIn0IDKoyOosC697lBcY5mCMMq32m6MPqtGuBXvqVMoqLTG94J4AlkGB0ug6Qbj2zdNIgveEgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Name:string, d:dynamic)\r [\r 'Old_name', dynamic({"Name": "John", "Age":20}),\r 'Old_name', dynamic({"Name": "Dave", "Age":40}),\r 'Old_name', dynamic({"Name": "Jasmine", "Age":30}),\r ]\r | evaluate bag_unpack(d, columnsConflict='replace_source') // Use new name\r \`\`\`\r \r **Output**\r \r |Age|Name |\r |---|-------|\r |20 |John |\r |40 |Dave |\r |30 |Jasmine|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA43NzwqCQBAG8LtPMexlFQSjOgkdok4G9QARMu5OJu4fcV0hqndvLairM6f5Pn6MxCFspSg+oqbcDX1j6hRkLu8GdSOS6BxBGH5SsgwJ8VB+q/jBJsNyYIW9GZYC29bhXC5eSToD7XGkH1rPRAU63Zi/W33cJXoCjag8DgQV1qU3HYo2likIq7w2bmfNVTVi2PCWqCud9b0gnkCWwSEEYJWE6ekb9wh0nRABAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Name:string, d:dynamic)\r [\r 'Old_name', dynamic({"Name": "John", "Age":20}),\r 'Old_name', dynamic({"Name": "Dave", "Age":40}),\r 'Old_name', dynamic({"Name": "Jasmine", "Age":30}),\r ]\r | evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old name\r \`\`\`\r \r **Output**\r \r |Age|Name |\r |---|---------|\r |20 |Old_name |\r |40 |Old_name |\r |30 |Old_name |\r \r ### Expand a bag with ignoredProperties\r \r Expand a bag and use the \`ignoredProperties\` option to ignore certain properties in the property bag.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3XOPQ+CMBAG4J1fcekCJDUoOJE4mLjIYNwJMQe9IBEKaYHEqP/d8iFOtMt76dsnJ7A1Ny3JEaF4SqyKzLViC8yZR+fFLlgRC4FF9V0yDuyYm9HfDkkIRVoPj3Pc7Bh8XL4inLCnRdivCD5bByLUVSH/RrBiBKORWJ4H51zWisA2fRtQCpOmkg2NqhtSbUHaegP1WHbYEqSY3zrZYPZwBIdi/C6uS/Xw2ypeID7piet+AWW2HHFQAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(d:dynamic)\r [\r dynamic({"Name": "John", "Age":20, "Address": "Address-1" }),\r dynamic({"Name": "Dave", "Age":40, "Address": "Address-2"}),\r dynamic({"Name": "Jasmine", "Age":30, "Address": "Address-3"}),\r ]\r // Ignore 'Age' and 'Address' properties\r | evaluate bag_unpack(d, ignoredProperties=dynamic(['Address', 'Age']))\r \`\`\`\r \r **Output**\r \r |Name|\r |---|\r |John|\r |Dave|\r |Jasmine|\r \r ### Expand a bag with a query-defined OutputSchema\r \r Expand a bag and use the \`OutputSchema\` option to allow various optimizations to be evaluated before running the actual query.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjRSrlMq8xNzMZE2uaC4FIIByNaqV/BJzU5WsFJS88jPylHQUlBzTgVwjg1pNHRwKXRLLUuEKTfAo9Eoszs3MQ6g1BquN5apRSC1LzClNLElVSEpMjy/NK0hMztZI0VSwUtAA6bUqLinKzEvXUQDqssrJz0vXBADtklvGyQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(d:dynamic)\r [\r dynamic({"Name": "John", "Age":20}),\r dynamic({"Name": "Dave", "Age":40}),\r dynamic({"Name": "Jasmine", "Age":30}),\r ]\r | evaluate bag_unpack(d) : (Name:string, Age:long)\r \`\`\`\r \r **Output**\r \r |Name |Age |\r |---------|---------|\r |John | 20 |\r |Dave | 40 |\r |Jasmine | 30 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bag-unpackplugin","bag-unpackplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"base64_decode_toarray","Decodes a base64 string to an array of long values.",`## Syntax\r \r \`base64_decode_toarray(\`*base64_string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *base64_string* | string | ✓ | The value to decode from base64 to an array of long values.|\r \r ## Returns\r \r Returns an array of long values decoded from a base64 string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQgszcxLtU1KLE41M4lPSU3OT0mNL8lPLCpKrNRQCjYOq0pxt7BV0lRQ4NLXV1D3VtdRUC8FEcUgogRE5KsDAAf/Q9pKAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print Quine=base64_decode_toarray("S3VzdG8=") \r // 'K', 'u', 's', 't', 'o'\r \`\`\`\r \r **Output**\r \r |Quine|\r |-----|\r |[75,117,115,116,111]|\r \r ## See also\r \r * To decode base64 strings to a UTF-8 string, see [base64_decode_tostring()](base64_decode_tostringfunction.md)\r * To encode strings to a base64 string, see [base64_encode_tostring()](base64_encode_tostringfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/base64_decode_toarrayfunction","base64_decode_toarrayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"base64_decode_toguid","Decodes a base64 string to a [GUID](./scalar-data-types/guid.md).",`## Syntax\r \r \`base64_decode_toguid(\`*base64_string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *base64_string* | string | ✓ | The value to decode from base64 to a GUID. |\r \r ## Returns\r \r Returns a [GUID](./scalar-data-types/guid.md) decoded from a base64 string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQgszcxLVbBVSEosTjUziU9JTc5PSY0vyU8vzUzRUPIqSCpwdS61SAmtNA8oM01PSvWKcHS0tVXSBAA/Uk1CPgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print Quine = base64_decode_toguid("JpbpECu8dUy7Pv5gbeJXAA==") \r \`\`\`\r \r **Output**\r \r |Quine|\r |-----|\r |10e99626-bc2b-754c-bb3e-fe606de25700|\r \r If you try to decode an invalid base64 string, "null" will be returned:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUXDNLSipVLBVSEosTjUziU9JTc5PSY0vyU8vzUzRUEpMSk4xNDI2VNIEADTfymYuAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print Empty = base64_decode_toguid("abcd1231")\r \`\`\`\r \r ## See also\r \r To encode a [GUID](./scalar-data-types/guid.md) to a base64 string, see [base64_encode_fromguid()](base64-encode-fromguid-function.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/base64-decode-toguid-function","base64-decode-toguid-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"base64_decode_tostring","Decodes a base64 string to a UTF-8 string.",`> **Deprecated aliases:** base64_decodestring()\r \r ## Syntax\r \r \`base64_decode_tostring(\`*base64_string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *base64_string* | string | ✓ | The value to decode from base64 to UTF-8 string. |\r \r ## Returns\r \r Returns UTF-8 string decoded from base64 string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQgszcxLtU1KLE41M4lPSU3OT0mNL8kvLgFKpmsoBRuHVaW4W9gqaQIAN0l1sy4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Quine=base64_decode_tostring("S3VzdG8=")\r \`\`\`\r \r **Output**\r \r |Quine|\r |-----|\r |Kusto|\r \r Trying to decode a base64 string that was generated from invalid UTF-8 encoding will return null:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUXDNLSiptE1KLE41M4lPSU3OT0mNL8kvLgFKpmsohRoHVSaGm+YZeHsEGZS4Oxr4mAdlWDqbGfg42ippAgCBCpEtQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print Empty=base64_decode_tostring("U3RyaW5n0KHR0tGA0L7Rh9C60LA=")\r \`\`\`\r \r **Output**\r \r |Empty|\r |-----|\r ||\r \r ## See also\r \r * To decode base64 strings to an array of long values, see [base64_decode_toarray()](base64_decode_toarrayfunction.md)\r * To encode strings to base64 string, see [base64_encode_tostring()](base64_encode_tostringfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/base64_decode_tostringfunction","base64_decode_tostringfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"base64_encode_fromarray","Encodes a base64 string from a bytes array.",`## Syntax\r \r \`base64_encode_fromarray(\`*base64_string_decoded_as_array*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *base64_string_decoded_as_array* | dynamic | ✓ | The bytes array to be encoded into a base64 string. |\r \r ## Returns\r \r Returns the base64 string encoded from the bytes array.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFIqixJLY5PLCpKrFSwVSjJL05OzEks0igoyswDSiYWp5qZxKekJuenpMaX5IOVaSgFG4dVpbhb2CppalpzQVRClKTEQ3UUlwBF04EGQvmpeWAT0orycyFmIFmrCQCPOEFEhwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let bytes_array = toscalar(print base64_decode_toarray("S3VzdG8="));\r print decoded_base64_string = base64_encode_fromarray(bytes_array)\r \`\`\`\r \r **Output**\r \r |decoded_base64_string|\r |---|\r |S3VzdG8=|\r \r Trying to encode a base64 string from an invalid bytes array that was generated from invalid UTF-8 encoded string will return null:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFIzS0oqYxPqixJLY5PLCpKrFSwVSjJL05OzEks0igoyswrUUhKLE41M4lPSU3OT0mNL8kHK9NQCjUOqkwMN80z8PYIMihxdzTwMQ/KsHQ2M/BxVNLUtOaCaIaYX1wC5KQDjYaalZoHNiutKD8XYhqGMzQBTXW2Jp0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let empty_bytes_array = toscalar(print base64_decode_toarray("U3RyaW5n0KHR0tGA0L7Rh9C60LA"));\r print empty_string = base64_encode_fromarray(empty_bytes_array)\r \`\`\`\r \r **Output**\r \r |empty_string|\r |---|\r ||\r \r ## See also\r \r * For decoding base64 strings to a UTF-8 string, see [base64_decode_tostring()](base64_decode_tostringfunction.md)\r * For encoding strings to a base64 string see [base64_encode_tostring()](base64_encode_tostringfunction.md)\r * This function is the inverse of [base64_decode_toarray()](base64_decode_toarrayfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/base64_encode_fromarrayfunction","base64_encode_fromarrayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"base64_encode_fromguid","Encodes a [GUID](./scalar-data-types/guid.md) to a base64 string.",`## Syntax\r \r \`base64_encode_fromguid(\`*guid*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *guid* | guid | ✓ | The value to encode to a base64 string. |\r \r ## Returns\r \r Returns a base64 string encoded from a GUID.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx3FQQqAIBAF0KuIq1oIOcqAiw7RCWLMX7hIw/T+QW/znpZLV9vIBWpVUV6w31GOmrCfrd7XyGnq9U8LnHXuJMMgMj4ITFxYjGWwhEiWEPU8fxrJzt9UAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print Quine = base64_encode_fromguid(toguid("ae3133f2-6e22-49ae-b06a-16e6a9b212eb")) \r \`\`\`\r \r **Output**\r \r |Quine|\r |-----|\r |8jMxriJurkmwahbmqbIS6w==|\r \r If you try to encode anything that isn't a [GUID](./scalar-data-types/guid.md) as below, an error will be thrown:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUXDNLSipVLBVSEosTjUziU/NS85PSY1PK8rPTS/NTNFQSkxKTjE0MjZU0gQApqVKnzAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Empty = base64_encode_fromguid("abcd1231")\r \`\`\`\r \r ## See also\r \r * To decode a base64 string to a [GUID](./scalar-data-types/guid.md), see [base64_decode_toguid()](base64-decode-toguid-function.md).\r * To create a [GUID](./scalar-data-types/guid.md) from a string, see [toguid()](toguidfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/base64-encode-fromguid-function","base64-encode-fromguid-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"base64_encode_tostring","Encodes a string as base64 string.",`> **Deprecated aliases:** base64_encodestring()\r \r ## Syntax\r \r \`base64_encode_tostring(\`*string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *string* | string | ✓ | The value to encode as a base64 string. |\r \r ## Returns\r \r Returns *string* encoded as a base64 string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQgszcxLtU1KLE41M4lPzUvOT0mNL8kvLgFKpmsoeZcWl+QraQIAKEgGNSsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Quine=base64_encode_tostring("Kusto")\r \`\`\`\r \r **Output**\r \r |Quine |\r |--------|\r |S3VzdG8=|\r \r ## See also\r \r * To decode base64 strings to UTF-8 strings, see [base64_decode_tostring()](base64_decode_tostringfunction.md).\r * To decode base64 strings to an array of long values, see [base64_decode_toarray()](base64_decode_toarrayfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/base64_encode_tostringfunction","base64_encode_tostringfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"basket","The `basket` plugin finds frequent patterns of attributes in the data and returns the patterns that pass a frequency threshold in that data. A pattern represents a subset of the rows that have the same value across one or more columns. The `basket` plugin is based on the [Apriori algorithm](https://en.wikipedia.org/wiki/Association_rule_learning#Apriori_algorithm) originally developed for basket analysis data mining.","## Syntax\r\n\r\n*T* | `evaluate` `basket` `(`[ *Threshold*`,` *WeightColumn*`,` *MaxDimensions*`,` *CustomWildcard*`,` *CustomWildcard*`,` ... ]`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*Threshold*|long|| A `double` in the range of 0.015 to 1 that sets the minimal ratio of the rows to be considered frequent. Patterns with a smaller ratio won't be returned. The default value is 0.05. To use the default value, input the tilde: `~`.<br/><br/>Example: `T | evaluate basket(0.02)`|\r\n|*WeightColumn*|string||The column name to use to consider each row in the input according to the specified weight. Must be a name of a numeric type column, such as `int`, `long`, `real`. By default, each row has a weight of 1. To use the default value, input the tilde: `~`. A common use of a weight column is to take into account sampling or bucketing/aggregation of the data that is already embedded into each row.<br/><br/>Example: `T | evaluate basket('~', sample_Count)`|\r\n|*MaxDimensions*|int|| Sets the maximal number of uncorrelated dimensions per basket, limited by default, to minimize the query runtime. The default is 5. To use the default value, input the tilde: `~`.<br/><br/>Example: `T | evaluate basket('~', '~', 3)`|\r\n|*CustomWildcard*|string||Sets the wildcard value for a specific type in the result table that will indicate that the current pattern doesn't have a restriction on this column. The default is `null` except for string columns whose default value is an empty string. If the default is a good value in the data, a different wildcard value should be used, such as `*`. To use the default value, input the tilde: `~`.<br/><br/>Example: `T | evaluate basket('~', '~', '~', '*', int(-1), double(-1), long(0), datetime(1900-1-1))`|\r\n\r\n> [!NOTE]\r\n> To specify an optional parameter that follows an optional parameter, make sure to provide a value for the preceding optional parameter. For more information, see [Working with optional parameters](syntax-conventions.md#working-with-optional-parameters).\r\n\r\n## Returns\r\n\r\nThe `basket` plugin returns frequent patterns that pass a ratio threshold. The default threshold is 0.05.\r\n\r\nEach pattern is represented by a row in the results. The first column is the segment ID. The next two columns are the *count* and *percentage of rows*, from the original query that match the pattern. The remaining columns relate to the original query, with either a specific value from the column or a wildcard value, which is by default null, meaning a variable value.\r\n\r\n> [!NOTE]\r\n> The algorithm uses sampling to determine the initial frequent values. Therefore, the results could slightly differ between multiple runs for patterns whose frequency is close to the threshold.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzVOuw6CQBDs/YoJFURiiInl2SitmkBjeeqeoN4dWVaUxI/3AK1mJzuvQjzbvCMn7eyDV0VMsN5J5U1PmuNCNEtZW0qgFFZBQ28hd8FWW30lKNTGxBPZsG9azH+vQ2DE0mONDCmiY15EA+72URJiGvY3OgtCgVCKcULZN+Gc7H8cQ4faTj+eQYqTbu8kcbZYJl8ixlvuvQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where monthofyear(StartTime) == 5\r | extend Damage = iff(DamageCrops + DamageProperty > 0 , "YES" , "NO")\r | project State, EventType, Damage, DamageCrops\r | evaluate basket(0.2)\r \`\`\`\r \r **Output**\r \r |SegmentId|Count|Percent|State|EventType|Damage|DamageCrops|\r |---|---|---|---|---|---|---|---|---|\r |0|4574|77.7|||NO|0\r |1|2278|38.7||Hail|NO|0\r |2|5675|96.4||||0\r |3|2371|40.3||Hail||0\r |4|1279|21.7||Thunderstorm Wind||0\r |5|2468|41.9||Hail||\r |6|1310|22.3|||YES|\r |7|1291|21.9||Thunderstorm Wind||\r \r ### Example with custom wildcards\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzVOMQ6CQBDsfcWEhjtFgyaW2CitmkBjeeoiqMeRY0VJjG/3AG1mdrKzM5uwsTpuqOR69MYzJ0vQpuTcZC0pKxJWltNCk0QUYek89GIqz9gorS6ECEWWiUGsralqTH6rvVNkucUKIQJ4hzjxOt7uPOliKmuudGK4AqYA/QtpW7lxOP9zH9rVNur+cFYcVX0jFuFsEcD/+H8YOyhKFtO5lF/0AFrQ1QAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where monthofyear(StartTime) == 5\r | extend Damage = iff(DamageCrops + DamageProperty > 0 , "YES" , "NO")\r | project State, EventType, Damage, DamageCrops\r | evaluate basket(0.2, '~', '~', '*', int(-1))\r \`\`\`\r \r **Output**\r \r |SegmentId|Count|Percent|State|EventType|Damage|DamageCrops|\r |---|---|---|---|---|---|---|---|---|\r |0|4574|77.7|\\*|\\*|NO|0\r |1|2278|38.7|\\*|Hail|NO|0\r |2|5675|96.4|\\*|\\*|\\*|0\r |3|2371|40.3|\\*|Hail|\\*|0\r |4|1279|21.7|\\*|Thunderstorm Wind|\\*|0\r |5|2468|41.9|\\*|Hail|\\*|-1\r |6|1310|22.3|\\*|\\*|YES|-1\r |7|1291|21.9|\\*|Thunderstorm Wind|\\*|-1\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # Basket plugin - Internal\r \r If you have questions about basket or other ML related workflows in Kusto you can post them on the following DL: [KustoML](mailto:kustoML@microsoft.com).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/basketplugin","basketplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"beta_cdf","Returns the standard cumulative beta distribution function.","If *probability* = `beta_cdf(`*x*,...`)`, then `beta_inv(`*probability*,...`)` = *x*.\r\n\r\nThe beta distribution is commonly used to study variation in the percentage of something across samples, such as the fraction of the day people spend watching television.\r\n\r\n## Syntax\r\n\r\n`beta_cdf(`*x*`,` *alpha*`,` *beta*`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n| *x* | int, long, or real | ✓| A value at which to evaluate the function.|\r\n| *alpha* | int, long, or real | ✓| A parameter of the distribution.|\r\n| *beta* | int, long, or real | ✓| A parameter of the distribution.|\r\n\r\n## Returns\r\n\r\nThe [cumulative beta distribution function](https://en.wikipedia.org/wiki/Beta_distribution#Cumulative_distribution_function).\r\n\r\n> [!NOTE]\r\n>\r\n> * If any argument is nonnumeric, the function returns `null`.\r\n> * If `x < 0` or `x > 1`, the function returns `NaN`.\r\n> * If `alpha \u2264 0` or `alpha > 10000`, the function returns `NaN`.\r\n> * If `beta \u2264 0` or `beta > 10000`, the function returns `NaN`.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PwQrCMBBE7/mKoacWYkgFDxb1E3r0IiJpEzWQpsWmEMGPN6algnUXlh2Yt8tI4UJXRqW+kO0QFgphuruYVaXcV9Rt0yjrit49tL1l5EQQirMtRc4Zp1jHmRyF0RLadoNLaPTkbPPj8Tggp3hqZWSPUpSTc/yVrnKeLYgd+B+Cs3BnxtiHm4gYBbpfgORMXlDeKStRYR9TXmp5Tf2UfwyevQFA2/Y/IAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(x:double, alpha:double, beta:double, comment:string)\r [\r 0.9, 10.0, 20.0, "Valid input",\r 1.5, 10.0, 20.0, "x > 1, yields NaN",\r double(-10), 10.0, 20.0, "x < 0, yields NaN",\r 0.1, double(-1.0), 20.0, "alpha is < 0, yields NaN"\r ]\r | extend b = beta_cdf(x, alpha, beta)\r \`\`\`\r \r **Output**\r \r |x|alpha|beta|comment|b|\r |---|---|---|---|---|\r |0.9|10|20|Valid input|0.999999999999959|\r |1.5|10|20|x > 1, yields NaN|NaN|\r |-10|10|20|x < 0, yields NaN|NaN|\r |0.1|-1|20|alpha is < 0, yields NaN|NaN|\r \r ## See also\r \r * For computing the inverse of the beta cumulative probability density function, see [beta-inv()](./beta-invfunction.md).\r * For computing probability density function, see [beta-pdf()](./beta-pdffunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/beta-cdffunction","beta-cdffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"beta_inv","Returns the inverse of the beta cumulative probability density function.","If *probability* = `beta_cdf(`*x*,...`)`, then `beta_inv(`*probability*,...`)` = *x*.\r\n\r\nThe beta distribution can be used in project planning to model probable completion times given an expected completion time and variability.\r\n\r\n## Syntax\r\n\r\n`beta_inv(`*probability*`,`*alpha*`,`*beta*`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n| *probability* | int, long, or real | ✓| A probability associated with the beta distribution.|\r\n| *alpha* | int, long, or real | ✓| A parameter of the distribution.|\r\n| *beta* | int, long, or real | ✓| A parameter of the distribution.|\r\n\r\n## Returns\r\n\r\nThe inverse of the beta cumulative probability density function [beta_cdf()](./beta-cdffunction.md)\r\n\r\n> [!NOTE]\r\n>\r\n> * If any argument is nonnumeric, the function returns `null`.\r\n> * If `alpha \u2264 0` or `beta \u2264 0`, the function returns `null`.\r\n> * If `probability \u2264 0` or `probability > 1`, the function returns `NaN`.\r\n> * Given a value for *probability*, `beta_inv()` seeks that value x such that `beta_cdf(x, alpha, beta)` `=` *probability*.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA11PQQrCMBC85xVDTw3EkAheivYJPXoRkdQEDaRpsIko+HhDWiq4C8sOzOzOaBVz987UodFjyguDcuGuVtSb+APXcRiMj80UH9bfKDkR5BJcMkjBBcO2zOqonNWwPqRYscKRfPfHCWiRdW9rnJ7gk3MLtZybP9YbyQVdJcUZ7IQ9xKrsVFeRM/nAvKLxGj0OxfTF+mcdljhzDvoFBansKu8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(p:double, alpha:double, beta:double, comment:string)\r [\r 0.1, 10.0, 20.0, "Valid input",\r 1.5, 10.0, 20.0, "p > 1, yields null",\r 0.1, double(-1.0), 20.0, "alpha is < 0, yields NaN"\r ]\r | extend b = beta_inv(p, alpha, beta)\r \`\`\`\r \r **Output**\r \r |p|alpha|beta|comment|b|\r |---|---|---|---|---|\r |0.1|10|20|Valid input|0.226415022388749|\r |1.5|10|20|p > 1, yields null||\r |0.1|-1|20|alpha is < 0, yields NaN|NaN|\r \r ## See also\r \r * For computing cumulative beta distribution function, see [beta-cdf()](./beta-cdffunction.md).\r * For computing probability beta density function, see [beta-pdf()](./beta-pdffunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/beta-invfunction","beta-invfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"beta_pdf","Returns the probability density beta function.","The beta distribution is commonly used to study variation in the percentage of something across samples, such as the fraction of the day people spend watching television.\r\n\r\n## Syntax\r\n\r\n`beta_pdf(`*x*`,` *alpha*`,` *beta*`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n| *x* | int, long, or real | ✓| A value at which to evaluate the function.|\r\n| *alpha* | int, long, or real | ✓| A parameter of the distribution.|\r\n| *beta* | int, long, or real | ✓| A parameter of the distribution.|\r\n\r\n## Returns\r\n\r\nThe [probability beta density function](https://en.wikipedia.org/wiki/Beta_distribution#Probability_density_function).\r\n\r\n> [!NOTE]\r\n>\r\n> * If any argument is nonnumeric, the function returns `null`.\r\n> * If `x \u2264 0` or `1 \u2264 x`, the function returns `NaN`.\r\n> * If `alpha \u2264 0` or `beta \u2264 0`, the function returns `NaN`.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PwQrCMBBE7/mKoacWYkgEL0X9hB69iEhqogbStLQpRPDjjWmph7oLyw7M22WU9LFrq/NQqnaMC4W03VMuqtb+J25t02jny8H3xj0KciaIxdmOQnDGKbZpZidpjYJx3egzmjxi5Qk4QlC8jLZqQCWr2Tn9yjeCFytiD/6H4CzeWTD25WYiRYEZViC5kDd08Nop9DiklNdO3fMw55+CFx9P6bKEIAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(x:double, alpha:double, beta:double, comment:string)\r [\r 0.5, 10.0, 20.0, "Valid input",\r 1.5, 10.0, 20.0, "x > 1, yields NaN",\r double(-10), 10.0, 20.0, "x < 0, yields NaN",\r 0.1, double(-1.0), 20.0, "alpha is < 0, yields NaN"\r ]\r | extend r = beta_pdf(x, alpha, beta)\r \`\`\`\r \r **Output**\r \r |x|alpha|beta|comment|r|\r |---|---|---|---|---|\r |0.5|10|20|Valid input|0.746176019310951|\r |1.5|10|20|x > 1, yields NaN|NaN|\r |-10|10|20|x < 0, yields NaN|NaN|\r |0.1|-1|20|alpha is < 0, yields NaN|NaN|\r \r ## See also\r \r * For computing the inverse of the beta cumulative probability density function, see [beta-inv()](./beta-invfunction.md).\r * For the standard cumulative beta distribution function, see [beta-cdf()](./beta-cdffunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/beta-pdffunction","beta-pdffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"between","Filters a record set for data matching the values in an inclusive range.","`between` can operate on any numeric, datetime, or timespan expression.\r\n\r\n## Syntax\r\n\r\n*T* `|` `where` *expr* `between` `(`*leftRange*` .. `*rightRange*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input whose records are to be matched. For example, the table name. |\r\n| *expr* | scalar | ✓ | The expression used to filter. |\r\n| *leftRange* | int, long, real, or datetime | ✓ | The expression of the left range. The range is inclusive.|\r\n| *rightRange* | int, long, real, datetime, or timespan | ✓ | The expression of the right range. The range is inclusive.<br/><br/>This value can only be of type [timespan](scalar-data-types/timespan.md) if *expr* and *leftRange* are both of type `datetime`. See [example](#filter-using-a-timespan-range).|\r\n\r\n## Returns\r\n\r\nRows in *T* for which the predicate of (*expr* >= *leftRange* and *expr* <= *rightRange*) evaluates to `true`.",`### Filter numeric values\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzA0MFAoLkktUDDk5apRKM9ILQLJJ6WWlKem5ilomBoo6OkpmJpqAgBfXYZBOgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 100 step 1\r | where x between (50 .. 55)\r \`\`\`\r \r **Output**\r \r |x|\r |---|\r |50|\r |51|\r |52|\r |53|\r |54|\r |55|\r \r ### Filter by date\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVQguSSwqCcnMTVVISi0pT03NU9BISSxJLQGKaBgZGJjrApGRuaaCnp4ChrixgaYmyKTk/NK8EgBluyagXgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where StartTime between (datetime(2007-07-27) .. datetime(2007-07-30))\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |476|\r \r ### Filter by date and time\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLCoJycxNVUhKLSlPTc1T0EhJLEktAYpoGBkYmOsaGukaGIYYGFoZG1gZGGgq6OkpYFVgAZQFKdAEGp2cX5pXAgDpcS3kbgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where StartTime between (datetime(2007-12-01T01:30:00) .. datetime(2007-12-01T08:00:00))\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |301|\r \r ### Filter using a timespan range\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVQguSSwqCcnMTVVISi0pT03NU9BISSxJLQGKaBgZGJjrApGRuaaCnp6CcYomSF9yfmleCQCGAqjRTAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where StartTime between (datetime(2007-07-27) .. 3d)\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |476|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/betweenoperator","betweenoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bin","Rounds values down to an integer multiple of a given bin size.",`Used frequently in combination with [\`summarize by ...\`](./summarizeoperator.md).\r If you have a scattered set of values, they'll be grouped into a smaller set of specific values.\r \r > The \`bin()\` and \`floor()\` functions are equivalent\r \r ## Syntax\r \r \`bin(\`*value*\`,\`*roundTo*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int, long, real, [timespan](scalar-data-types/timespan.md), or datetime | ✓ | The value to round down. |\r | *roundTo* | int, long, real, or [timespan](scalar-data-types/timespan.md) | ✓ | The "bin size" that divides *value*. |\r \r ## Returns\r \r The nearest multiple of *roundTo* below *value*. Null values, a null bin size, or a negative bin size will result in null.`,`### Numeric bin\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjKzNMw0TPVUTDUBACk1J4hEQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print bin(4.5, 1)\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |4|\r \r ### Timespan bin\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjKzNMoycxN1TA0S9HUUTBP0QQAELu46BgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print bin(time(16d), 7d)\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |14:00:00:00|\r \r ### Datetime bin\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjKzNNISSxJLcnMTdUwtDQ30DUw1TU0VDA0tjIxtTIw19RRMEzRBADBlT+OLAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print bin(datetime(1970-05-11 13:45:07), 1d)\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |1970-05-11T00:00:00Z|\r \r ### Pad a table with null bins\r \r When there are rows for bins with no corresponding row in the table, we recommend to pad the table with those bins. The following query looks at strong wind storm events in California for a week in April. However, there are no events on some of the days.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02OQQuCQBCF7/6KwYtKKRaBB9mDlIEQFRl0XtnBBHeVdUqMfnxbS9Ft4Pvee9MiQUlcEzAQnJAaib63jOMkjFdhnHhB6rTGyZUwhjVnkIjUKanTMr+josF5wnhFjZafTQVUSCOiAt9GoujdEPyLhMAYuOtsV2wPp32RucDNyKfxPPWWlqQ7VcOlUcI14eEmJdfNA+Goux41TRsueY3MAN+eXxBANUHVKP/30xwWIngBzQQjwPAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Start = datetime('2007-04-07');\r let End = Start + 7d;\r StormEvents\r | where StartTime between (Start .. End)\r | where State == "CALIFORNIA" and EventType == "Strong Wind"\r | summarize PropertyDamage=sum(DamageProperty) by bin(StartTime, 1d)\r \`\`\`\r \r **Output**\r \r |StartTime|PropertyDamage|\r |--|--|\r |2007-04-08T00:00:00Z|3000|\r |2007-04-11T00:00:00Z|1000|\r |2007-04-12T00:00:00Z|105000|\r \r In order to represent the full week, the following query pads the result table with null values for the missing days. Here's a step-by-step explanation of the process:\r \r 1. Use the \`union\` operator to add more rows to the table.\r 1. The \`range\` operator produces a table that has a single row and column.\r 1. The \`mv-expand\` operator over the \`range\` function creates as many rows as there are bins between \`StartTime\` and \`EndTime\`.\r 1. Use a \`PropertyDamage\` of \`0\`.\r 1. The \`summarize\` operator groups together bins from the original table to the table produced by the \`union\` expression. This process ensures that the output has one row per bin whose value is either zero or the original count.\r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12QQWuDQBCF7/6Kh5cojUFLIYfgIbQpBEpbaqDnFSdWyO7KOkm05Md3dJtQuodl4b33zZs9EKNg5Rg5KsXEjaZodp+myyR9SNLlLF4FB/FsTCUO77zDsloFBVunNycy3AUXnL/Ikdd3gkBJfCYyiHxksRgJ8V8jE/Ic4eP6Zfv89vG6XYdQMmQi7obWqwU7a2p8NqYKJXw0jRVmADlOmZrQY++sRga2cnVMLbJJvkCfEurbkXmrlU8h32k+Npojq+IxyzLR7qPrF8S/DOqZBPDubEuOhyelVU15OqnjNt1Ra+Wab/pvESHyz6sQoxxQNia6tZmG/wDAjjX+gQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Start = datetime('2007-04-07');\r let End = Start + 7d;\r StormEvents\r | where StartTime between (Start .. End)\r | where State == "CALIFORNIA" and EventType == "Strong Wind"\r | union (\r range x from 1 to 1 step 1\r | mv-expand StartTime=range(Start, End, 1d) to typeof(datetime)\r | extend PropertyDamage=0\r )\r | summarize PropertyDamage=sum(DamageProperty) by bin(StartTime, 1d)\r \`\`\`\r \r **Output**\r \r |StartTime|PropertyDamage|\r |--|--|\r |2007-04-07T00:00:00Z|0|\r |2007-04-08T00:00:00Z|3000|\r |2007-04-09T00:00:00Z|0|\r |2007-04-10T00:00:00Z|0|\r |2007-04-11T00:00:00Z|1000|\r |2007-04-12T00:00:00Z|105000|\r |2007-04-13T00:00:00Z|0|\r |2007-04-14T00:00:00Z|0|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binfunction","binfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bin_at","Rounds values down to a fixed-size bin, with control over the bin's starting point.",`## Syntax\r \r \`bin_at\` \`(\`*value*\`,\`*bin_size*\`,\`*fixed_point*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int, long, real, timespan, or datetime | ✓ | The value to round. |\r | *bin_size* | int, long, real, or timespan | ✓ | The size of each bin. |\r | *fixed_point* | int, long, real, timespan, or datetime | ✓ | A constant of the same type as *value* indicating one value of *value*, which is a *fixed point* for which \`bin_at(fixed_point, bin_size, fixed_point) == fixed_point\`.|\r \r > [!NOTE]\r > If *value* is a timespan or datetime, then the *bin_size* must be a timespan.\r \r ## Returns\r \r The nearest multiple of *bin_size* below *value*, shifted so that *fixed_point*\r will be translated into itself.`,`|Expression |Result |Comments |\r |------------------------------------------------------------------------------|---------------------------------|---------------------------|\r |\`bin_at(6.5, 2.5, 7)\` |\`4.5\` ||\r |\`bin_at(time(1h), 1d, 12h)\` |\`-12h\` ||\r |\`bin_at(datetime(2017-05-15 10:20:00.0), 1d, datetime(1970-01-01 12:00:00.0))\`|\`datetime(2017-05-14 12:00:00.0)\`|All bins will be at noon |\r |\`bin_at(datetime(2017-05-17 10:20:00.0), 7d, datetime(2017-06-04 00:00:00.0))\`|\`datetime(2017-05-14 00:00:00.0)\`|All bins will be on Sundays|\r \r In the following example, notice that the \`"fixed point"\` arg is returned as one of the bins and the other bins are aligned to it based on the \`bin_size\`. Also note that each datetime bin represents the starting time of that bin:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUDZfEklSrFCBRkpmbqqPgV5prlZlXohnNywUT1DAyMLTQNTDSNTIJMTS1MjTR1DHWwSZtHGJoBpY2wSptBtNtGsvLVaNQXJqbm1iUWZUKYmkA7dVUSKpUSMrMi08sAbtKR8EwRUcBiysUwOZYGRjoGUCApiYAxLxe/tAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Date:datetime, Num:int)[\r datetime(2018-02-24T15:14),3,\r datetime(2018-02-23T16:14),4,\r datetime(2018-02-26T15:14),5]\r | summarize sum(Num) by bin_at(Date, 1d, datetime(2018-02-24 15:14:00.0000000)) \r \`\`\`\r \r **Output**\r \r |Date|sum_Num|\r |---|---|\r |2018-02-23 15:14:00.0000000|4|\r |2018-02-24 15:14:00.0000000|3|\r |2018-02-26 15:14:00.0000000|5|\r \r ## See also\r \r * [\`bin()\`](./binfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binatfunction","binatfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bin_auto","Rounds values down to a fixed-size bin, with control over the bin size and starting point provided by a query property.",`## Syntax\r \r \`bin_auto\` \`(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int, long, real, timespan, or datetime | ✓ | The value to round into bins. |\r \r To control the bin size and starting point, set the following parameters before using the function.\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *query_bin_auto_size* | int, long, real, or timespan | ✓ | Indicates the size of each bin.|\r | *query_bin_auto_at* | int, long, real, or timespan | | Indicates one value of *value* which is a "fixed point" for which \`bin_auto(fixed_point)\` == \`fixed_point\`. Default is 0.|\r \r ## Returns\r \r The nearest multiple of \`query_bin_auto_size\` below *value*, shifted so that \`query_bin_auto_at\`\r will be translated into itself.`,`\`\`\`\r set query_bin_auto_size=1h;\r set query_bin_auto_at=datetime(2017-01-01 00:05);\r range Timestamp from datetime(2017-01-01 00:05) to datetime(2017-01-01 02:00) step 1m\r | summarize count() by bin_auto(Timestamp)\r \`\`\`\r \r **Output**\r \r |Timestamp | count_|\r |-----------------------------|-------|\r |2017-01-01 00:05:00.0000000 | 60 |\r |2017-01-01 01:05:00.0000000 | 56 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bin-autofunction","bin-autofunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_all_and","Accumulates values using the binary `AND` operation for each summarization group, or in total if a group is not specified.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`binary_all_and\` \`(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | long | ✓ | The value used for the binary \`AND\` calculation. |\r \r ## Returns\r \r Returns an aggregated value using the binary \`AND\` operation over records for each summarization group, or in total if a group is not specified.`,`The following example produces \`CAFEF00D\` using binary \`AND\` operations:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjbzSXKuc/Lx0Ta5oLgUFgwo3KNBRQHANDNx0wDxniJwLhOfm6OYKVsoVy1WjUFyam5tYlFmVqlCUWlyaU6Jgq1CSX1pQkFqkUZKfkVqhkZSZl1hUGZ+YkxOfmJcCslhTUxMAwZHTS4kAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(num:long)\r [\r 0xFFFFFFFF, \r 0xFFFFF00F,\r 0xCFFFFFFD,\r 0xFAFEFFFF,\r ]\r | summarize result = toupper(tohex(binary_all_and(num)))\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |CAFEF00D|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-all-and-aggfunction","binary-all-and-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_all_or","Accumulates values using the binary `OR` operation for each summarization group, or in total if a group is not specified.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`binary_all_or\` \`(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | long | ✓ | The value used for the binary \`OR\` calculation. |\r \r ## Returns\r \r Returns an aggregated value using the binary \`OR\` operation over records for each summarization group, or in total if a group is not specified.`,`The following example produces \`CAFEF00D\` using binary \`OR\` operations:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjbzSXKuc/Lx0Ta5oLgUFgwoLEDAwsNAB80yMDMAAwjMwMDczR+KBgamOAlcsV41CcWlubmJRZlWqQlFqcWlOiYKtQkl+aUFBapFGSX5GaoVGUmZeYlFlfGJOTnx+EcheTU1NAEGLHNSIAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(num:long)\r [\r 0x88888008,\r 0x42000000,\r 0x00767000,\r 0x00000005, \r ]\r | summarize result = toupper(tohex(binary_all_or(num)))\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |CAFEF00D|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-all-or-aggfunction","binary-all-or-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_all_xor","Accumulates values using the binary `XOR` operation for each summarization group, or in total if a group is not specified.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`binary_all_xor\` \`(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | long | ✓ | The value used for the binary \`XOR\` calculation. |\r \r ## Returns\r \r Returns a value that is aggregated using the binary \`XOR\` operation over records for each summarization group, or in total if a group is not specified.`,`The following example produces \`CAFEF00D\` using binary \`XOR\` operations:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjbzSXKuc/Lx0Ta5oLgUFgwoTExMDENYB8wxdIRDCszRwdHJyNLCE8AwMDJwMDUwddbhiuWoUiktzcxOLMqtSFYpSi0tzShRsFUrySwsKUos0SvIzUis0kjLzEosq4xNzcuIr8otA9mpqagIAuXol8IgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(num:long)\r [\r 0x44404440,\r 0x1E1E1E1E,\r 0x90ABBA09,\r 0x000B105A,\r ]\r | summarize result = toupper(tohex(binary_all_xor(num)))\r \`\`\`\r \r **Output**\r \r |results|\r |--|\r |CAFEF00D|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-all-xor-aggfunction","binary-all-xor-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_and","Returns a result of the bitwise `AND` operation between two values.",`## Syntax\r \r \`binary_and(\`*value1*\`,\`*value2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value1* | long | ✓ | The left-hand value of the bitwise \`AND\` operation. |\r | *value2* | long | ✓ | The right-hand value of the bitwise \`AND\` operation. |\r \r ## Returns\r \r Returns logical \`AND\` operation on a pair of numbers: value1 & value2.`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-andfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_not","Returns a bitwise negation of the input value.",`## Syntax\r \r \`binary_not(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | long | ✓ | The value to negate. |\r \r ## Returns\r \r Returns logical NOT operation on a number: value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjKzEssqozPyy/RMDQw0AQAChXSgRUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r binary_not(100)\r \`\`\`\r \r **Output**\r \r |result|\r |------|\r |-101|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-notfunction","binary-notfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_or","Returns a result of the bitwise `or` operation of the two values.",`## Syntax\r \r \`binary_or(\`*value1*\`,\` *value2* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value1* | long | ✓ | The left-hand value of the bitwise \`OR\` operation. |\r | *value2* | long | ✓ | The right-hand value of the bitwise \`OR\` operation. |\r \r ## Returns\r \r Returns logical OR operation on a pair of numbers: value1 | value2.`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-orfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_shift_left","Returns binary shift left operation on a pair of numbers.",`## Syntax\r \r \`binary_shift_left(\`*value*\`,\`*shift*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int | ✓ | The value to shift left. |\r | *shift* | int | ✓ | The number of bits to shift left. |\r \r ## Returns\r \r Returns binary shift left operation on a pair of numbers: value << (shift%64).\r If n is negative, a NULL value is returned.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswr0UjKzEssqowvzshMK4nPSU0r0TDUMdLUBADck7ZgHQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r binary_shift_left(1,2)\r \`\`\`\r \r **Output**\r \r |Result|\r |------|\r |4 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-shift-leftfunction","binary-shift-leftfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_shift_right","Returns binary shift right operation on a pair of numbers.",`## Syntax\r \r \`binary_shift_right(\`*value*\`,\`*shift*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int | ✓ | The value to shift right. |\r | *shift* | int | ✓ | The number of bits to shift right. |\r \r ## Returns\r \r Returns binary shift right operation on a pair of numbers: value >> (shift%64).\r If n is negative, a NULL value is returned.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswr0UjKzEssqowvzshMK4kvykzPKNEw1DHS1AQAd48PPR4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r binary_shift_right(1,2)\r \`\`\`\r \r **Output**\r \r |Result|\r |------|\r |0 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-shift-rightfunction","binary-shift-rightfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"binary_xor","Returns a result of the bitwise `xor` operation of the two values.",`## Syntax\r \r \`binary_xor(\`*value1*\`,\`*value2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value1* | int | ✓ | The left-side value of the XOR operation. |\r | *value2* | int | ✓ | The right-side value of the XOR operation. |\r \r ## Returns\r \r Returns logical XOR operation on a pair of numbers: value1 ^ value2.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswr0UjKzEssqoyvyC/SMNQx1NQEAKWP8zEWAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r binary_xor(1,1)\r \`\`\`\r \r **Output**\r \r |Result|\r |------|\r |0 |\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswr0UjKzEssqoyvyC/SMNQx0tQEAPwxtTMWAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r binary_xor(1,2)\r \`\`\`\r \r **Output**\r \r |Result|\r |------|\r |3 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/binary-xorfunction","binary-xorfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"bitset_count_ones","Returns the number of set bits in the binary representation of a number.",`## Syntax\r \r \`bitset_count_ones(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int | ✓ | The value for which to calculate the number of set bits. |\r \r ## Returns\r \r Returns the number of set bits in the binary representation of a number.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA9PXVzAxUrBVMDbSttA2UrBSSFI3MDAEQ3UFW6C4QlJmSbFCcWoJL1dBUWZeiUJ+XmoxUANIOLUkPjm/NK8kHiSmYWKkCQAj0l10TgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r // 42 = 32+8+2 : b'00101010' == 3 bits set\r print ones = bitset_count_ones(42) \r \`\`\`\r \r **Output**\r \r |ones|\r |---|\r |3|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/bitset-count-onesfunction","bitset-count-onesfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"buildschema","Builds the minimal schema that admits all values of *DynamicExpr*.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`buildschema\` \`(\`*DynamicExpr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*DynamicExpr*| dynamic | ✓ | Expression used for the aggregation calculation.\r \r ## Returns\r \r Returns the minimal schema that admits all values of *DynamicExpr*.\r \r > [!TIP]\r > If \`buildschema(json_column)\` gives a syntax error:\r >\r > > *Is your \`json_column\` a string rather than a dynamic object?*\r >\r > then use \`buildschema(parsejson(json_column))\`.`,`The following example builds a schema based on:\r \r * \`{"x":1, "y":3.5}\`\r * \`{"x":"somevalue", "z":[1, 2, 3]}\`\r * \`{"y":{"w":"zzz"}, "t":["aa", "bb"], "z":["foo"]}\`\r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WOQQrCMBBF9z3F8FctBEGLm1ylZDFpIgYSA7ZVm9q7O2p3nVkN/73POB5lbfT1g+PkNbn5xin0DXUVyWxnveAFfVSEGbo9nNdG7WMMOflfDQQs0J0IJ0Wt2eNSs+ApTikFq+Cj4GD+mtbCbAW45AzRK1O9aZhS4nsonuwUohv6q0/8/7v5AOnXbR3IAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(value: dynamic) [\r dynamic({"x":1, "y":3.5}),\r dynamic({"x":"somevalue", "z":[1, 2, 3]}),\r dynamic({"y":{"w":"zzz"}, "t":["aa", "bb"], "z":["foo"]})\r ]\r | summarize buildschema(value)\r \`\`\`\r \r **Results**\r \r |schema_value|\r |--|\r |{"x":["long","string"],"y":["double",{"w":"string"}],"z":{"\`indexer\`":["long","string"]},"t":{"\`indexer\`":"string"}}|\r \r The resulting schema tells us that:\r \r * The root object is a container with four properties named x, y, z, and t.\r * The property called \`x\` is of type *long* or of type *string*.\r * The property called \`y\` ii of type *double*, or another container with a property called \`w\` of type *string*.\r * The \`indexer\` keyword indicates that \`z\` and \`t\` are arrays.\r * Each item in the array \`z\` is of type *long* or of type *string*.\r * \`t\` is an array of strings.\r * Every property is implicitly optional, and any array may be empty.\r \r \r ### Schema model\r \r The syntax of the returned schema is:\r \r Container ::= '{' Named-type* '}';\r Named-type: := (name | '"\`indexer\`"') ':' Type;\r Type ::= Primitive-type | Union-type | Container;\r Union-type ::= '[' Type* ']';\r Primitive-type ::= "long" | "string" | ...;\r \r The values are equivalent to a subset of TypeScript type annotations, encoded as a Kusto dynamic value.\r In TypeScript, the example schema would be:\r \r \`\`\`typescript\r var someobject:\r {\r x?: (number | string),\r y?: (number | { w?: string}),\r z?: { [n:number] : (long | string)},\r t?: { [n:number]: string }\r }\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/buildschema-aggfunction","buildschema-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"case","Evaluates a list of predicates and returns the first result expression whose predicate is satisfied.","If none of the predicates return `true`, the result of the `else` expression is returned.\r\nAll `predicate` arguments must be expressions that evaluate to a `boolean` value.\r\nAll `then` arguments and the `else` argument must be of the same type.\r\n\r\n## Syntax\r\n\r\n`case(`*predicate_1*, *then_1*,\r\n [*predicate_2*, *then_2*, ...]\r\n *else*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *predicate* | string | ✓ | An expression that evaluates to a `boolean` value. |\r\n| *then* | string | ✓ | An expression that gets evaluated and its value is returned from the function if *predicate* is the first predicate that evaluates to `true`. |\r\n| *else* | string | ✓ | An expression that gets evaluated and its value is returned from the function if neither of the *predicate_i* evaluate to `true`. |\r\n\r\n## Returns\r\n\r\nThe value of the first *then_i* whose *predicate_i* evaluates to `true`, or the value of *else* if neither of the predicates are satisfied.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA33LQQpAQACF4b1yh9esKAtDdtyAlRMMHolBY5Tk8KTs5F9/v1FTR5T9QbRm1pCwM2SC1XJB5DonuFtODaqtHmiRoVYrvWdIM8QBRKnVOIoAroPvXizDWxds+k3/cZEr01H4FzbjCsCbAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range Size from 1 to 15 step 2\r | extend bucket = case(Size <= 3, "Small", \r Size <= 10, "Medium", \r "Large")\r \`\`\`\r \r **Output**\r \r |Size|bucket|\r |---|---|\r |1|Small|\r |3|Small|\r |5|Medium|\r |7|Medium|\r |9|Medium|\r |11|Large|\r |13|Large|\r |15|Large|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/casefunction","casefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ceiling","Calculates the smallest integer greater than, or equal to, the specified numeric expression.",`## Syntax\r \r \`ceiling(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | int, long, or real | ✓ | The value to round up. |\r \r ## Returns\r \r The smallest integer greater than, or equal to, the specified numeric expression.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUg2VLBVSE7NzMnMS9fQNdQz1NRRSDZCEjMACRgjC+hZagIAMiJDFDwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print c1 = ceiling(-1.1), c2 = ceiling(0), c3 = ceiling(0.9)\r \`\`\`\r \r **Output**\r \r |c1|c2|c3|\r |---|---|---|\r |-1|0|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ceilingfunction","ceilingfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"cluster","Changes the reference of the query to a remote cluster. To access a database within the same cluster, use the [database()](databasefunction.md) function. For more information, see [cross-database and cross-cluster queries](cross-cluster-or-database-queries.md).",`## Syntax\r \r \`cluster(\`*name*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *name* | string | ✓ | The name of the cluster to reference. The value can be specified as a fully qualified domain name, or the name of the cluster without the \`.kusto.windows.net\` suffix. The value can't be the result of subquery evaluation. |`,`### Use cluster() to access remote cluster\r \r The following query can be run on any cluster.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleLogs?query=H4sIAAAAAAAAA0vOKS0uSS3SUM9IzSlQ19RLSSxJTEosTtVQD07MLchJLQaKBZfkF+W6lqXmlRQr1Cgk55fmlQAAayjLjjcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r cluster('help').database('Samples').StormEvents | count\r \r cluster('help.kusto.windows.net').database('Samples').StormEvents | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |59066|\r \r ### Use cluster() inside let statements\r \r The previous query can be rewritten to use a query-defined function (\`let\` statement) that takes a parameter called \`clusterName\` and passes it to the \`cluster()\` function.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleLogs?query=H4sIAAAAAAAAA8tJLVFIy89XsFXQSM4pLS5JLfJLzE21Ki4pysxL1+Sq5lIAAqgMsgpNvZTEksSkxOJUDfXgxNyCnNRidU294JL8olzXstS8kmKFGoXk/NK8Eq5aay6gBRrqGak5BeqaADuaG9BwAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let foo = (clusterName:string)\r {\r cluster(clusterName).database('Samples').StormEvents | count\r };\r foo('help')\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |59066|\r \r ### Use cluster() inside Functions\r \r The same query as above can be rewritten to be used in a function that\r receives a parameter \`clusterName\` - which is passed into the cluster() function.\r \r \`\`\`\r .create function foo(clusterName:string)\r {\r cluster(clusterName).database('Samples').StormEvents | count\r };\r \`\`\`\r \r > [!NOTE]\r > Stored functions using the \`cluster()\` function can't be used in cross-cluster queries.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/clusterfunction","clusterfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"coalesce","Evaluates a list of expressions and returns the first non-null (or non-empty for string) expression.",`## Syntax\r \r \`coalesce(\`*arg*\`,\`*arg_2*\`,[\`*arg_3*\`,...])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | arg | scalar | ✓ | The expression to be evaluated.|\r \r > [!NOTE]\r >\r > * All arguments must be of the same type.\r > * Maximum of 64 arguments is supported.\r \r ## Returns\r \r The value of the first *arg* whose value isn't null (or not-empty for string expressions).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleLogs?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbFNzk/MSS1OTtUoyc/Jz0vXUMrLL1FIVMgrzU1KLVLS1FGAiZsYgXjGxpoA2oxMXz8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=coalesce(tolong("not a number"), tolong("42"), 33)\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |42|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/coalescefunction","coalescefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"consume","Consumes the tabular data stream handed to the operator.","The `consume` operator is mostly used for triggering the query side-effect without actually returning\r\nthe results back to the caller.\r\n\r\nThe `consume` operator can be used for estimating the\r\ncost of a query without actually delivering the results back to the client.\r\n(The estimation isn't exact for various reasons; for example, `consume`\r\nis calculated distributively, so `T | consume` won't transmit the table's\r\ndata between the nodes of the cluster.)\r\n\r\n## Syntax\r\n\r\n`consume` [`decodeblocks` `=` *DecodeBlocks*]\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n| *DecodeBlocks* | bool | | If set to `true`, or if the request property `perftrace` is set to `true`, the `consume` operator won't just enumerate the records at its input, but actually force each value in those records to be decompressed and decoded.|","","https://docs.microsoft.com/azure/data-explorer/kusto/query/consumeoperator","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"contains","Filters a record set for data containing a case-insensitive string. `contains` searches for arbitrary sub-strings rather than [terms](datatypes-string-operators.md#what-is-a-term).",`[!INCLUDE [contains-operator-comparison](../../includes/contains-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use [contains_cs](contains-cs-operator.md) - a case-sensitive version of the operator.\r \r If you're looking for a [term](datatypes-string-operators.md#what-is-a-term), use \`has\` for faster results.\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`contains_cs\` \`(\`*string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered. |\r | *col* | string | ✓ | The name of the column to check for *string*. |\r | *string* | string | ✓ | The case-sensitive string by which to filter the data. |\r \r ## Returns\r \r Rows in *T* for which *string* is in *col*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPITk/ryQxM69YQSk1L08JLolkgoKdgqEBUKKgKD8rNbkEok8HWQVQsig1LyW1SKEkMSknFQCgPhGflgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State contains "enn"\r | where event_count > 10\r | project State, event_count\r | render table\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |PENNSYLVANIA|1687|\r |TENNESSEE|1125|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/contains-operator","contains-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"contains_cs","Filters a record set for data containing a case-sensitive string. `contains_cs` searches for arbitrary sub-strings rather than [terms](datatypes-string-operators.md#what-is-a-term).",`[!INCLUDE [contains-operator-comparison](../../includes/contains-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r If you're looking for a [term](datatypes-string-operators.md#what-is-a-term), use \`has_cs\` for faster results.\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`contains_cs\` \`(\`*string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered. |\r | *col* | string | ✓ | The name of the column to check for *string*. |\r | *string* | string | ✓ | The case-sensitive string by which to filter the data. |\r \r ## Returns\r \r Rows in *T* for which *string* is in *col*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPITk/ryQxM684PrlYQckxWAkAynmLoFMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State contains_cs "AS"\r \`\`\`\r \r **Output**\r \r |Count|\r |-----|\r |8|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/contains-cs-operator","contains-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_angle","Convert an angle value from one unit to another.",`## Syntax\r \r \`convert_angle(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | \`value\` | real | ✓ | The value to be converted. |\r | \`from\` | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | \`to\` | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * Arcminute\r * Arcsecond\r * Centiradian\r * Deciradian\r * Degree\r * Gradian\r * Microdegree\r * Microradian\r * Millidegree\r * Milliradian\r * Nanodegree\r * Nanoradian\r * NatoMil\r * Radian\r * Revolution\r * Tilt\r \r ## Returns\r \r Returns the input value converted from one angle unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href=" https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJT8xLz0nVMNQz0lFQd0lNL0pNVQeyHIuSczPzSktS1TUBit/6iDgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_angle(1.2, 'Degree', 'Arcminute')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |72|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-angle-function","convert-angle-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_energy","Convert an energy value from one unit to another.",`## Syntax\r \r \`convert_energy(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * BritishThermalUnit\r * Calorie\r * DecathermEc\r * DecathermImperial\r * DecathermUs\r * ElectronVolt\r * Erg\r * FootPound\r * GigabritishThermalUnit\r * GigaelectronVolt\r * Gigajoule\r * GigawattDay\r * GigawattHour\r * HorsepowerHour\r * Joule\r * KilobritishThermalUnit\r * Kilocalorie\r * KiloelectronVolt\r * Kilojoule\r * KilowattDay\r * KilowattHour\r * MegabritishThermalUnit\r * Megacalorie\r * MegaelectronVolt\r * Megajoule\r * MegawattDay\r * MegawattHour\r * Millijoule\r * TeraelectronVolt\r * TerawattDay\r * TerawattHour\r * ThermEc\r * ThermImperial\r * ThermUs\r * WattDay\r * WattHour\r \r ## Returns\r \r Returns the input value converted from one energy unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href=" https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJT81LLUqv1DDUM9JRUPfKL81JVQcynIoySzKLM0IyUotyE3NC8zJL1DUBDSFj0EEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_energy(1.2, 'Joule', 'BritishThermalUnit')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |0.00113738054437598|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-energy-function","convert-energy-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_force","Convert a force value from one unit to another.",`## Syntax\r \r \`convert_force(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * Decanewton\r * Dyn\r * KilogramForce\r * Kilonewton\r * KiloPond\r * KilopoundForce\r * Meganewton\r * Micronewton\r * Millinewton\r * Newton\r * OunceForce\r * Poundal\r * PoundForce\r * ShortTonForce\r * TonneForce\r \r ## Returns\r \r Returns the input value converted from one force unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJT8svSk7VMNQz0lFQ90stL8nPUweyXFKTE/MgPE0AhSGK6TkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_force(1.2, 'Newton', 'Decanewton')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |0.12|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-force-function","convert-force-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_length","Convert a length value from one unit to another.",`## Syntax\r \r \`convert_length(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * Angstrom\r * AstronomicalUnit\r * Centimeter\r * Chain\r * DataMile\r * Decameter\r * Decimeter\r * DtpPica\r * DtpPoint\r * Fathom\r * Foot\r * Hand\r * Hectometer\r * Inch\r * KilolightYear\r * Kilometer\r * Kiloparsec\r * LightYear\r * MegalightYear\r * Megaparsec\r * Meter\r * Microinch\r * Micrometer\r * Mil\r * Mile\r * Millimeter\r * Nanometer\r * NauticalMile\r * Parsec\r * PrinterPica\r * PrinterPoint\r * Shackle\r * SolarRadius\r * Twip\r * UsSurveyFoot\r * Yard\r \r ## Returns\r \r Returns the input value converted from one length unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJz0nNSy/J0DDUM9JRUPdNLUktUgcy3PLzS9Q1AWLmFfkzAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_length(1.2, 'Meter', 'Foot')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |3.93700787401575|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-length-function","convert-length-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_mass","Convert a mass value from one unit to another.",`## Syntax\r \r \`convert_mass(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * Centigram\r * Decagram\r * Decigram\r * EarthMass\r * Grain\r * Gram\r * Hectogram\r * Kilogram\r * Kilopound\r * Kilotonne\r * LongHundredweight\r * LongTon\r * Megapound\r * Megatonne\r * Microgram\r * Milligram\r * Nanogram\r * Ounce\r * Pound\r * ShortHundredweight\r * ShortTon\r * Slug\r * SolarMass\r * Stone\r * Tonne\r \r ## Returns\r \r Returns the input value converted from one mass unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJz00sLtYw1DPSUVD3zszJTy9KzFUHsgPyS/NS1DUBemVMijUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_mass(1.2, 'Kilogram', 'Pound')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |2.64554714621853|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-mass-function","convert-mass-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_speed","Convert a speed value from one unit to another.",`## Syntax\r \r \`convert_speed(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units).|\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * CentimeterPerHour\r * CentimeterPerMinute\r * CentimeterPerSecond\r * DecimeterPerMinute\r * DecimeterPerSecond\r * FootPerHour\r * FootPerMinute\r * FootPerSecond\r * InchPerHour\r * InchPerMinute\r * InchPerSecond\r * KilometerPerHour\r * KilometerPerMinute\r * KilometerPerSecond\r * Knot\r * MeterPerHour\r * MeterPerMinute\r * MeterPerSecond\r * MicrometerPerMinute\r * MicrometerPerSecond\r * MilePerHour\r * MillimeterPerHour\r * MillimeterPerMinute\r * MillimeterPerSecond\r * NanometerPerMinute\r * NanometerPerSecond\r * UsSurveyFootPerHour\r * UsSurveyFootPerMinute\r * UsSurveyFootPerSecond\r * YardPerHour\r * YardPerMinute\r * YardPerSecond\r \r ## Returns\r \r Returns the input value converted from one speed unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJLy5ITU3RMNQz0lFQ900tSS0KSC0KTgXKpqgDRZxT80oyc6HCHvmlReqaAK/HOJBIAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_speed(1.2, 'MeterPerSecond', 'CentimeterPerHour')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |432000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-speed-function","convert-speed-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_temperature","Convert a temperature value from one unit to another.",`## Syntax\r \r \`convert_temperature(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * DegreeCelsius\r * DegreeDelisle\r * DegreeFahrenheit\r * DegreeNewton\r * DegreeRankine\r * DegreeReaumur\r * DegreeRoemer\r * Kelvin\r * MillidegreeCelsius\r * SolarTemperature\r \r ## Returns\r \r Returns the input value converted from one temperature unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJL0nNLUgtSiwpLUrVMNQz0lFQ907NKcvMUweyXFLTi1JTnVNzijNLi9U1AVVJ6WxCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_temperature(1.2, 'Kelvin', 'DegreeCelsius')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |-271.95|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-temperature-function","convert-temperature-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"convert_volume","Convert a volume value from one unit to another.",`## Syntax\r \r \`convert_volume(\`*value*\`,\`*from*\`,\`*to*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | real | ✓ | The value to be converted. |\r | *from* | string | ✓ | The unit to convert from. For possible values, see [Conversion units](#conversion-units). |\r | *to* | string | ✓ | The unit to convert to. For possible values, see [Conversion units](#conversion-units). |\r \r ### Conversion units\r \r * AcreFoot\r * AuTablespoon\r * BoardFoot\r * Centiliter\r * CubicCentimeter\r * CubicDecimeter\r * CubicFoot\r * CubicHectometer\r * CubicInch\r * CubicKilometer\r * CubicMeter\r * CubicMicrometer\r * CubicMile\r * CubicMillimeter\r * CubicYard\r * Decaliter\r * DecausGallon\r * Deciliter\r * DeciusGallon\r * HectocubicFoot\r * HectocubicMeter\r * Hectoliter\r * HectousGallon\r * ImperialBeerBarrel\r * ImperialGallon\r * ImperialOunce\r * ImperialPint\r * KilocubicFoot\r * KilocubicMeter\r * KiloimperialGallon\r * Kiloliter\r * KilousGallon\r * Liter\r * MegacubicFoot\r * MegaimperialGallon\r * Megaliter\r * MegausGallon\r * MetricCup\r * MetricTeaspoon\r * Microliter\r * Milliliter\r * OilBarrel\r * UkTablespoon\r * UsBeerBarrel\r * UsCustomaryCup\r * UsGallon\r * UsLegalCup\r * UsOunce\r * UsPint\r * UsQuart\r * UsTablespoon\r * UsTeaspoon\r \r ## Returns\r \r Returns the input value converted from one volume unit to another. Invalid units return \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVUjOzytLLSqJL8vPKc1N1TDUM9JRUHcuTcpM9k0tSS1SB/Ick4tS3fLzS9Q1Abo7scQ8AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result = convert_volume(1.2, 'CubicMeter', 'AcreFoot')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |0.0009728568|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/convert-volume-function","convert-volume-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"cos","Returns the cosine function value of the specified angle. The angle is specified in radians.",`## Syntax\r \r \`cos(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | real | ✓ | The value in radians for which to calculate the cosine. |\r \r ## Returns\r \r The cosine of *number* of radians.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjOL9Yw1AQAT2Uc+QwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print cos(1)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |0.54030230586813977|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/cosfunction","cosfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"cosmosdb_sql_request","The `cosmosdb_sql_request` plugin sends a SQL query to an Azure Cosmos DB SQL network endpoint and returns the results of the query. This plugin is primarily designed for querying small datasets, for example, enriching data with reference data stored in [Azure Cosmos DB](https://docs.microsoft.com/azure/cosmos-db/). The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",'## Syntax\r\n\r\n`evaluate` `cosmosdb_sql_request` `(` *ConnectionString* `,` *SqlQuery* [`,` *SqlParameters* [`,` *Options*]] `)` [`:` *OutputSchema*]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|---|---|---|---|\r\n| *ConnectionString* | string | ✓ | The connection string that points to the Azure Cosmos DB collection to query. It must include *AccountEndpoint*, *Database*, and *Collection*. It may include *AccountKey* if a master key is used for authentication. For more information, see [Authentication and authorization](#authentication-and-authorization).</br> **Example:** `\'AccountEndpoint=https://cosmosdbacc.documents.azure.com/ ;Database=MyDatabase;Collection=MyCollection;AccountKey=\' h\'R8PM...;\'` |\r\n| *SqlQuery*| string | ✓ | The query to execute. |\r\n| *SqlParameters* | dynamic | | The property bag object to pass as parameters along with the query. Parameter names must begin with `@`. |\r\n| *OutputSchema* | | | The names and types of the expected columns of the `cosmosdb_sql_request` plugin output. Use the following syntax: `(` *ColumnName* `:` *ColumnType* [`,` ...] `)`. Specifying this parameter enables multiple query optimizations. |\r\n| *Options* | dynamic | | A property bag object of advanced settings. If an `AccountKey` isn\'t provided in the *ConnectionString*, then the `armResourceId` field of this parameter is required. For more information, see [Supported options](#supported-options). |\r\n\r\n### Supported options\r\n\r\nThe following table describes the supported fields of the *Options* parameter.\r\n\r\n|Name|Type|Description|\r\n|--|--|--|\r\n| `armResourceId` | string | The Azure Resource Manager resource ID of the Cosmos DB database. If an account key isn\'t provided in the connection string argument, this field is required. In such a case, the `armResourceId` is used to authenticate to Cosmos DB.</br>**Example:** `/subscriptions/a0cd6542-7eaf-43d2-bbdd-b678a869aad1/resourceGroups/ cosmoddbresourcegrouput/providers/Microsoft.DocumentDb/databaseAccounts/cosmosdbacc` |\r\n| `token` | string | An Azure AD access token of a principal with access to the Cosmos DB database. This token is used together with the `armResourceId` to authenticate with the Azure Resource Manager. If unspecified, the token of the principal that made the query is used.|\r\n| `preferredLocations` | string | The region from which to query the data. </br>**Example:** `[\'East US\']` |\r\n\r\n## Authentication and authorization\r\n\r\nTo authorize to an Azure Cosmos DB SQL network endpoint, you need to specify the authorization information. The following table provides the supported authentication methods and the description for how to use that method.\r\n\r\n|Authentication method|Description|\r\n|--|--|\r\n|Azure Resource Manager resource ID (Recommended)|For secure authentication, we recommend specifying the `armResourceId` and optionally the `token` the [options](#supported-options). The `armResourceId` identifies the Cosmos DB database account, and the `token` should be a valid Azure AD bearer token for a principal with access permissions to the Cosmos DB database. If no `token` is provided, the Azure AD token of the requesting principal will be used for authentication.|\r\n|Account key|You can add the account key directly to the *ConnectionString* argument. However, this approach is less secure as it involves including the secret in the query text, and is less resilient to future changes in the account key. To enhance security, hide the secret as an [obfuscated string literal](scalar-data-types/string.md#obfuscated-string-literals).|\r\n\r\n## Set callout policy\r\n\r\nThe plugin makes callouts to the Azure Cosmos DB instance. Make sure that the cluster\'s [callout policy](../management/calloutpolicy.md) enables calls of type `cosmosdb` to the target *CosmosDbUri*.\r\n\r\nThe following example shows how to define the callout policy for Azure Cosmos DB. It\'s recommended to restrict it to specific endpoints (`my_endpoint1`, `my_endpoint2`).\r\n\r\n```\r\n[\r\n {\r\n "CalloutType": "CosmosDB",\r\n "CalloutUriRegex": "my_endpoint1\\\\.documents\\\\.azure\\\\.com",\r\n "CanCall": true\r\n },\r\n {\r\n "CalloutType": "CosmosDB",\r\n "CalloutUriRegex": "my_endpoint2\\\\.documents\\\\.azure\\\\.com",\r\n "CanCall": true\r\n }\r\n]\r\n```\r\n\r\nThe following example shows an alter callout policy command for `cosmosdb` *CalloutType*\r\n\r\n```\r\n.alter cluster policy callout @\'[{"CalloutType": "cosmosdb", "CalloutUriRegex": "\\\\.documents\\\\.azure\\\\.com", "CanCall": true}]\'\r\n```',`### Query Azure Cosmos DB with a query-defined output schema\r \r The following example uses the *cosmosdb_sql_request* plugin to send a SQL query while selecting only specific columns.\r This query uses explicit schema definitions that allow various optimizations before the actual query is run against Cosmos DB.\r \r \`\`\`\r evaluate cosmosdb_sql_request(\r 'AccountEndpoint=https://cosmosdbacc.documents.azure.com/;Database=MyDatabase;Collection=MyCollection;AccountKey=' h'R8PM...;',\r 'SELECT c.Id, c.Name from c') : (Id:long, Name:string) \r \`\`\`\r \r ### Query Azure Cosmos DB\r \r The following example uses the *cosmosdb_sql_request* plugin to send a SQL query to fetch data from Azure Cosmos DB using its Azure Cosmos DB for NoSQL.\r \r \`\`\`\r evaluate cosmosdb_sql_request(\r 'AccountEndpoint=https://cosmosdbacc.documents.azure.com/;Database=MyDatabase;Collection=MyCollection;AccountKey=' h'R8PM...;',\r 'SELECT * from c') // OutputSchema is unknown, so it is not specified. This may harm the performance of the query.\r \`\`\`\r \r ### Query Azure Cosmos DB with parameters\r \r The following example uses SQL query parameters and queries the data from an alternate region. For more information, see [\`preferredLocations\`](https://docs.microsoft.com/azure/cosmos-db/tutorial-global-distribution-sql-api?tabs=dotnetv2%2Capi-async#preferred-locations).\r \r \`\`\`\r evaluate cosmosdb_sql_request(\r 'AccountEndpoint=https://cosmosdbacc.documents.azure.com/;Database=MyDatabase;Collection=MyCollection;AccountKey=' h'R8PM...;',\r "SELECT c.id, c.lastName, @param0 as Column0 FROM c WHERE c.dob >= '1970-01-01T00:00:00Z'",\r dynamic({'@param0': datetime(2019-04-16 16:47:26.7423305)}),\r dynamic({'preferredLocations': ['East US']})) : (Id:long, Name:string, Column0: datetime) \r | where lastName == 'Smith'\r \`\`\`\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # cosmosdb_sql_request plugin - Internal\r \r The \`cosmosdb_sql_request\` plugin sends an SQL query to a Cosmos DB SQL network endpoint.\r \r - \`evaluate\` \`cosmosdb_sql_request\` \`(\` *ConnectionString* \`,\` *SqlQuery* [\`,\` *SqlParameters* [\`,\` *Options*]] \`)\`\r - \`evaluate\` \`cosmosdb_sql_request\` \`(\` *CosmosDbUri* \`,\` *authorization_key* \`,\` *database_name* \`,\` *collection_name* \`,\` *SqlQuery* \`)\`\r \r \r > [!NOTE]\r > It's recommended to use the syntax with \`ConnectionString\`. The other syntax is kept for backward-compatibility purposes.\r \r **Arguments**\r \r * *ConnectionString*: A \`string\` literal indicating the connection string that\r points to the Cosmos DB collection to query. It must include \`AccountEndpoint\`, \`Database\`, \`Collection\`\r and may include \`AccountKey\` if an API key is used for authentication. \r \r Example:\r \`'AccountEndpoint=https://cosmosdbut.documents.azure.com:443/;Database=MyDatabase;Collection=MyCollection;AccountKey=' h'R8PM...;'\`,\r where the key is an [obfuscated string literal](./scalar-data-types/string.md#obfuscated-string-literals)\r to prevent secret leakage.\r \r * *SqlQuery*: A \`string\` literal indicating the query to execute.\r \r * *SqlParameters*: A constant value of type \`dynamic\` that holds key-value pairs\r to pass as parameters along with the query. Parameter names must begin with \`@\`. Optional.\r \r * *Options*: A constant value of type \`dynamic\` that holds more advanced settings\r as key-value pairs. Supported settings include \`armResourceId\` (Example: \`/subscriptions/a0cd6542-7eaf-43d2-bbdd-b678a869aad1/resourceGroups/cosmoddbresourcegrouput/providers/Microsoft.DocumentDb/databaseAccounts/cosmosdbut\`)\r to retrieve the API key from ARM, \`token\` to provide the AAD access token used to authenticate with ARM, and \`preferredLocations\` (Example: \`['East US']\`)\r to control which region the data is queried from. Optional.\r \r * *CosmosDbUri*: A \`string\` literal indicating the URI of the Cosmos DB endpoint\r to connect to.\r \r * *authorization_key*: A \`string\` literal specifying CosmosDB resource or master token.\r It is **strongly recommended** that this argument use the\r [obfuscated string literals](./scalar-data-types/string.md#obfuscated-string-literals)\r to prevent secret leakage.\r \r * *database_name*: A \`string\` literal specifying CosmosDB Database name.\r \r * *collection_name*: A \`string\` literal specifying CosmosDB collection name.\r \r \r **Restrictions**\r \r The plugin makes callouts to Cosmos DB and so make sure that the\r cluster's [Callout policy](../management/calloutpolicy.md) enables calls of type\r \`cosmosdb\` to the target *CosmosDbUri*.\r \r Below is an example of defining call-out policy for CosmosDB. It's recommended to restrict it to specific endpoints (\`my_endpoint1\`, \`my_endpoint2\`).\r \r \`\`\`json\r [\r {\r "CalloutType": "CosmosDB",\r "CalloutUriRegex": "my_endpoint1.documents.azure.com",\r "CanCall": true\r },\r {\r "CalloutType": "CosmosDB",\r "CalloutUriRegex": "my_endpoint2.documents.azure.com",\r "CanCall": true\r }\r ]\r \`\`\`\r \r **Examples**\r \r Using SQL query to fetch all rows from Cosmos DB:\r \r \`\`\`\r evaluate cosmosdb_sql_request(\r 'AccountEndpoint=https://cosmosdbut.documents.azure.com:443/;Database=MyDatabase;Collection=MyCollection;AccountKey=' h'R8PM...;',\r 'SELECT * from c')\r \`\`\`\r \r Using SQL query parameters and querying the data from an alternate region:\r \r \`\`\`\r evaluate cosmosdb_sql_request(\r 'AccountEndpoint=https://cosmosdbut.documents.azure.com:443/;Database=MyDatabase;Collection=MyCollection;AccountKey=' h'R8PM...;',\r "SELECT c.id, c.lastName, @param0 as Column0 FROM c WHERE c.dob >= '1970-01-01T00:00:00Z'",\r dynamic({'@param0': datetime(2019-04-16 16:47:26.7423305)}),\r dynamic({'preferredLocations': ['East US']}))\r | where lastName == 'Smith'\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/cosmosdb-plugin","cosmosdb-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"cot","Calculates the trigonometric cotangent of the specified angle, in radians.",`## Syntax\r \r \`cot(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | real | ✓ | The value for which to calculate the cotangent. |\r \r ## Returns\r \r The cotangent function value for *number*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjOL9Ew1AQA9l3LZAwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print cot(1)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |0.64209261593433065|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/cotfunction","cotfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"count","Counts the number of records per summarization group, or total if summarization is done without grouping.",`Use the [countif](countif-aggfunction.md) aggregation function to count only records for which a predicate returns \`true\`.\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`count()\`\r \r ## Returns\r \r Returns a count of the records per summarization group (or in total, if summarization is done without grouping).`,`This example returns a count of events in states starting with letter \`W\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLElVKC5JLCopLs8syVBQClcCShaX5uYmFmVWpSo455fmldgmg0gNTYWkSogOAJStyvpLAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith "W"\r | summarize Count=count() by State\r \`\`\`\r \r **Output**\r \r |State|Count|\r |---|---|\r |WEST VIRGINIA|757|\r |WYOMING|396|\r |WASHINGTON|261|\r |WISCONSIN|1850|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/count-aggfunction","count-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"count","Returns the number of records in the input record set.",`## Syntax\r \r *T* \`|\` \`count\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be counted. |\r \r ## Returns\r \r This function returns a table with a single record and column of type\r \`long\`. The value of the only cell is the number of records in *T*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRSM4vzSsBALU2eHsTAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | count\r \`\`\`\r \r ## See also\r \r For information about the count() aggregation function, see [count() (aggregation function)](count-aggfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/countoperator","countoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"count_distinct","Counts unique values specified by the scalar expression per summary group, or the total number of unique values if the summary group is omitted.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r If you only need an estimation of unique values count, we recommend using the less resource-consuming [\`dcount\`](dcount-aggfunction.md) aggregation function.\r \r To count only records for which a predicate returns \`true\`, use the [count_distinctif](count-distinctif-aggfunction.md) aggregation function.\r \r > [!NOTE]\r > * This function is limited to 100M unique values. An attempt to apply the function on an expression returning too many values will produce a runtime error (HRESULT: 0x80DA0012).\r > * Function performance can be degraded when operating on multiple data sources from different clusters.\r \r ## Syntax\r \r \`count_distinct\` \`(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr*| scalar | ✓ | The expression whose unique values are to be counted. |\r \r ## Returns\r \r Long integer value indicating the number of unique values of *expr* per summary group.`,`This example shows how many types of storm events happened in each state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVQjNyywsTYVI2Cbnl+aVxKdkFpdk5iWXaIBFQyoLUjUVkioVgksSS1KBekvyCxRMQQLIWgE/wdUFXwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize UniqueEvents=count_distinct(EventType) by State\r | top 5 by UniqueEvents\r \`\`\`\r \r **Output**\r \r | State | UniqueEvents |\r | -------------------- | ------------- |\r | TEXAS | 27 |\r | CALIFORNIA | 26 |\r | PENNSYLVANIA | 25 |\r | GEORGIA | 24 |\r | NORTH CAROLINA | 23 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/count-distinct-aggfunction","count-distinct-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"count_distinctif","Conditionally counts unique values specified by the scalar expression per summary group, or the total number of unique values if the summary group is omitted. Only records for which *predicate* evaluates to `true` are counted.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r If you only need an estimation of unique values count, we recommend using the less resource-consuming [dcountif](dcountif-aggfunction.md) aggregation function.\r \r > [!NOTE]\r > * This function is limited to 100M unique values. An attempt to apply the function on an expression returning too many values will produce a runtime error (HRESULT: 0x80DA0012).\r > * Function performance can be degraded when operating on multiple data sources from different clusters.\r \r ## Syntax\r \r \`count_distinctif\` \`(\`*expr*\`,\` *predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr*| scalar | ✓ | The expression whose unique values are to be counted. |\r | *predicate* | string | ✓ | The expression used to filter records to be aggregated. |\r \r ## Returns\r \r Integer value indicating the number of unique values of *expr* per summary group, for all records for which the *predicate* evaluates to \`true\`.`,`This example shows how many types of death-causing storm events happened in each state. Only storm events with a nonzero count of deaths will be counted.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22NsQ6CQBAFe79iS4gWNJZQoYk1Wpv1WMMm3h3cvdNA/HgRSi3fzCSvgQ/28BSHuHlTTNZy0Eno4nRIcmTwY7Wl8cnh2mqEOgO9Zws/j73ssloYXaw1iAFtaZ0n1y4gr4qcbiM1YMh88uok/DmgiorZwve0/+Y/wQetTCWoqwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize UniqueFatalEvents=count_distinctif(EventType,(DeathsDirect + DeathsIndirect)>0) by State\r | where UniqueFatalEvents > 0\r | top 5 by UniqueFatalEvents\r \`\`\`\r \r **Output**\r \r | State | UniqueFatalEvents |\r | --------------- | ----------------- |\r | TEXAS | 12 |\r | CALIFORNIA | 12 |\r | OKLAHOMA | 10 |\r | NEW YORK | 9 |\r | KANSAS | 9 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/count-distinctif-aggfunction","count-distinctif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"countif","Counts the rows in which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`countif\` \`(\`*predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *predicate*| string | ✓ | The expression used for aggregation calculation. The value can be any scalar expression with a return type of bool.\r \r ## Returns\r \r Returns a count of rows in which *predicate* evaluates to \`true\`.`,`### Count storms by state\r \r This example shows the number of storms with damage to crops by state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVQjJL0nMcc4vzSuxTQaRGpo6YKHwzJIMl8TcxPRUiHhmmgaE61yUX1CsYGegqZBUqRBckliSCgAAARcgWwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize TotalCount=count(),TotalWithDamage=countif(DamageCrops >0) by State\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | TotalCount | TotalWithDamage |\r | -------------------- | ---------- | --------------- |\r | TEXAS | 4701 | 72 |\r | KANSAS | 3166 | 70 |\r | IOWA | 2337 | 359 |\r | ILLINOIS | 2022 | 35 |\r | MISSOURI | 2016 | 78 |\r | GEORGIA | 1983 | 17 |\r | MINNESOTA | 1881 | 37 |\r | WISCONSIN | 1850 | 75 |\r | NEBRASKA | 1766 | 201 |\r | NEW YORK | 1750 | 1 |\r | ... | ... | ... |\r \r ### Count based on string length\r \r This example shows the number of names with more than 4 letters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyWNMQvCMBBG9/yKo1MDWRRFregqOIl0EympXtNAcgdpMij+eI+Wb3pv+F7ADC2c4G2zrA9Yk43YTDl5ckb0p+Oh633KYxOYnFYPBQDVlUeqDBzMTDdbgtBqv+AFOTkUsd4u4i5nLLxTz6Nq1Q+mEqNN/ovw4kLZD7UUA9Jc13CGjf4DYumr9poAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(name:string, day_of_birth:long)\r [\r "John", 9,\r "Paul", 18,\r "George", 25,\r "Ringo", 7\r ];\r T\r | summarize countif(strlen(name) > 4)\r \`\`\`\r \r **Output**\r \r |countif_|\r |----|\r |2|\r \r ## See also\r \r [count()](count-aggfunction.md) function, which counts rows without predicate expression.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/countif-aggfunction","countif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"countof","Counts occurrences of a substring in a string. Plain string matches may overlap; regex matches don't.","## Syntax\r\n\r\n`countof(`*source*`,` *search* [`,` *kind*]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *source* | string | ✓ | The value to search. |\r\n| *search* | string | ✓ | The value or [regular expression](./re2.md) to match inside *source*. |\r\n| *kind* | string | | The value `normal` or `regex`. The default is `normal`. |\r\n\r\n## Returns\r\n\r\nThe number of times that the *search* value can be matched in the *source* string. Plain string matches may overlap; regex matches don't.",'|Function call|Result|\r\n|---|---\r\n|`countof("aaa", "a")`| 3\r\n|`countof("aaaa", "aa")`| 3 (not 2!)\r\n|`countof("ababa", "ab", "normal")`| 2\r\n|`countof("ababa", "aba")`| 2\r\n|`countof("ababa", "aba", "regex")`| 1\r\n|`countof("abcabc", "a.c", "regex")`| 2',"https://docs.microsoft.com/azure/data-explorer/kusto/query/countoffunction","countoffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"current_cluster_endpoint","Returns the network endpoint (DNS name) of the current cluster being queried.",`## Syntax\r \r \`current_cluster_endpoint()\`\r \r ## Returns\r \r The network endpoint (DNS name) of the current cluster being queried,\r as a value of type \`string\`.`,'```\r\nprint strcat("This query executed on: ", current_cluster_endpoint())\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/current-cluster-endpoint-function","current-cluster-endpoint-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"current_database",`Returns the name of the database in scope (database that all query\r entities are resolved against if no other database is specified).`,`## Syntax\r \r \`current_database()\`\r \r ## Returns\r \r The name of the database in scope as a value of type \`string\`.`,'```\r\nprint strcat("Database in scope: ", current_database())\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/current-database-function","current-database-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"current_principal","Returns the current principal name that runs the query.","## Syntax\r\n\r\n`current_principal()`\r\n\r\n## Returns\r\n\r\nThe current principal fully qualified name (FQN) as a `string`. \r\nThe string format is: \r\n*PrinciplaType*`=`*PrincipalId*`;`*TenantId*",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgrzLNNLi0qSs0riS8AiiRnFiTmaGgCAGK4N8YdAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print fqn=current_principal()\r \`\`\`\r \r **Example output**\r \r |fqn|\r |---|\r |aaduser=346e950e-4a62-42bf-96f5-4cf4eac3f11e;72f988bf-86f1-41af-91ab-2d7cd011db47|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/current-principalfunction","current-principalfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"current_principal_details","Returns details of the principal running the query.",`## Syntax\r \r \`current_principal_details()\`\r \r ## Returns\r \r The details of the current principal as a \`dynamic\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUixTS4tKkrNK4kvAPKTMwsSc+JTUksSM3OKNTQBdsrI5yMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print d=current_principal_details()\r \`\`\`\r \r **Example output**\r \r |d|\r |---|\r |{<br> "UserPrincipalName": "user@fabrikam.com",<br> "IdentityProvider": "https://sts.windows.net",<br> "Authority": "72f988bf-86f1-41af-91ab-2d7cd011db47",<br> "Mfa": "True",<br> "Type": "AadUser",<br> "DisplayName": "James Smith (upn: user@fabrikam.com)",<br> "ObjectId": "346e950e-4a62-42bf-96f5-4cf4eac3f11e",<br> "FQN": null,<br> "Notes": null<br>}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/current-principal-detailsfunction","current-principal-detailsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"current_principal_is_member_of","Checks group membership or principal identity of the current principal running the query.",`## Syntax\r \r \`current_principal_is_member_of(\`*group*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *group* | dynamic | ✓ | An array of string literals in which each literal represents an Azure Active Directory (Azure AD) principal. See [examples for Azure AD principals](../management/access-control/referencing-security-principals.md).|\r \r ## Returns\r \r The function returns \`true\` if the current principal running the query is successfully matched for at least one input argument. If not, the function returns \`false\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12MywqDMBQF9/0Kd7bQFPMgMZRA/yTcvEqo0XA1/1/rwkXPYhaHYSrmeeswrm3ajG+Icd5s3U+fK0w2r7bE4iLaJV0v3b4eILQ1ovmBvhI4zB8oD7+U/t6dyhuXVs3Bf+l0oFYjJQTKOSMctCACpCY6ASNUKc7SoLmU4qlY0uPoEhllokRQSERTcIQF5cNAaXBC9Uf29gUBrFgb0AAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=current_principal_is_member_of(\r 'aaduser=user1@fabrikam.com', \r 'aadgroup=group1@fabrikam.com',\r 'aadapp=66ad1332-3a94-4a69-9fa2-17732f093664;72f988bf-86f1-41af-91ab-2d7cd011db47'\r )\r \`\`\`\r \r **Output**\r \r | result |\r |--------|\r | false |\r \r Using dynamic array instead of multiple arguments:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12MywrCMBRE935Fd23BSPMgaZCA/yESbl4SbNqQNgv/3tqFC2dxYIbD5BLnrSl+rdOmbC3Fz5vO+2hjhknHVSefjC96Cd2p2ePeM6Rou/vRWgBXV1/UF/gWwJT4gnSxS2rPzU95lqVmdfBf+jmQs+IcHKaUIAqSIQZcIhmAICwEJWGQlHN2FSTIcTQBjTxgxDAEJDEYRJywbsDYGSba4/bR9x8D/i004AAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=current_principal_is_member_of(\r dynamic([\r 'aaduser=user1@fabrikam.com', \r 'aadgroup=group1@fabrikam.com',\r 'aadapp=66ad1332-3a94-4a69-9fa2-17732f093664;72f988bf-86f1-41af-91ab-2d7cd011db47'\r ]))\r \`\`\`\r \r **Output**\r \r | result |\r |--------|\r | false |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/current-principal-ismemberoffunction","current-principal-ismemberoffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"cursor_after","A predicate run over the records of a table to compare their ingestion time against a database cursor.",`> [!NOTE]\r > This function can only be invoked on records of a table that has the\r [IngestionTime policy](../management/ingestiontimepolicy.md) enabled.\r \r ## Syntax\r \r \`cursor_after(\`*RHS*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *RHS* | string | ✓ | Either an empty string literal or a valid database cursor value.|\r \r ## Returns\r \r A scalar value of type \`bool\` that indicates whether the record was ingested\r after the database cursor *RHS* (\`true\`) or not (\`false\`).\r \r ## See also\r \r See [database cursors](../management/databasecursor.md) for additional\r details on database cursors.`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/cursorafterfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"cursor_before_or_at","A predicate function run over the records of a table to compare their ingestion time against the database cursor time.",`> [!NOTE]\r > This function can only be invoked on records of a table that has the\r [IngestionTime policy](../management/ingestiontimepolicy.md) enabled.\r \r ## Syntax\r \r \`cursor_before_or_at(\`*RHS*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *RHS* | string | ✓ | Either an empty string literal or a valid database cursor value.|\r \r ## Returns\r \r A scalar value of type \`bool\` that indicates whether the record was ingested\r before or at the database cursor *RHS* (\`true\`) or not (\`false\`).\r \r ## See also\r \r See [database cursors](../management/databasecursor.md) for additional\r details on database cursors.`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/cursorbeforeoratfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"database","Changes the reference of the query to a specific database within the cluster scope.",`> [!NOTE]\r >\r > * For more information, see [cross-database and cross-cluster queries](cross-cluster-or-database-queries.md).\r > * For accessing remote cluster and remote database, see [\`cluster()\`](clusterfunction.md) scope function.\r \r ## Syntax\r \r \`database(\`*databaseName*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *databaseName* | string | The name of the database to reference. The *databaseName* can be either the \`DatabaseName\` or \`PrettyName\`. The argument must be a constant value and can't come from a subquery evaluation.|`,`### Use database() to access table of other database\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLElMSixO1VAPTswtyEktVtfUCy7JL8p1LUvNKylWqFFIzi/NKwEAS+mhvycAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r database('Samples').StormEvents | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |59066|\r \r ### Use database() inside let statements\r \r The query above can be rewritten as a query-defined function (let statement) that\r receives a parameter \`dbName\` - which is passed into the database() function.\r \r \`\`\`\r let foo = (dbName:string)\r {\r database(dbName).StormEvents | count\r };\r foo('help')\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |59066|\r \r ### Use database() inside stored functions\r \r The same query as above can be rewritten to be used in a function that\r receives a parameter \`dbName\` - which is passed into the database() function.\r \r \`\`\`\r .create function foo(dbName:string)\r {\r database(dbName).StormEvents | count\r };\r \`\`\`\r \r > [!NOTE]\r > Such functions can be used only locally and not in the cross-cluster query.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/databasefunction","databasefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"datatable","Returns a table whose schema and values are defined in the query itself.",`> [!NOTE]\r > This operator doesn't have a pipeline input.\r \r ## Syntax\r \r \`datatable(\` *ColumnName* \`:\` *ColumnType* [\`,\` ...] \`[\` *ScalarValue* [\`,\` *ScalarValue* ...] \`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ColumnName*:*ColumnType* | string | ✓ | The name of column and type of data in that column that define the schema of the table.|\r | *ScalarValue* | scalar | ✓ | The value to insert into the table. The number of values must be an integer multiple of the columns in the table. The *n*'th value must have a type that corresponds to column *n* % *NumColumns*. |\r \r ## Returns\r \r This operator returns a data table of the given schema and data.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3XRS4vCMBAA4Lu/YsiphbiY1upa0IPYo8velz2kZtRgTCCNL1z/uxNZd6HYJAQyj++QUTLQrg0mCxmwVHQFvUcO1RFtKJvgtd1wWDqPVCBLdbFyr1cpfPWA1rM+ERMx6A9GfSFSDmzuvGUcfouTK9vhRbCSHaU5oKBMDGTPQMZuKW9zOXGCTuQqG9A3UK2cQfiQ1ISdet7Wh6/0Iv/XPw+10c0WFay1bwLUzu06+aLNj17xk3H8i6yI/EKj6uTGbe79wX33fuC0RY9AAzBok8c0UpjBkDJ4DmgVxDaY/o3mLb7vp72pd88BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(Date:datetime, Event:string, MoreData:dynamic) [\r datetime(1910-06-11), "Born", dynamic({"key1":"value1", "key2":"value2"}),\r datetime(1930-01-01), "Enters Ecole Navale", dynamic({"key1":"value3", "key2":"value4"}),\r datetime(1953-01-01), "Published first book", dynamic({"key1":"value5", "key2":"value6"}),\r datetime(1997-06-25), "Died", dynamic({"key1":"value7", "key2":"value8"}),\r ]\r | where strlen(Event) > 4\r | extend key2 = MoreData.key2\r \`\`\`\r \r **Output**\r \r |Date|Event|MoreData|key2|\r |---|---|---|---|\r |1930-01-01 00:00:00.0000000|Enters Ecole Navale|{<br> "key1": "value3",<br> "key2": "value4"<br>}|value4|\r |1953-01-01 00:00:00.0000000|Published first book|{<br> "key1": "value5",<br> "key2": "value6"<br>}|value6|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/datatableoperator","datatableoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"datetime_add","Calculates a new [datetime](./scalar-data-types/datetime.md) from a specified period multiplied by a specified amount, added to, or subtracted from a specified [datetime](./scalar-data-types/datetime.md).",`## Syntax\r \r \`datetime_add(\`*period*\`,\`*amount*\`,\`*datetime*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *period* | string | ✓ | The length of time by which to increment.|\r | *amount* | int | ✓ | The number of *periods* to add to or subtract from *datetime*. |\r | *datetime* | datetime | ✓ | The date to increment by the result of the *period* x *amount* calculation. |\r \r Possible values of *period*:\r \r * Year\r * Quarter\r * Month\r * Week\r * Day\r * Hour\r * Minute\r * Second\r * Millisecond\r * Microsecond\r * Nanosecond\r \r ## Returns\r \r A [datetime](./scalar-data-types/datetime.md) after a certain time/date interval has been added.`,`### Period\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4XPuw6DMAyF4b1PkQ2QMjRdmPosyMKWiFASmjqqeHsIl8mSu/5H33CW7CMbsxJk8zYITOwDDYDYNjU21tkAMw331L6ert+j6zr7+BTITFJeXcchRZ4EPaoOf0SzcDXqDGEVam86mlKR92r8883HwiTPHVmnXxpTREHPrNENq0hHU8sBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print year = datetime_add('year',1,make_datetime(2017,1,1)),\r quarter = datetime_add('quarter',1,make_datetime(2017,1,1)),\r month = datetime_add('month',1,make_datetime(2017,1,1)),\r week = datetime_add('week',1,make_datetime(2017,1,1)),\r day = datetime_add('day',1,make_datetime(2017,1,1)),\r hour = datetime_add('hour',1,make_datetime(2017,1,1)),\r minute = datetime_add('minute',1,make_datetime(2017,1,1)),\r second = datetime_add('second',1,make_datetime(2017,1,1))\r \`\`\`\r \r **Output**\r \r |year|quarter|month|week|day|hour|minute|second|\r |---|---|---|---|---|---|---|---|\r |2018-01-01 00:00:00.0000000|2017-04-01 00:00:00.0000000|2017-02-01 00:00:00.0000000|2017-01-08 00:00:00.0000000|2017-01-02 00:00:00.0000000|2017-01-01 01:00:00.0000000|2017-01-01 00:01:00.0000000|2017-01-01 00:00:01.0000000|\r \r ### Amount\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUVCoTE0sUrBVSEksSS3JzE2NT0xJ0VAHCarr6Jrq5CZmp8bD5DSMDAzNdQx1DDU1dbgKSxOLSlIxtULF1XUMjfDozs3PK8nA0AsWBdpriM/i8tTUbAydIEGglQYGODUCAFYx9CDvAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print year = datetime_add('year',-5,make_datetime(2017,1,1)),\r quarter = datetime_add('quarter',12,make_datetime(2017,1,1)),\r month = datetime_add('month',-15,make_datetime(2017,1,1)),\r week = datetime_add('week',100,make_datetime(2017,1,1))\r \`\`\`\r \r **Output**\r \r |year|quarter|month|week|\r |---|---|---|---|\r |2012-01-01T00:00:00Z|2020-01-01T00:00:00Z|2015-10-01T00:00:00Z|2018-12-02T00:00:00Z|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/datetime-addfunction","datetime-addfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"datetime_diff","Calculates the number of the specified periods between two [datetime](./scalar-data-types/datetime.md) values.",`## Syntax\r \r \`datetime_diff(\`*period*\`,\`*datetime1*\`,\`*datetime2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *period* | string | ✓ | The measurement of time used to calculate the return value. See [possible values](#possible-values-of-period).|\r | *datetime1* | datetime | ✓ | The left-hand side of the subtraction equation.|\r | *datetime2* | datetime | ✓ | The right-hand side of the subtraction equation. |\r \r ### Possible values of *period*\r \r These values are case insensitive:\r \r * Year\r * Quarter\r * Month\r * Week\r * Day\r * Hour\r * Minute\r * Second\r * Millisecond\r * Microsecond\r * Nanosecond\r \r ## Returns\r \r An integer that represents the amount of *periods* in the result of subtraction (*datetime1* - *datetime2*).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52S3YrDIBCF7/sU3rVCDTORkCawz7JIY6lsY7pZw9K3X3+6bagmQsWrc8bvDONcR6XN5ibFSD5IJ4w0qpefnTqddlunbvf/4q4ErBmgvXQuAjAsGUdK95vvSYxGJlB3I6LVrzQncsbB0fpBm3PM8nK+L6x8X570K+VXDHLqKweBlQ0BaAGivhpLIyVvq8YxO3GLkVZ8n3gepsTonJpgciSACaazZsxe6cnIxBC9nuL6x1C18cc8XbjTf+Rx0F1MD/oyHVqEAlea9+MqGgh7oC4XtRQ1M9fyLM2uaj7SVjxSj+OwnPowM6kBuDrLUHWwhS5XC70Y+/QyqRBOJjUU1ZT+AYwetRIGBAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print\r year = datetime_diff('year',datetime(2017-01-01),datetime(2000-12-31)),\r quarter = datetime_diff('quarter',datetime(2017-07-01),datetime(2017-03-30)),\r month = datetime_diff('month',datetime(2017-01-01),datetime(2015-12-30)),\r week = datetime_diff('week',datetime(2017-10-29 00:00),datetime(2017-09-30 23:59)),\r day = datetime_diff('day',datetime(2017-10-29 00:00),datetime(2017-09-30 23:59)),\r hour = datetime_diff('hour',datetime(2017-10-31 01:00),datetime(2017-10-30 23:59)),\r minute = datetime_diff('minute',datetime(2017-10-30 23:05:01),datetime(2017-10-30 23:00:59)),\r second = datetime_diff('second',datetime(2017-10-30 23:00:10.100),datetime(2017-10-30 23:00:00.900)),\r millisecond = datetime_diff('millisecond',datetime(2017-10-30 23:00:00.200100),datetime(2017-10-30 23:00:00.100900)),\r microsecond = datetime_diff('microsecond',datetime(2017-10-30 23:00:00.1009001),datetime(2017-10-30 23:00:00.1008009)),\r nanosecond = datetime_diff('nanosecond',datetime(2017-10-30 23:00:00.0000000),datetime(2017-10-30 23:00:00.0000007))\r \`\`\`\r \r **Output**\r \r |year|quarter|month|week|day|hour|minute|second|millisecond|microsecond|nanosecond|\r |---|---|---|---|---|---|---|---|---|---|---|\r |17|2|13|5|29|2|5|10|100|100|-700|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/datetime-difffunction","datetime-difffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"datetime_local_to_utc","Converts local datetime to UTC datetime using [a time-zone specification](timezone.md).",`## Syntax\r \r \`datetime_local_to_utc(\`*from*\`,\`*timezone*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *from* | datetime | ✓ | The local datetime to convert.|\r | *timezone* | string | ✓ | The timezone of the desired datetime. The value must be one of the supported [timezones](timezone.md).|\r \r ## Returns\r \r A UTC [datetime](./scalar-data-types/datetime.md) that corresponds the local [datetime](./scalar-data-types/datetime.md) in the specified \`timezone\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42PTQsCIRCG7/6KubmCseJR6BDRPYhOEWI6bYK7hjsLEf34jMBrMS9zmI935gmOalwSdil7l2wgA8ERUhxRAj0NzFTiNAh2avVOK61WSleBVkZpo5WQwI+Hfu98vEbPJTD4Ob8ZsUTv+u2t5iH/t7RbSr5jPVTizM/sBfggnAIs5OvzsG4G9gtE2dZWo/swiTePz2vZ9QAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(local_dt: datetime, tz: string)\r [ datetime(2020-02-02 20:02:20), 'US/Pacific', \r datetime(2020-02-02 20:02:20), 'America/Chicago', \r datetime(2020-02-02 20:02:20), 'Europe/Paris']\r | extend utc_dt = datetime_local_to_utc(local_dt, tz)\r \`\`\`\r \r **Output**\r \r |local_dt|tz|utc_dt|\r |---|---|---|\r |2020-02-02 20:02:20.0000000|Europe/Paris|2020-02-02 19:02:20.0000000|\r |2020-02-02 20:02:20.0000000|America/Chicago|2020-02-03 02:02:20.0000000|\r |2020-02-02 20:02:20.0000000|US/Pacific|2020-02-03 04:02:20.0000000|\r \r > [!NOTE] \r > Normally there is a 1:1 mapping between UTC and local time, however there is a time ambiguity near the DST transition.\r > Translating from local to UTC and then back to local may produce an hour offset between two local datetime values if the clocks were advanced due to DST.\r \r \`\`\`\r range Local from datetime(2022-03-27 01:00:00.0000000) to datetime(2022-03-27 04:00:00.0000000) step 1h\r | extend UTC=datetime_local_to_utc(Local, 'Europe/Brussels')\r | extend BackToLocal=datetime_utc_to_local(UTC, 'Europe/Brussels')\r | extend diff=Local-BackToLocal\r \`\`\`\r \r |Local|UTC|BackToLocal|diff|\r |---|---|---|---|\r |2022-03-27 02:00:00.0000000|2022-03-27 00:00:00.0000000|2022-03-27 01:00:00.0000000|01:00:00|\r |2022-03-27 01:00:00.0000000|2022-03-27 00:00:00.0000000|2022-03-27 01:00:00.0000000|00:00:00|\r |2022-03-27 03:00:00.0000000|2022-03-27 01:00:00.0000000|2022-03-27 03:00:00.0000000|00:00:00|\r |2022-03-27 04:00:00.0000000|2022-03-27 02:00:00.0000000|2022-03-27 04:00:00.0000000|00:00:00|\r \r ## See also\r \r * To convert from UTC to local, see [datetime_utc_to_local()](datetime-utc-to-local-function.md)\r * List of supported [timezones](timezone.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/datetime-local-to-utc-function","datetime-local-to-utc-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"datetime_part","Extracts the requested date part as an integer value.",`> **Deprecated aliases:** datepart()\r \r ## Syntax\r \r \`datetime_part(\`*part*\`,\`*datetime*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *part* | string | ✓ | Measurement of time to extract from *date*. See [possible values](#possible-values-of-part).|\r | *date* | datetime | ✓ | The full date from which to extract *part*. |\r \r ### Possible values of part\r \r * Year\r * Quarter\r * Month\r * week_of_year\r * Day\r * DayOfYear\r * Hour\r * Minute\r * Second\r * Millisecond\r * Microsecond\r * Nanosecond\r \r ## Returns\r \r An integer representing the extracted part.\r \r > [!NOTE]\r > \`week_of_year\` returns an integer which represents the week number. The week number is calculated from the first week of a year, which is the one that includes the first Thursday.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3XPTQqDMBAF4L2nCK4UtCTaVrD0DF13JcGMGKqJTSPF29efRgPG7XvfzDANaMQ0uiNGNWjeQpBgksUExylGmOQ4yXF6yq6Xc5qQ8Ia8TnGhkTcAVdZU0VGlA39K/WhcGEbeux8jcKB/YVwrha73ao6N+QK8HtXTeXPqClkV9m1Ghz0cQ6s/WrdWxtayd7ApXT/gotfgeGHOjfpAKQXbqyXfdjUNP6JWuflSyWO/lsYLKg751i36B5qEtWAcAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r let dt = datetime(2017-10-30 01:02:03.7654321); \r print \r year = datetime_part("year", dt),\r quarter = datetime_part("quarter", dt),\r month = datetime_part("month", dt),\r weekOfYear = datetime_part("week_of_year", dt),\r day = datetime_part("day", dt),\r dayOfYear = datetime_part("dayOfYear", dt),\r hour = datetime_part("hour", dt),\r minute = datetime_part("minute", dt),\r second = datetime_part("second", dt),\r millisecond = datetime_part("millisecond", dt),\r microsecond = datetime_part("microsecond", dt),\r nanosecond = datetime_part("nanosecond", dt)\r \`\`\`\r \r **Output**\r \r |year|quarter|month|weekOfYear|day|dayOfYear|hour|minute|second|millisecond|microsecond|nanosecond|\r |---|---|---|---|---|---|---|---|---|---|---|---|\r |2017|4|10|44|30|303|1|2|3|765|765432|765432100|\r \r > [!NOTE]\r > \`weekofyear\` is an obsolete variant of \`week_of_year\` part. \`weekofyear\` was not ISO 8601 compliant; the first week of a year was defined as the week with the year's first Wednesday in it.\r > \`week_of_year\` is ISO 8601 compliant; the first week of a year is defined as the week with the year's first Thursday in it. [For more information], see [ISO 8601 week dates](https://en.wikipedia.org/wiki/ISO_8601#Week_dates).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/datetime-partfunction","datetime-partfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"datetime_utc_to_local","Converts UTC [datetime](./scalar-data-types/datetime.md) to local datetime using a [time-zone specification](timezone.md).",`## Syntax\r \r \`datetime_utc_to_local(\`*from*\`,\`*timezone*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *from* | datetime | ✓ | The UTC datetime to convert.|\r | *timezone* | string | ✓ | The timezone to convert to. This value must be one of the supported [timezones](timezone.md).|\r \r ## Returns\r \r A local datetime in the *timezone* that corresponds the UTC datetime.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAAysoyswrUUgpsc3LL9fQ5OWqUUitKEnNS1EoSEzOTMtMjk8pUbBVSEksSS3JzE2NLy1Jji/Jj8/JT07M0Ugp0VFQDw3WD4AoVdfUUUhOzEtKLSpKJKjNsbS4pCgxJzNR3xmqRR3Z9pTMtDSgAUiO0EU2GwCn09zktgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print dt=now()\r | extend pacific_dt = datetime_utc_to_local(dt, 'US/Pacific'), canberra_dt = datetime_utc_to_local(dt, 'Australia/Canberra')\r | extend diff = pacific_dt - canberra_dt\r \`\`\`\r \r **Output**\r \r |dt|pacific_dt|canberra_dt|diff|\r |---|---|---|---|\r |2022-07-11 22:18:48.4678620|2022-07-11 15:18:48.4678620|2022-07-12 08:18:48.4678620|-17:00:00|\r \r ## See also\r \r * To convert a datetime from local to UTC, see [datetime_local_to_utc()](datetime-local-to-utc-function.md).\r * [Timezones](timezone.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/datetime-utc-to-local-function","datetime-utc-to-local-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dayofmonth","Returns an integer representing the day number of the given datetime.",`## Syntax\r \r \`dayofmonth(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The datetime used to extract the day number.|\r \r ## Returns\r \r An integer representing the day number of the given datetime.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAAysoyswrUUhJrMxPy83PK8nQSEksSS3JzE3VMDIwNNU1NNI1NNHUBAAj3TtIJgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r dayofmonth(datetime(2015-12-14))\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |14|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dayofmonthfunction","dayofmonthfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dayofweek","Returns the integer number of days since the preceding Sunday, as a `timespan`.",`## Syntax\r \r \`dayofweek(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The datetime for which to determine the day of week.|\r \r ## Returns\r \r The \`timespan\` since midnight at the beginning of the preceding Sunday, rounded down to an integer number of days.`,"```\r\ndayofweek(datetime(1947-11-30 10:00:05)) // time(0.00:00:00), indicating Sunday\r\ndayofweek(datetime(1970-05-11)) // time(1.00:00:00), indicating Monday\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/dayofweekfunction","dayofweekfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dayofyear","Returns the integer number represents the day number of the given year.",`## Syntax\r \r \`dayofyear(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The datetime for which to determine the day number.|\r \r ## Returns\r \r The day number of the given year.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAAysoyswrUUhJrMxPq0xNLNJISSxJLcnMTdUwMjA01TU00jU00dQEAOQ8/cIlAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r dayofyear(datetime(2015-12-14))\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |348|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dayofyearfunction","dayofyearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dcount","Calculates an estimate of the number of distinct values that are taken by a scalar expression in the summary group.",`> [!NOTE]\r > The \`dcount()\` aggregation function is primarily useful for estimating the cardinality of huge sets. It trades accuracy for performance, and may return a result that varies between executions. The order of inputs may have an effect on its output.\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`dcount\` \`(\`*expr*[\`,\` *accuracy*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr*| string | ✓ | The input whose distinct values are to be counted. |\r | *accuracy* | int | | The value that defines the requested estimation accuracy. The default value is \`1\`. See [Estimation accuracy](#estimation-accuracy) for supported values. |\r \r ## Returns\r \r Returns an estimate of the number of distinct values of *expr* in the group.`,`This example shows how many types of storm events happened in each state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVXDJTEtLLQIKQ+RsU5LzS/NKNMC8kMqCVE2FpEqF4JLEklSgtvyilNQikACaLgBDbD8AXQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize DifferentEvents=dcount(EventType) by State\r | order by DifferentEvents\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | DifferentEvents |\r | -------------------- | --------------- |\r | TEXAS | 27 |\r | CALIFORNIA | 26 |\r | PENNSYLVANIA | 25 |\r | GEORGIA | 24 |\r | ILLINOIS | 23 |\r | MARYLAND | 23 |\r | NORTH CAROLINA | 23 |\r | MICHIGAN | 22 |\r | FLORIDA | 22 |\r | OREGON | 21 |\r | KANSAS | 21 |\r | ... | ... |\r \r ## Estimation accuracy\r \r [!INCLUDE [data-explorer-estimation-accuracy](../../includes/data-explorer-estimation-accuracy.md)]`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dcount-aggfunction","dcount-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dcount_hll","Calculates the distinct count from results generated by [hll](hll-aggfunction.md) or [hll_merge](hll-merge-aggfunction.md).",`Read about the [underlying algorithm (*H*yper*L*og*L*og) and estimation accuracy](#estimation-accuracy).\r \r ## Syntax\r \r \`dcount_hll(\`*hll*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*hll*|string|✓| An expression generated by [hll](hll-aggfunction.md) or [hll-merge](hll-merge-aggfunction.md) to be used to find the distinct count.|\r \r ## Returns\r \r Returns the distinct count of each value in *hll*.`,`The following example shows the distinct count hll merged results.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSguzc1NLMqsSlXIyMkJSi1WsAUxNFwScxPTUwOK8gtSi0oqNRWSKhWSMvM0gksSi0pCMnNTdQwNcjUx9PumFqWnpkCMiM8FcTQgpoKVFhTlZ6UmlyikJOeX5pXEg6yB69EEAKm9wyCXAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize hllRes = hll(DamageProperty) by bin(StartTime,10m)\r | summarize hllMerged = hll_merge(hllRes)\r | project dcount_hll(hllMerged)\r \`\`\`\r \r **Output**\r \r |dcount_hll_hllMerged|\r |---|\r |315|\r \r ## Estimation accuracy\r \r [!INCLUDE [data-explorer-estimation-accuracy](../../includes/data-explorer-estimation-accuracy.md)]`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dcount-hllfunction","dcount-hllfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dcount_intersect","Calculates intersection between N sets based on `hll` values (N in range of [2..16]), and returns N `dcount` values. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",`## Syntax\r \r *T* \`| evaluate\` \`dcount_intersect(\`*hll_1*, *hll_2*, [\`,\` *hll_3*\`,\` ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*T*|string|✓| The input tabular expression. |\r |*hll_i*| The values of set S<sub>i</sub> calculated with the [\`hll()\`](./hll-aggfunction.md) function.|\r \r ## Returns\r \r Returns a table with N \`dcount\` values (per column, representing set intersections).\r Column names are s0, s1, ... (until n-1).\r \r Given sets S<sub>1</sub>, S<sub>2</sub>, .. S<sub>n</sub> return values will be representing distinct counts of: \r S<sub>1</sub>, \r S<sub>1</sub> \u2229 S<sub>2</sub>, \r S<sub>1</sub> \u2229 S<sub>2</sub> \u2229 S<sub>3</sub>, \r ... , \r S<sub>1</sub> \u2229 S<sub>2</sub> \u2229 ... \u2229 S<sub>n</sub>`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WSQWvjMBCF7/kV71JqgxbbMc4hkFMpuwvd/oWgypNEu7IUJDkNpT++mrh2nUK7PomZeU/6nqco8JMseRkJtu+eyAfsvOtQITpUZbnw0u4J5+sqQqQjqsUr6BzJttDh/kQWG2Rn3GCJzQZlLlL5j2vrsVxflZux3AzlRVHgThrVG36McrbVUTsrDX49POAkTU8BmXWpGQ8y4ra8TUbQVpm+pfQEC5LqALdLfeogA2Q7eVz0AsHhmfCsjUHon6KXKkJH8JU+Tzih7zrp9QvhYMyWBqZ0zLTeZQOkwFlcKJa5WGD2saIbcD8UzP8/RfNZ0cwU4Fx+25P7x9yEo+n3CfUSgRrjCmiV621isQkkkGLqMN3D/4kD4GCHwe00mI2gYgKYTg1HcvTub5oDzzy+r8gGocQPVGJOg/TQ7z7em4J3A005i4F9t9K2Y3ah+uycfPeqzZaizlN/JTgHTzvn1zPfVWpVq698xwNHHZZ8wZWvaHLepbr88Kb1u3FdJk39Bu22I/gpAwAA" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate numbers from 1 to 100\r range x from 1 to 100 step 1\r | extend isEven = (x % 2 == 0), isMod3 = (x % 3 == 0), isMod5 = (x % 5 == 0)\r // Calculate conditional HLL values (note that '0' is included in each of them as additional value, so we will subtract it later)\r | summarize hll_even = hll(iif(isEven, x, 0), 2),\r hll_mod3 = hll(iif(isMod3, x, 0), 2),\r hll_mod5 = hll(iif(isMod5, x, 0), 2) \r // Invoke the plugin that calculates dcount intersections \r | evaluate dcount_intersect(hll_even, hll_mod3, hll_mod5)\r | project evenNumbers = s0 - 1, // 100 / 2 = 50\r even_and_mod3 = s1 - 1, // gcd(2,3) = 6, therefor: 100 / 6 = 16\r even_and_mod3_and_mod5 = s2 - 1 // gcd(2,3,5) is 30, therefore: 100 / 30 = 3 \r \`\`\`\r \r **Output**\r \r |evenNumbers|even_and_mod3|even_and_mod3_and_mod5|\r |---|---|---|\r |50|16|3|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dcount-intersect-plugin","dcount-intersect-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dcountif","Estimates the number of distinct values of *expr* for rows in which *predicate* evaluates to `true`.\r\n[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]",`## Syntax\r \r \`dcountif\` \`(\`*expr*, *predicate*, [\`,\` *accuracy*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *predicate* | string | ✓ | The expression used to filter rows. |\r | *accuracy* | int | | The control between speed and accuracy. If unspecified, the default value is \`1\`. See [Estimation accuracy](#estimation-accuracy) for supported values. |\r \r ## Returns\r \r Returns an estimate of the number of distinct values of *expr* for rows in which *predicate* evaluates to \`true\`.\r \r > [!TIP]\r > \`dcountif()\` may return an error in cases where all, or none of the rows pass the \`Predicate\` expression.`,`This example shows how many types of fatal storm events happened in each state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22MMQ6DMBAE+7ziShAUfAAqEyk1+cCBz8ISttH5AIHy+BhoKXc0O50Edu1KXuLrB3FxDtkeBMoaQ5zwGwWnW6j1EBYv1mTX/u4zlZkilDEqyzQIFHDPj9cXyJsqh36HTlAo9bcxNR/b0ECVhMCa+Hw8OX+LHx0UrAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize DifferentFatalEvents=dcountif(EventType,(DeathsDirect + DeathsIndirect)>0) by State\r | where DifferentFatalEvents > 0\r | order by DifferentFatalEvents \r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | DifferentFatalEvents |\r | -------------- | -------------------- |\r | CALIFORNIA | 12 |\r | TEXAS | 12 |\r | OKLAHOMA | 10 |\r | ILLINOIS | 9 |\r | KANSAS | 9 |\r | NEW YORK | 9 |\r | NEW JERSEY | 7 |\r | WASHINGTON | 7 |\r | MICHIGAN | 7 |\r | MISSOURI | 7 |\r | ... | ... |\r \r ## Estimation accuracy\r \r [!INCLUDE [data-explorer-estimation-accuracy](../../includes/data-explorer-estimation-accuracy.md)]`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dcountif-aggfunction","dcountif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"degrees","Converts angle value in radians into value in degrees, using the formula `degrees = (180 / PI ) * angle_in_radians`.",`## Syntax\r \r \`degrees(\`*radians*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *radians* | real | ✓ | The angle in radians to convert to degrees. |\r \r ## Returns\r \r The corresponding angle in degrees for an angle specified in radians.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJTS9KTS02ULCFMTUKMjU09U00dWAChmhyWoZ6pghZIyRZA00AiS3HB1UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print degrees0 = degrees(pi()/4), degrees1 = degrees(pi()*1.5), degrees2 = degrees(0)\r \`\`\`\r \r **Output**\r \r |degrees0|degrees1|degrees2|\r |---|---|---|\r |45|270|0|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/degreesfunction","degreesfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"diffpatterns","Compares two data sets of the same structure and finds patterns of discrete attributes (dimensions) that characterize differences between the two data sets. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",'`Diffpatterns` was developed to help analyze failures (for example, by comparing failures to non-failures in a given time frame), but can potentially find differences between any two data sets of the same structure.\r\n\r\n> [!NOTE]\r\n> `diffpatterns` aims to find significant patterns (that capture portions of the data difference between the sets) and isn\'t meant for row-by-row differences.\r\n\r\n## Syntax\r\n\r\n`T | evaluate diffpatterns(`*SplitColumn*`,` *SplitValueA*`,` *SplitValueB* [`,` *WeightColumn*`,`*Threshold*`,` *MaxDimensions*`,`\xA0*CustomWildcard*`,` ...]`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*SplitColumn*|string|✓|The column name that tells the algorithm how to split the query into data sets. According to the specified values for the *SplitValueA* and *SplitValueB* arguments, the algorithm splits the query into two data sets, \u201CA\u201D and \u201CB\u201D, and analyzes the differences between them. As such, the split column must have at least two distinct values.|\r\n|*SplitValueA*|string|✓|A string representation of one of the values in the *SplitColumn* that was specified. All the rows that have this value in their *SplitColumn* considered as data set \u201CA\u201D.|\r\n|*SplitValueB*|string|✓|A string representation of one of the values in the *SplitColumn* that was specified. All the rows that have this value in their *SplitColumn* considered as data set \u201CB\u201D.|\r\n|*WeightColumn*|string||The column used to consider each row in the input according to the specified weight. Must be a name of a numeric column, such as `int`, `long`, `real`. By default each row has a weight of \'1\'. To use the default value, input the tilde: `~`. A common usage of a weight column is to take into account sampling or bucketing/aggregation of the data that is already embedded into each row.<br/><br/>Example: `T | extend splitColumn= iff(request_responseCode == 200, "Success" , "Failure") | evaluate diffpatterns(splitColumn, "Success","Failure", sample_Count)`|\r\n|*Threshold*|long||A long in the range of 0.015 to 1. This value sets the minimal pattern ratio difference between the two sets. The default is 0.05. To use the default value, input the tilde: `~`.<br/><br/>Example: `T | extend splitColumn = iff(request-responseCode == 200, "Success" , "Failure") | evaluate diffpatterns(splitColumn, "Success","Failure", "~", 0.04)`|\r\n|*MaxDimensions*|int||Sets the maximum number of uncorrelated dimensions per result pattern. By specifying a limit, you decrease the query runtime. The default is unlimited. To use the default value, input the tilde: `~`.<br/><br/>Example: `T | extend splitColumn = iff(request-responseCode == 200, "Success" , "Failure") | evaluate diffpatterns(splitColumn, "Success","Failure", "~", "~", 3)`|\r\n|*CustomWildcard*|string||Sets the wildcard value for a specific type in the result table that will indicate that the current pattern doesn\'t have a restriction on this column. The default is null, except for string columns for which the default is an empty string. If the default is a viable value in the data, a different wildcard value should be used. For example, `*`. To use the default value, input the tilde: `~`.<br/><br/>Example: `T | extend splitColumn = iff(request-responseCode == 200, "Success" , "Failure") | evaluate diffpatterns(splitColumn, "Success","Failure", "~", "~", "~", int(-1), double(-1), long(0), datetime(1900-1-1))`|\r\n\r\n## Returns\r\n\r\n`Diffpatterns` returns a small set of patterns that capture different portions of the data in the two sets (that is, a pattern capturing a large percentage of the rows in the first data set and low percentage of the rows in the second set). Each pattern is represented by a row in the results.\r\n\r\nThe result of `diffpatterns` returns the following columns:\r\n\r\n* SegmentId: the identity assigned to the pattern in the current query (note: IDs aren\'t guaranteed to be the same in repeating queries).\r\n* CountA: the number of rows captured by the pattern in Set A (Set A is the equivalent of `where tostring(splitColumn) == SplitValueA`).\r\n* CountB: the number of rows captured by the pattern in Set B (Set B is the equivalent of `where tostring(splitColumn) == SplitValueB`).\r\n* PercentA: the percentage of rows in Set A captured by the pattern (100.0 * CountA / count(SetA)).\r\n* PercentB: the percentage of rows in Set B captured by the pattern (100.0 * CountB / count(SetB)).\r\n* PercentDiffAB: the absolute percentage point difference between A and B (|PercentA - PercentB|) is the main measure of significance of patterns in describing the difference between the two sets.\r\n* Rest of the columns: are the original schema of the input and describe the pattern, each row (pattern) reresents the intersection of the non-wildcard values of the columns (equivalent of `where col1==val1 and col2==val2 and ... colN=valN` for each non-wildcard value in the row).\r\n\r\nFor each pattern, columns that aren\'t set in the pattern (that is, without restriction on a specific value) will contain a wildcard value, which is null by default. See in the Arguments section below how wildcards can be manually changed.\r\n\r\n* Note: the patterns are often not distinct. They may be overlapping, and usually don\'t cover all the original rows. Some rows may not fall under any pattern.\r\n\r\n> [!TIP]\r\n>\r\n> * Use [where](./whereoperator.md) and [project](./projectoperator.md) in the input pipe to reduce the data to just what you\'re interested in.\r\n> * When you find an interesting row, you might want to drill into it further by adding its specific values to your `where` filter.',`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzVNvQ6CYAzcfYoLE0QHGBxxUXcTeIEvUATj95NSUBIf3n6gQ9u79npXiWd7ncnJiN0Hr56YYL2T3ncLGU4rMSz1YClDWeKoGnoLuRYXY82dUGLounQjZ/ZhxP53uikjlgUn5Dig0Moz/Q/sH9QI1FlIl2t6vYSIKz9xE8Fm8Z+rcYyezXOKX62GBiNC7Mb0r03yRFuRIPsCQuCK6dYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where monthofyear(StartTime) == 5\r | extend Damage = iff(DamageCrops + DamageProperty > 0 , 1 , 0)\r | project State , EventType , Source , Damage, DamageCrops\r | evaluate diffpatterns(Damage, "0", "1" )\r \`\`\`\r \r **Output**\r \r |SegmentId|CountA|CountB|PercentA|PercentB|PercentDiffAB|State|EventType|Source|DamageCrops|\r |---|---|---|---|---|---|---|---|---|---|\r |0|2278|93|49.8|7.1|42.7||Hail||0|\r |1|779|512|17.03|39.08|22.05||Thunderstorm Wind|||\r |2|1098|118|24.01|9.01|15|||Trained Spotter|0|\r |3|136|158|2.97|12.06|9.09|||Newspaper||\r |4|359|214|7.85|16.34|8.49||Flash Flood|||\r |5|50|122|1.09|9.31|8.22|IOWA||||\r |6|655|279|14.32|21.3|6.98|||Law Enforcement||\r |7|150|117|3.28|8.93|5.65||Flood|||\r |8|362|176|7.91|13.44|5.52|||Emergency Manager||\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # diffpatterns plugin - Internal\r \r If you have questions about diffpatterns or other ML related workflows in Kusto you can post them on the following DL: [KustoML](mailto:kustoML@microsoft.com).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/diffpatternsplugin","diffpatternsplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"diffpatterns_text","Compares two data sets of string values and finds text patterns that characterize differences between the two data sets. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",`The \`diffpatterns_text\` returns a set of text patterns that capture different portions of the data in the two sets. For example, a pattern capturing a large percentage of the rows when the condition is \`true\` and low percentage of the rows when the condition is \`false\`. The patterns are built from consecutive tokens separated by white space, with a token from the text column or a \`*\` representing a wildcard. Each pattern is represented by a row in the results.\r \r ## Syntax\r \r \`T | evaluate diffpatterns_text(\`*TextColumn*, *BooleanCondition* [, *MinTokens*, *Threshold* , *MaxTokens*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *TextColumn* | string | ✓ | The text column to analyze. |\r | *BooleanCondition* | string | ✓ | An expression that evaluates to a boolean value. The algorithm splits the query into the two data sets to compare based on this expression.|\r | *MinTokens* | int | | An integer value between 0 and 200 that represents the minimal number of non-wildcard tokens per result pattern. The default is 1. |\r | *Threshold* | decimal | | A decimal value between 0.015 and 1 that sets the minimal pattern ratio difference between the two sets. Default is 0.05. See [diffpatterns](diffpatternsplugin.md).|\r | *MaxTokens* | int | | An integer value between 0 and 20 that sets the maximal number of tokens per result pattern, specifying a lower limit decreases the query runtime.|\r \r ## Returns\r \r The result of diffpatterns_text returns the following columns:\r \r * Count_of_True: The number of rows matching the pattern when the condition is \`true\`.\r * Count_of_False: The number of rows matching the pattern when the condition is \`false\`.\r * Percent_of_True: The percentage of rows matching the pattern from the rows when the condition is \`true\`.\r * Percent_of_False: The percentage of rows matching the pattern from the rows when the condition is \`false\`.\r * Pattern: The text pattern containing tokens from the text string and '\`*\`' for wildcards.\r \r > [!NOTE]\r > The patterns aren't necessarily distinct and may not provide full coverage of the data set. The patterns may be overlapping and some rows may not match any pattern.`,`The following example uses data from the StormEvents table in the help cluster. To access this data, sign in to [https://dataexplorer.azure.com/clusters/help/databases/Samples](https://dataexplorer.azure.com/clusters/help/databases/Samples). In the left menu, browse to **help** > **Samples** > **Tables** > **Storm_Events**.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA43OvQrCQBAE4F7wHdarEgiIdoKxiWltErCUhdt4B/cTNptowIc3sbBIIU45Ax9TSWRfDhSkgznr1QsehpjgU16QGcUOBJsclAIMGnwMYmIzEnJSCbLU1lMKJ9j9mo9wWNj12BLkE3vm2N+NKIi8WMqnMHmCIjq9vdpJL4x1Ts0SDeh6FAJtm6ZFEeLQ3YSekpSt7aKm7/nsTzaDffoGjOv6LBEBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where EventNarrative != "" and monthofyear(StartTime) > 1 and monthofyear(StartTime) < 9\r | where EventType == "Drought" or EventType == "Extreme Cold/Wind Chill"\r | evaluate diffpatterns_text(EpisodeNarrative, EventType == "Extreme Cold/Wind Chill", 2)\r \`\`\`\r \r **Output**\r \r |Count_of_True|Count_of_False|Percent_of_True|Percent_of_False|Pattern|\r |---|---|---|---|---|\r |11|0|6.29|0|Winds shifting northwest in * wake * a surface trough brought heavy lake effect snowfall downwind * Lake Superior from|\r |9|0|5.14|0|Canadian high pressure settled * * region * produced the coldest temperatures since February * 2006. Durations * freezing temperatures|\r |0|34|0|6.24|* * * * * * * * * * * * * * * * * * West Tennessee,|\r |0|42|0|7.71|* * * * * * caused * * * * * * * * across western Colorado. *|\r |0|45|0|8.26|* * below normal *|\r |0|110|0|20.18|Below normal *|\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # diffpatterns_text plugin - Internal\r \r If you have questions about diffpatterns_text or other ML related workflows in Kusto you can post them on the following DL: [KustoML](mailto:kustoML@microsoft.com).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/diffpatterns-textplugin","diffpatterns-textplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"distinct","Produces a table with the distinct combination of the provided columns of the input table.",`## Syntax\r \r *T* \`| distinct\` *ColumnName*\`[,\`*ColumnName2*\`, ...]\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ColumnName*| string | ✓| The column name to search for distinct values. |\r \r > [!NOTE]\r > The \`distinct\` operator supports providing an asterisk \`*\` as the group key to denote all columns, which is helpful for wide tables.`,`Shows distinct combination of states and type of events that led to over 45 direct injuries.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVfDMyyotykwtdsksSk0uUbBTMDEFSaZkFpdk5gEFgksSS1J1FMDaQioLUgH0ldkdRQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where InjuriesDirect > 45\r | distinct State, EventType\r \`\`\`\r \r **Output**\r \r |State|EventType|\r |--|--|\r |TEXAS|Winter Weather|\r |KANSAS|Tornado|\r |MISSOURI|Excessive Heat|\r |OKLAHOMA|Thunderstorm Wind|\r |OKLAHOMA|Excessive Heat|\r |ALABAMA|Tornado|\r |ALABAMA|Heat|\r |TENNESSEE|Heat|\r |CALIFORNIA|Wildfire|\r \r ## See also\r \r If the group by keys are of high cardinalities, try \`summarize by ...\` with the [shuffle strategy](shufflequery.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/distinctoperator","distinctoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"dynamic_to_json","Converts a scalar value of type `dynamic` to a canonical `string` representation.","## Syntax\r\n\r\n`dynamic_to_json(`*expr*`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n| *expr* | dynamic | ✓ | The expression to convert to string representation.|\r\n\r\n## Returns\r\n\r\nReturns a canonical representation of the input as a value of type `string`,\r\naccording to the following rules:\r\n\r\n* If the input is a scalar value of type other than `dynamic`,\r\n the output is the application of `tostring()` to that value.\r\n* If the input is an array of values, the output is composed of the\r\n characters `[`, `,`, and `]` interspersed with the canonical representation\r\n described here of each array element.\r\n* If the input is a property bag, the output is composed of the characters\r\n `{`, `,`, and `}` interspersed with the colon (`:`)-delimited name/value pairs\r\n of the properties. The pairs are sorted by the names, and the values\r\n are in the canonical representation described here of each array element.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFISkw3VLBVSKnMS8zNTI4vyY/PKs7P0+BSgAlpVAPZCgrqkYYG6lZwsVpNHYhwhIW6FZpSoGiysbqVoQ6MlwJUYwrnJZqoW5mBOXBDXAyByg1NoDxHEM8IynECcmBsZyDbGK4IaEy0oamOgqExEFvEctVqalpz5UC8ZESUl7C7Hew+HTw+QXU7hkOwOBbZE+BwVMAMSKiv4YHBBbID6KOCosy8EgXHolTXwtLEHFtIfNmCPamjEJRaXJpTAhYEAM5EMCHNAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let bag1 = dynamic_to_json(\r dynamic({\r 'Y10':dynamic({}),\r 'X8': dynamic({\r 'c3':1,\r 'd8':5,\r 'a4':6\r }),\r 'D1':114,\r 'A1':12,\r 'B1':2,\r 'C1':3,\r 'A14':[15, 13, 18]\r }));\r let bag2 = dynamic_to_json(\r dynamic({\r 'X8': dynamic({\r 'a4':6,\r 'c3':1,\r 'd8':5\r }),\r 'A14':[15, 13, 18],\r 'C1':3,\r 'B1':2,\r 'Y10': dynamic({}),\r 'A1':12, 'D1':114\r }));\r print AreEqual=bag1 == bag2, Result=bag1\r \`\`\`\r \r **Output**\r \r |AreEqual|Result|\r |---|---|\r |true|{"A1":12,"A14":[15,13,18],"B1":2,"C1":3,"D1":114,"X8":{"a4":6,"c3":1,"d8":5},"Y10":{}}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/dynamic-to-json-function","dynamic-to-json-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"endofday","Returns the end of the day containing the date, shifted by an offset, if provided.",`## Syntax\r \r \`endofday(\`*date* [, *offset*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓| The date to find the end of. |\r | *offset* | int | | The number of offset days from *date*. Default is 0. |\r \r ## Returns\r \r A datetime representing the end of the day for the given *date* value, with the *offset*, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy3MMQqAMAxG4d1T/GMLCo2LIDh6kGITUbCRmkXw8FYQvuUtr8S8MlTkYoMUPdARTEG4jE9Qgwdn0Z0XQ4r3nBMmcE4qtVyKxrYd7PpAQxeoAoXxM/j23/oXglVNRWQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project dayEnd = endofday(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |dayEnd|\r |---|\r |2016-12-31 23:59:59.9999999|\r |2017-01-01 23:59:59.9999999|\r |2017-01-02 23:59:59.9999999|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/endofdayfunction","endofdayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"endofmonth","Returns the end of the month containing the date, shifted by an offset, if provided.",`## Syntax\r \r \`endofmonth(\`*date* [, *offset*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓| The date used to find the end of the month. |\r | *offset* | int | | The number of offset months from *date*. Default is 0. |\r \r ## Returns\r \r A datetime representing the end of the month for the given *date* value, with the *offset*, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy3MOwqAMBBF0d5VvFJBIWMjCJYuJJgZP5CMJFO6eD8Ip7nNzT6tDBUpbJCsER3BFIRifIIqXDizHrwYoibb5hQwgVNQ+boO3tj2yHXvaOgcPUBufA1N+6+bGwOSY4VoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project monthEnd = endofmonth(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |monthEnd|\r |---|\r |2016-12-31 23:59:59.9999999|\r |2017-01-31 23:59:59.9999999|\r |2017-02-28 23:59:59.9999999|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/endofmonthfunction","endofmonthfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"endofweek","Returns the end of the week containing the date, shifted by an offset, if provided.",`Last day of the week is considered to be a Saturday.\r \r ## Syntax\r \r \`endofweek(\`*date* [, *offset*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓| The date used to find the end of the week. |\r | *offset* | int | | The number of offset weeks from *date*. Default is 0. |\r \r ## Returns\r \r A datetime representing the end of the week for the given *date* value, with the *offset*, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy3MMQqAMBBE0d5TTKmgkLURBEsPImYiKmYlLth4eA0Ir/nNT1NcCA3hoiEkPdAITCG4jCekwIMz6cbZcJP7GD0GMHoNOUs/GW09WLZOusbJB+L6rKvqf1y9enVBc2YAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project weekEnd = endofweek(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |weekEnd|\r |---|\r |2016-12-31 23:59:59.9999999|\r |2017-01-07 23:59:59.9999999|\r |2017-01-14 23:59:59.9999999|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/endofweekfunction","endofweekfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"endofyear","Returns the end of the year containing the date, shifted by an offset, if provided.",`## Syntax\r \r \`endofyear(\`*date* [, *offset*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓| The date used to find the end of the year. |\r | *offset* | int | | The number of offset years from *date*. Default is 0. |\r \r ## Returns\r \r A datetime representing the end of the year for the given *date* value, with the &*offset*, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy3MMQqAMAxG4d1T/GMLFhoXQXD0IMUmomAjNYvg4VUQvuUtr6ayMFTkZINU3REIpiCcxgeowY2j6saz4eJUp5IxgktW+dLlZGzrzq6L1IdIL1AcPr1v/7F/AESu49RmAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project yearEnd = endofyear(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |yearEnd|\r |---|\r |2016-12-31 23:59:59.9999999|\r |2017-12-31 23:59:59.9999999|\r |2018-12-31 23:59:59.9999999|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/endofyearfunction","endofyearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"endswith","Filters a record set for data with a case-insensitive ending string.",`[!INCLUDE [endswith-operator-comparison](../../includes/endswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r For faster results, use the case-sensitive version of an operator. For example, use \`endswith_cs\` instead of \`endswith\`.\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`endswith\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered. |\r | *col* | string | ✓ | The column to filter. |\r | *expression* | string | ✓ | The expression used to filter. |\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVYAI2Sbnl+aVaGgqJFUqBJcklqQC1ZRnpBalQngKqXkpxeWZJRkKSsWJxUpwSYhmBTsFQwOgWEFRflZqcglEiw5UEgBi2Q64eAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize Events=count() by State\r | where State endswith "sas"\r | where Events > 10\r | project State, Events\r \`\`\`\r \r **Output**\r \r |State|Events|\r |--|--|\r |KANSAS|3166|\r |ARKANSAS|1028|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/endswith-operator","endswith-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"endswith_cs","Filters a record set for data with a case-sensitive ending string.",`[!INCLUDE [endswith-operator-comparison](../../includes/endswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`endswith_cs\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓| The tabular input whose records are to be filtered. |\r | *col* | string | ✓ | The column to filter. |\r | *expression* | string | ✓ | The expression used to filter. |\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVYAIKdgqJOeX5pVoaCokVSoElySWpAJVlWekFqVCeAqpeSnF5ZklGfHJxQpKfo5KAE4M2OtQAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize Events = count() by State\r | where State endswith_cs "NA"\r \`\`\`\r \r **Output**\r \r |State|Events|\r |--|--|\r |NORTH CAROLINA |1721|\r |MONTANA |1230|\r |INDIANA |1164|\r |SOUTH CAROLINA| 915|\r |LOUISIANA| 463|\r |ARIZONA| 340|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/endswith-cs-operator","endswith-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"estimate_data_size","Returns an estimated data size in bytes of the selected columns of the tabular expression.",`## Syntax\r \r \`estimate_data_size(\`*columns*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*columns*|string|✓|One or more comma-separated column references in the source tabular expression to use for data size estimation. To include all columns, use the wildcard (\`*\`) character.|\r \r ## Returns\r \r The estimated data size in bytes of the record size. Estimation is based on data types and values lengths.`,`The following example calculates the total data size using \`estimate_data_size()\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22NvQ7CMBCDd57CWxMYmvAbhr5F9ypSj1KpSarmkCLEw3OFtbdYlu3vFh8HQsFjSQEWnGANMtMsZuPqWrpqSnHQGDMcdh9QYYo9WlE0qOzxdL5cb+5uqm3ArzhRHPi5MuTfSsmvEPwyvgltYj814hVlHoNn6nrPvssSqr3Wf4pyB2t0kXUD68wXVvoNCMgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1 // x (long) is 8 \r | extend Text = '1234567890' // Text length is 10 \r | summarize Total=sum(estimate_data_size(*)) // (8+10)x10 = 180\r \`\`\`\r \r **Output**\r \r |Total|\r |---|\r |180|\r \r ## See also\r \r * [Estimate table size](../management/estimate-table-size.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/estimate-data-sizefunction","estimate-data-sizefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"evaluate","Invokes a service-side query extension (plugin).",`The \`evaluate\` operator is a tabular operator that allows you to invoke query language extensions known as **plugins**. Unlike other language constructs, plugins can be enabled or disabled. Plugins aren't "bound" by the relational nature of the language. In other words, they may not have a predefined, statically determined, output schema.\r \r > [!NOTE]\r >\r > * Syntactically, \`evaluate\` behaves similarly to the [invoke operator](./invokeoperator.md), which invokes tabular functions.\r > * Plugins provided through the evaluate operator aren't bound by the regular rules of query execution or argument evaluation.\r > * Specific plugins may have specific restrictions. For example, plugins whose output schema depends on the data. For example, [bag_unpack plugin](./bag-unpackplugin.md) and [pivot plugin](./pivotplugin.md) can't be used when performing cross-cluster queries.\r \r ## Syntax\r \r [*T* \`|\`] \`evaluate\` [ *evaluateParameters* ] *PluginName* \`(\`[ *PluginArgs* ]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *T* | string | | A tabular input to the plugin. Some plugins don't take any input and act as a tabular data source.|\r | *evaluateParameters* | string | | Zero or more space-separated [evaluate parameters](#evaluate-parameters) in the form of *Name* \`=\` *Value* that control the behavior of the evaluate operation and execution plan. Each plugin may decide differently how to handle each parameter. Refer to each plugin's documentation for specific behavior.|\r | *PluginName* | string | ✓ | The mandatory name of the plugin being invoked. |\r | *PluginArgs* | string | | Zero or more comma-separated arguments to provide to the plugin.|\r \r ### Evaluate parameters\r \r The following parameters are supported:\r \r |Name |Values |Description |\r |--------------------|---------------------------------|-------------------------------------------|\r |\`hint.distribution\` |\`single\`, \`per_node\`, \`per_shard\`| [Distribution hints](#distribution-hints) |\r |\`hint.pass_filters\` |\`true\`, \`false\`| Allow \`evaluate\` operator to passthrough any matching filters before the plugin. Filter is considered as 'matched' if it refers to a column existing before the \`evaluate\` operator. Default: \`false\` |\r |\`hint.pass_filters_column\` |*column_name*| Allow plugin operator to passthrough filters referring to *column_name* before the plugin. Parameter can be used multiple times with different column names. |\r \r ## Plugins\r \r The following plugins are supported:\r \r * [autocluster plugin](autoclusterplugin.md)\r * [azure-digital-twins-query-request plugin](azure-digital-twins-query-request-plugin.md)\r * [bag-unpack plugin](bag-unpackplugin.md)\r * [basket plugin](basketplugin.md)\r * [cosmosdb-sql-request plugin](cosmosdb-plugin.md)\r * [dcount-intersect plugin](dcount-intersect-plugin.md)\r * [diffpatterns plugin](diffpatternsplugin.md)\r * [diffpatterns-text plugin](diffpatterns-textplugin.md)\r * [infer-storage-schema plugin](inferstorageschemaplugin.md)\r * [ipv4-lookup plugin](ipv4-lookup-plugin.md)\r * [mysql-request-plugin](mysqlrequest-plugin.md)\r * [narrow plugin](narrowplugin.md)\r * [pivot plugin](pivotplugin.md)\r * [preview plugin](previewplugin.md)\r * [R plugin](rplugin.md)\r * [rolling-percentile plugin](rolling-percentile-plugin.md)\r * [rows-near plugin](rows-near-plugin.md)\r * [schema-merge plugin](schemamergeplugin.md)\r * [sql-request plugin](sqlrequestplugin.md)\r * [sequence-detect plugin](sequence-detect-plugin.md)\r \r ## Distribution hints\r \r Distribution hints specify how the plugin execution will be distributed across multiple cluster nodes. Each plugin may implement a different support for the distribution. The plugin's documentation specifies the distribution options supported by the plugin.\r \r Possible values:\r \r * \`single\`: A single instance of the plugin will run over the entire query data.\r * \`per_node\`: If the query before the plugin call is distributed across nodes, then an instance of the plugin will run on each node over the data that it contains.\r * \`per_shard\`: If the data before the plugin call is distributed across shards, then an instance of the plugin will run over each shard of the data.`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/evaluateoperator","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"exp","The base-e exponential function of x, which is e raised to the power x: e^x.",`## Syntax\r \r \`exp(\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x* | real | ✓| The value of the exponent. |\r \r ## Returns\r \r The exponential value of x.\r \r ## See also\r \r * For natural (base-e) logarithms, see [log()](log-function.md).\r * For exponential functions of base-2 and base-10 logarithms, see [exp2()](exp2-function.md), [exp10()](exp10-function.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/exp-function","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"exp10","The base-10 exponential function of x, which is 10 raised to the power x: 10^x.",`## Syntax\r \r \`exp10(\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x* | real | ✓| The value of the exponent. |\r \r ## Returns\r \r The exponential value of x.\r \r ## See also\r \r * For natural (base-10) logarithms, see [log10()](log10-function.md).\r * For exponential functions of base-e and base-2 logarithms, see [exp()](exp-function.md), [exp2()](exp2-function.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/exp10-function","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"exp2","The base-2 exponential function of x, which is 2 raised to the power x: 2^x.",`## Syntax\r \r \`exp2(\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x* | real | ✓| The value of the exponent. |\r \r ## Returns\r \r The exponential value of x.\r \r ## See also\r \r * For natural (base-2) logarithms, see [log2()](log2-function.md).\r * For exponential functions of base-e and base-10 logarithms, see [exp()](exp-function.md), [exp10()](exp10-function.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/exp2-function","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"extend","Create calculated columns and append them to the result set.",`## Syntax\r \r *T* \`| extend\` [*ColumnName* | \`(\`*ColumnName*[\`,\` ...]\`)\` \`=\`] *Expression* [\`,\` ...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *T* | string | ✓ | Tabular input to extend. |\r | *ColumnName* | string | | Name of the column to add or update. |\r | *Expression* | string | ✓ | Calculation to perform over the input.|\r \r * If *ColumnName* is omitted, the output column name of *Expression* will be automatically generated.\r * If *Expression* returns more than one column, a list of column names can be specified in parentheses. Then, *Expression*'s output columns will be given the specified names. If a list of the column names is not specified, all *Expression*'s output columns with generated names will be added to the output.\r \r ## Returns\r \r A copy of the input tabular result set, such that:\r \r 1. Column names noted by \`extend\` that already exist in the input are removed\r and appended as their new calculated values.\r 1. Column names noted by \`extend\` that do not exist in the input are appended\r as their new calculated values.\r \r > [!NOTE]\r > The \`extend\` operator adds a new column to the input result set, which does\r **not** have an index. In most cases, if the new column is set to be exactly\r the same as an existing table column that has an index, Kusto can automatically\r use the existing index. However, in some complex scenarios this propagation is\r not done. In such cases, if the goal is to rename a column, use the [\`project-rename\` operator](projectrenameoperator.md) instead.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKCjKz0pNLlFwzUsJycxN1VEILkksKgExgZKpFSWpeSkKLqVFiSWZ+XkKtjBlCroIdQCqSrMYUAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project EndTime, StartTime\r | extend Duration = EndTime - StartTime\r \`\`\`\r \r The following table shows only the first 10 results. To see the full output, run the query.\r \r |EndTime|StartTime|Duration|\r |--|--|--|\r |2007-01-01T00:00:00Z| 2007-01-01T00:00:00Z |00:00:00|\r |2007-01-01T00:25:00Z| 2007-01-01T00:25:00Z |00:00:00|\r |2007-01-01T02:24:00Z| 2007-01-01T02:24:00Z |00:00:00|\r |2007-01-01T03:45:00Z| 2007-01-01T03:45:00Z |00:00:00|\r |2007-01-01T04:35:00Z| 2007-01-01T04:35:00Z |00:00:00|\r |2007-01-01T04:37:00Z| 2007-01-01T03:37:00Z |01:00:00|\r |2007-01-01T05:00:00Z| 2007-01-01T00:00:00Z |05:00:00|\r |2007-01-01T05:00:00Z| 2007-01-01T00:00:00Z |05:00:00|\r |2007-01-01T06:00:00Z| 2007-01-01T00:00:00Z |06:00:00|\r |2007-01-01T06:00:00Z| 2007-01-01T00:00:00Z |06:00:00|\r \r ## See also\r \r * Use [series_stats](series-statsfunction.md) to return multiple columns`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/extendoperator","extendoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"extent_id",'Returns a unique identifier that identifies the data shard ("extent") that the current record resides in.',`Applying this function to calculated data that isn't attached to a data shard returns an empty guid (all zeros).\r \r > **Deprecated aliases:** extentid()\r \r ## Syntax\r \r \`extent_id()\`\r \r ## Returns\r \r A value of type \`guid\` that identifies the current record's data shard,\r or an empty guid (all zeros).`,"The following example shows how to get a list of all the data shards\r\nthat have records from an hour ago with a specific value for the\r\ncolumn `ActivityId`. It demonstrates that some query operators (here,\r\nthe `where` operator, and also `extend` and `project`)\r\npreserve the information about the data shard hosting the record.\r\n\r\n```\r\nT\r\n| where Timestamp > ago(1h)\r\n| where ActivityId == 'dd0595d4-183e-494e-b88e-54c52fe90e5a'\r\n| extend eid=extent_id()\r\n| summarize by eid\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/extentidfunction","extentidfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"extent_tags",'Returns a dynamic array with the [tags](../management/extents-overview.md#extent-tagging) of the data shard ("extent") that the current record is in.',`If you apply this function to calculated data, which isn't attached to a data shard, returns an empty value.\r \r ## Syntax\r \r \`extent_tags()\`\r \r ## Returns\r \r A value of type \`dynamic\` that is an array holding the current record's extent tags,\r or an empty value.`,"Some query operators preserve the information about the data shard hosting the record.\r\nThese operators include `where`, `extend`, and `project`.\r\nThe following example shows how to get a list the tags of all the data shards\r\nthat have records from an hour ago, with a specific value for the\r\ncolumn `ActivityId`.\r\n\r\n```\r\nT\r\n| where Timestamp > ago(1h)\r\n| where ActivityId == 'dd0595d4-183e-494e-b88e-54c52fe90e5a'\r\n| extend tags = extent_tags()\r\n| summarize by tostring(tags)\r\n```\r\n\r\nThe following example shows how to obtain a count of all records from the last hour, which are stored in extents tagged with the tag `MyTag`(and potentially other tags), but not tagged with the tag `drop-by:MyOtherTag`.\r\n\r\n```\r\nT\r\n| where Timestamp > ago(1h)\r\n| extend Tags = extent_tags()\r\n| where Tags has_cs 'MyTag' and Tags !has_cs 'drop-by:MyOtherTag'\r\n| count\r\n```\r\n\r\n> [!NOTE]\r\n> Filtering on the value of `extent_tags()` performs best when one of the following string operators is used:\r\n> `has`, `has_cs`, `!has`, `!has_cs`.","https://docs.microsoft.com/azure/data-explorer/kusto/query/extenttagsfunction","extenttagsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"external_table","References an [external table](schema-entities/externaltables.md) by name.",`> [!NOTE]\r >\r > The \`external_table\` function has similar restrictions as the [table](tablefunction.md) function.\r > Standard [query limits](../concepts/querylimits.md) apply to external table queries as well.\r \r ## Syntax\r \r \`external_table(\` *TableName* [\`,\` *MappingName* ] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *TableName* | string| ✓ | The name of the external table being queried. Must reference an external table of kind \`blob\`, \`adl\`, or \`sql\`.|\r | *MappingName* | string | | A name of a mapping object that maps fields in the external data shards to columns output.|\r \r ## Authentication and authorization\r \r The authentication method to access an external table is based on the connection string provided during its creation, and the permissions required to access the table vary depending on the authentication method. For more information, see [Azure Storage external table](../management/external-tables-azurestorage-azuredatalake.md#authentication-and-authorization) or [SQL Server external table](../management/external-sql-tables.md).\r \r ## Next steps\r \r * [External tables overview](schema-entities/externaltables.md)\r * [Create and alter Azure Storage external tables](../management/external-tables-azurestorage-azuredatalake.md)\r * [Create and alter SQL Server external tables](../management/external-sql-tables.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/externaltablefunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"externaldata","The `externaldata` operator returns a table whose schema is defined in the query itself, and whose data is read from an external storage artifact, such as a blob in Azure Blob Storage or a file in Azure Data Lake Storage.","> [!NOTE]\r\n> The `externaldata` operator supports a specific set of storage services, as listed under [Storage connection strings](../api/connection-strings/storage-connection-strings.md).\r\n\r\n> [!NOTE]\r\n> The `externaldata` operator supports Shared Access Signature (SAS) key, Access key, and Azure AD Token authentication methods. For more information, see [Storage authentication methods](../api/connection-strings/storage-authentication-methods.md).\r\n\r\n## Syntax\r\n\r\n`externaldata` `(`*columnName*`:`*columnType* [`,` ...] `)`\r\n`[` *storageConnectionString* [`,` ...] `]`\r\n[`with` `(` *propertyName* `=` *propertyValue* [`,` ...]`)`]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *columnName*, *columnType* | string | ✓| A list of column names and their types. This list defines the schema of the table. |\r\n| *storageConnectionString* | string | ✓| A [storage connection string](../api/connection-strings/storage-connection-strings.md) of the storage artifact to query. |\r\n| *propertyName*, *propertyValue* | string | | A list of optional [properties](#properties) that determines how to interpret the data retrieved from storage.\r\n\r\n### Properties\r\n\r\n| Property | Type | Description |\r\n|------------------|----------|-------------------|\r\n| format | string | The data format. If unspecified, an attempt is made to detect the data format from file extension. The default is `CSV`. All [ingestion data formats](../../ingestion-supported-formats.md) are supported. |\r\n| ignoreFirstRecord | bool | If set to `true`, the first record in every file is ignored. This property is useful when querying CSV files with headers. |\r\n| ingestionMapping | string | Indicates how to map data from the source file to the actual columns in the operator result set. See [data mappings](../management/mappings.md). |\r\n\r\n> [!NOTE]\r\n>\r\n> This operator doesn't accept any pipeline input.\r\n>\r\n> Standard [query limits](../concepts/querylimits.md) apply to external data queries as well.\r\n\r\n## Returns\r\n\r\nThe `externaldata` operator returns a data table of the given schema whose data was parsed from the specified storage artifact, indicated by the storage connection string.",`### Fetch a list of user IDs stored in Azure Blob Storage\r \r The following example shows how to find all records in a table whose \`UserID\` column falls into a known set of IDs, held (one per line) in an external storage file. Since the data format isn't specified, the detected data format is \`TXT\`.\r \r \`\`\`\r Users\r | where UserID in ((externaldata (UserID:string) [\r @"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt" \r h@"?...SAS..." // Secret token needed to access the blob\r ]))\r | ...\r \`\`\`\r \r ### Query multiple data files\r \r The following example queries multiple data files stored in external storage.\r \r \`\`\`\r externaldata(Timestamp:datetime, ProductId:string, ProductDescription:string)\r [\r h@"https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/01/part-00000-7e967c99-cf2b-4dbb-8c53-ce388389470d.csv.gz?...SAS...",\r h@"https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/02/part-00000-ba356fa4-f85f-430a-8b5a-afd64f128ca4.csv.gz?...SAS...",\r h@"https://mycompanystorage.blob.core.windows.net/archivedproducts/2019/01/03/part-00000-acb644dc-2fc6-467c-ab80-d1590b23fc31.csv.gz?...SAS..."\r ]\r with(format="csv")\r | summarize count() by ProductId\r \`\`\`\r \r The above example can be thought of as a quick way to query multiple data files without defining an [external table](schema-entities/externaltables.md).\r \r > [!NOTE]\r > Data partitioning isn't recognized by the \`externaldata\` operator.\r \r ### Query hierarchical data formats\r \r To query hierarchical data format, such as \`JSON\`, \`Parquet\`, \`Avro\`, or \`ORC\`, \`ingestionMapping\` must be specified in the operator properties.\r In this example, there's a JSON file stored in Azure Blob Storage with the following contents:\r \r \`\`\`JSON\r {\r "timestamp": "2019-01-01 10:00:00.238521", \r "data": { \r "tenant": "e1ef54a6-c6f2-4389-836e-d289b37bcfe0", \r "method": "RefreshTableMetadata" \r } \r } \r {\r "timestamp": "2019-01-01 10:00:01.845423", \r "data": { \r "tenant": "9b49d0d7-b3e6-4467-bb35-fa420a25d324", \r "method": "GetFileList" \r } \r }\r ...\r \`\`\`\r \r To query this file using the \`externaldata\` operator, a data mapping must be specified. The mapping dictates how to map JSON fields to the operator result set columns:\r \r \`\`\`\r externaldata(Timestamp: datetime, TenantId: guid, MethodName: string)\r [ \r h@'https://mycompanystorage.blob.core.windows.net/events/2020/09/01/part-0000046c049c1-86e2-4e74-8583-506bda10cca8.json?...SAS...'\r ]\r with(format='multijson', ingestionMapping='[{"Column":"Timestamp","Properties":{"Path":"$.timestamp"}},{"Column":"TenantId","Properties":{"Path":"$.data.tenant"}},{"Column":"MethodName","Properties":{"Path":"$.data.method"}}]')\r \`\`\`\r \r The \`MultiJSON\` format is used here because single JSON records are spanned into multiple lines.\r \r For more info on mapping syntax, see [data mappings](../management/mappings.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/externaldata-operator","externaldata-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"extract","Get a match for a [regular expression](./re2.md) from a source string.",`Optionally, convert the extracted substring to the indicated type.\r \r ## Syntax\r \r \`extract(\`*regex*\`,\` *captureGroup*\`,\` *source* [\`,\` *typeLiteral*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *regex* | string | ✓ | A [regular expression](./re2.md).|\r | *captureGroup* | int | ✓ | The capture group to extract. 0 stands for the entire match, 1 for the value matched by the first '('parenthesis')' in the regular expression, and 2 or more for subsequent parentheses.|\r | *source* | string | ✓| The string to search.|\r | *typeLiteral* | string | | If provided, the extracted substring is converted to this type. For example, \`typeof(long)\`.\r \r ## Returns\r \r If *regex* finds a match in *source*: the substring matched against the indicated capture group *captureGroup*, optionally converted to *typeLiteral*.\r \r If there's no match, or the type conversion fails: \`null\`.`,'The example string `Trace` is searched for a definition for `Duration`.\r\nThe match is converted to `real`, then multiplied it by a time constant (`1s`) so that `Duration` is of type `timespan`. In this example, it\'s equal to 123.45 seconds:\r\n\r\n```\r\n...\r\n| extend Trace="A=1, B=2, Duration=123.45, ..."\r\n| extend Duration = extract("Duration=([0-9.]+)", 1, Trace, typeof(real)) * time(1s) \r\n```\r\n\r\nThis example is equivalent to `substring(Text, 2, 4)`:\r\n\r\n```\r\nextract("^.{2,2}(.{4,4})", 1, Text)\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/extractfunction","extractfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"extract_all",`Get all matches for a [regular expression](./re2.md) from a source string.\r Optionally, retrieve a subset of matching groups.`,`\`\`\`\r print extract_all(@"(\\d+)", "a set of numbers: 123, 567 and 789") // results with the dynamic array ["123", "567", "789"]\r \`\`\`\r \r > **Deprecated aliases:** extractall()\r \r ## Syntax\r \r \`extract_all(\`*regex*\`,\` [*captureGroups*\`,\`] *source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *regex* | string | ✓ | A [regular expression](./re2.md) containing between one and 16 capture groups.|\r | *captureGroups* | dynamic | | An array that indicates the capture groups to extract. Valid values are from 1 to the number of capturing groups in the regular expression. Named capture groups are allowed as well. See [examples](#examples).|\r | *source* | string | ✓| The string to search.|\r \r ## Returns\r \r * If *regex* finds a match in *source*: Returns dynamic array including all matches against the indicated capture groups *captureGroups*, or all of capturing groups in the *regex*.\r * If number of *captureGroups* is 1: The returned array has a single dimension of matched values.\r * If number of *captureGroups* is more than 1: The returned array is a two-dimensional collection of multi-value matches per *captureGroups* selection, or all capture groups present in the *regex* if *captureGroups* is omitted.\r * If there's no match: \`null\`.`,`### Extract a single capture group\r \r The following query returns hex-byte representation (two hex-digits) of the GUID.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUfBMsVWyMEqySEo1StFNSUs01zVJSjHUtUgzM9Y1MklMMTJLMTY0MbFU4qpRSK0oSc1LUUgvzUyJT6osSS1WsAWJFSUml8Qn5uRoOChpRMekJOqmxVYb1Woq6QAN1wQA6/wKuGYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"\r | extend guid_bytes = extract_all(@"([\\da-f]{2})", Id) \r \`\`\`\r \r **Output**\r \r |ID|guid_bytes|\r |---|---|\r |82b8be2d-dfa7-4bd1-8f63-24ad26d31449|["82","b8","be","2d","df","a7","4b","d1","8f","63","24","ad","26","d3","14","49"]|\r \r ### Extract several capture groups\r \r The following query uses a regular expression with three capturing groups to split each GUID part into first letter, last letter, and whatever is in the middle.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUfBMsVWyMEqySEo1StFNSUs01zVJSjHUtUgzM9Y1MklMMTJLMTY0MbFU4qpRSK0oSc1LUUgvzUyJT6osSS1WsAWJFSUml8Qn5uRoOChpxJRrArE2iNBU0gGargkAiT0FmGcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"\r | extend guid_bytes = extract_all(@"(\\w)(\\w+)(\\w)", Id)\r \`\`\`\r \r **Output**\r \r |ID|guid_bytes|\r |---|---|\r |82b8be2d-dfa7-4bd1-8f63-24ad26d31449|[["8","2b8be2","d"],["d","fa","7"],["4","bd","1"],["8","f6","3"],["2","4ad26d3144","9"]]|\r \r ### Extract a subset of capture groups\r \r The following query selects a subset of capturing groups.\r \r The regular expression matches the first letter, last letter, and all the rest.\r \r The *captureGroups* parameter is used to select only the first and the last parts.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUfBMsVWyMEqySEo1StFNSUs01zVJSjHUtUgzM9Y1MklMMTJLMTY0MbFU4qpRSK0oSc1LUUgvzUyJT6osSS1WsAWJFSUml8Qn5uRoOChpxJRrArE2iNBU0lFIqcxLzM1M1og21DGO1dQB2qYJAHPOX8l3AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"\r | extend guid_bytes = extract_all(@"(\\w)(\\w+)(\\w)", dynamic([1,3]), Id) \r \`\`\`\r \r **Output**\r \r |ID|guid_bytes|\r |---|---|\r |82b8be2d-dfa7-4bd1-8f63-24ad26d31449|[["8","d"],["d","7"],["4","1"],["8","3"],["2","9"]]|\r \r ### Using named capture groups\r \r The *captureGroups* in the following query uses both capture group indexes and named capture group references to fetch matching values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyWOsQrCMBRFd78iZEmLydA01AhWXd3cVcpLX1ICaZE2ogU/3qaO5x4O3Ofoh0guWFMtjTZWokAHO6EMFkK7qhRSAcoKy0KpPd18if1EOyDpXh4bM0c7kTptI7SxgRCyM81O14Pz4xSP93eeoPeIwS60XTHAX1FOcB6g9212Y2vAuOQsafbI+fIq/wFEwbznnwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print Id="82b8be2d-dfa7-4bd1-8f63-24ad26d31449"\r | extend guid_bytes = extract_all(@"(?P<first>\\w)(?P<middle>\\w+)(?P<last>\\w)", dynamic(['first',2,'last']), Id) \r \`\`\`\r \r **Output**\r \r |ID|guid_bytes|\r |---|---|\r |82b8be2d-dfa7-4bd1-8f63-24ad26d31449|[["8","2b8be2","d"],["d","fa","7"],["4","bd","1"],["8","f6","3"],["2","4ad26d3144","9"]]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/extractallfunction","extractallfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"extract_json","Get a specified element out of a JSON text using a path expression.",`Optionally convert the extracted string to a specific type.\r \r > The \`extract_json()\` and \`extractjson()\` functions are equivalent\r \r \`\`\`\r extract_json("$.hosts[1].AvailableMB", EventText, typeof(int))\r \`\`\`\r \r ## Syntax\r \r \`extract_json(\`*jsonPath*\`,\` *dataSource*\`,\` *type*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *jsonPath* | string | ✓ | A [JSONPath](jsonpath.md) that defines an accessor into the JSON document.|\r | *dataSource* | string | ✓ | A JSON document.|\r | *type* | string | | An optional type literal. If provided, the extracted value is converted to this type. For example, \`typeof(long)\` will convert the extracted value to a \`long\`.|\r \r ## Performance tips\r \r * Apply where-clauses before using \`extract_json()\`.\r * Consider using a regular expression match with [extract](extractfunction.md) instead. This can run very much faster, and is effective if the JSON is produced from a template.\r * Use \`parse_json()\` if you need to extract more than one value from the JSON.\r * Consider having the JSON parsed at ingestion by declaring the type of the column to be [dynamic](scalar-data-types/dynamic.md).\r \r ## Returns\r \r This function performs a [JSONPath](jsonpath.md) query into dataSource, which contains a valid JSON string, optionally converting that value to another type depending on the third argument.`,"The `[`bracket`]` notation and dot (`.`) notation are equivalent:\r\n\r\n```\r\nT\r\n| extend AvailableMB = extract_json(\"$.hosts[1].AvailableMB\", EventText, typeof(int))\r\n\r\nT\r\n| extend AvailableMB = extract_json(\"$['hosts'][1]['AvailableMB']\", EventText, typeof(int))\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/extractjsonfunction","extractjsonfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"facet","Returns a set of tables, one for each specified column.\r\nEach table specifies the list of values taken by its column.\r\nAn additional table can be created by using the `with` clause.",`## Syntax\r \r *T* \`| facet by\` *ColumnName* [\`,\` *ColumnName2*\`,\` ...] [\`with (\` *filterPipe* \`)\`]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ColumnName* | string | ✓ | The column name, or list of column names, to be summarized.|\r | *filterPipe* | string | | A query expression applied to the input table.|\r \r ## Returns\r \r Multiple tables: one for the \`with\` clause, and one for each column.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VOywqCQBTdB/7DYVYKKVMUrlsEtdYfGJ0bWujIzE0R/Ph81qK7OvdwXgkbW11bqtl5uwFdQZaQsGKCY2XZdSUXEBcBVWvMwrRvCIVyEDdSbS8m30PlxMj6xbr/Cb0dxptDFuivzFZkOS0rQkbcEdW+Hu08Ev5RyjiUh1CeAkQRYh2sAQMaa56U89b1DRmhedt8qm9KZzTd9d+SAaxehPPyBR9NMsYY/wAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith "A" and EventType has "Heavy"\r | facet by State, EventType\r with \r (\r where StartTime between(datetime(2007-01-04) .. 7d) \r | project State, StartTime, Source, EpisodeId, EventType\r | take 5\r )\r \`\`\`\r \r The following is the table generated by the \`with\` clause.\r \r |State|StartTime|Source|EpisodeId|EventType|\r |--|--|--|--|--|\r |ALASKA|2007-01-04 12:00:00.0000000|COOP Observer|2192|Heavy Snow|\r |ALASKA|2007-01-04 15:00:00.0000000|Trained Spotter|2192|Heavy Snow|\r |ALASKA|2007-01-04 15:00:00.0000000|Trained Spotter|2192|Heavy Snow|\r |ALASKA|2007-01-04 15:00:00.0000000|Trained Spotter|2192|Heavy Snow|\r |ALASKA|2007-01-06 18:00:00.0000000|COOP Observer|2193|Heavy Snow|\r \r The following table is the \`State\` facet output table.\r \r |State|count_State|\r |---|---|\r |ALABAMA|19|\r |ARIZONA|33|\r |ARKANSAS|1|\r |AMERICAN SAMOA|1|\r |ALASKA|58|\r \r The following table is the \`EventType\` facet output table.\r \r |EventType|count_EventType|\r |---|---|\r |Heavy Rain|34|\r |Heavy Snow|78|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/facetoperator","facetoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"find","Finds rows that match a predicate across a set of tables.","The scope of the `find` can also be cross-database or cross-cluster.\r\n\r\n```\r\nfind in (Table1, Table2, Table3) where Fruit==\"apple\"\r\nfind in (database('*').*) where Fruit == \"apple\"\r\nfind in (cluster('cluster_name').database('MyDB*').*) where Fruit == \"apple\"\r\n```\r\n\r\n## Syntax\r\n\r\n* `find` [`withsource`= *ColumnName*] [`in` `(`*Tables*`)`] `where` *Predicate* [`project-smart` | `project` *ColumnName*[`:` *ColumnType* `,` ... ] [`,` `pack_all()`]]\r\n* `find` *Predicate* [`project-smart` | `project` *ColumnName*[`:` *ColumnType* `,` ... ] [`,` `pack_all()`]]\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*ColumnName*| string | | By default, the output will include a column called *source_* whose values indicate which source table has contributed each row. If specified, *ColumnName* will be used instead of *source_*. After wildcard matching, if the query references tables from more than one database including the default database, the value of this column will have a table name qualified with the database. Similarly *cluster* and *database* qualifications will be present in the value if more than one cluster is referenced.|\r\n| *Predicate* | bool | ✓ | This boolean expression is evaluated for each row in each input table. For more information, see [predicate-syntax details](./findoperator.md#predicate-syntax).|\r\n| *Tables* | string | | Zero or more comma-separated table references. By default, `find` will look in all the tables in the current database. You can use:<br/>1. The name of a table, such as `Events`<br/>2. A query expression, such as `(Events | where id==42)`<br/>3. A set of tables specified with a wildcard. For example, `E*` would form the union of all the tables in the database whose names begin with `E`.|\r\n| `project-smart` or `project` | string | | If not specified, `project-smart` will be used by default. For more information, see [output-schema details](./findoperator.md#output-schema).|\r\n\r\n## Returns\r\n\r\nTransformation of rows in *Table* [`,` *Table*, ...] for which *Predicate* is `true`. The rows are transformed according to the [output schema](#output-schema).\r\n\r\n## Output schema\r\n\r\n**source_ column**\r\n\r\nThe find operator output will always include a *source_* column with the source table name. The column can be renamed using the `withsource` parameter.\r\n\r\n**results columns**\r\n\r\nSource tables that don't contain any column used by the predicate evaluation, will be filtered out.\r\n\r\nWhen you use `project-smart`, the columns that will appear in the output will be:\r\n\r\n* Columns that appear explicitly in the predicate.\r\n* Columns that are common to all the filtered tables.\r\n\r\nThe rest of the columns will be packed into a property bag and will appear in an additional `pack` column.\r\nA column that is referenced explicitly by the predicate and appears in multiple tables with multiple types, will have a different column in the result schema for each such type. Each of the column names will be constructed from the original column name and type, separated by an underscore.\r\n\r\nWhen using `project` *ColumnName*[`:` *ColumnType* `,` ... ] [`,` `pack_all()`]:\r\n\r\n* The result table will include the columns specified in the list. If a source table doesn't contain a certain column, the values in the corresponding rows will be null.\r\n* When specifying a *ColumnType* with a *ColumnName*, this column in the \"result\" will have the given type, and the values will be cast to that type if needed. The casting won't have an effect on the column type when evaluating the *Predicate*.\r\n* When `pack_all()` is used, all the columns, including the projected columns, are packed into a property bag and appear in an additional column, by default 'column1'. In the property bag, the source column name serves as the property name and the column's value serves as the property value.\r\n\r\n## Predicate syntax\r\n\r\nThe *find* operator supports an alternative syntax for the `* has` term, and using just *term*, will search a term across all input columns.\r\n\r\nFor a summary of some filtering functions, see [where operator](./whereoperator.md).\r\n\r\n## Notes\r\n\r\n* If the `project` clause references a column that appears in multiple tables and has multiple types, a type must follow this column reference in the project clause\r\n* If a column appears in multiple tables and has multiple types and `project-smart` is in use, there will be a corresponding column for each type in the `find`'s result, as described in [union](./unionoperator.md)\r\n* When you use *project-smart*, changes in the predicate, in the source tables set, or in the tables schema, may result in a change to the output schema. If a constant result schema is needed, use *project* instead\r\n* `find` scope can't include [functions](../management/functions.md). To include a function in the find scope, define a [let statement](./letstatement.md) with [view keyword](./letstatement.md).\r\n\r\n## Performance tips\r\n\r\n* Use [tables](../management/tables.md) as opposed to [tabular expressions](./tabularexpressionstatements.md).\r\nIf tabular expression, the find operator falls back to a `union` query that can result in degraded performance.\r\n* If a column that appears in multiple tables and has multiple types, is part of the project clause, prefer adding a *ColumnType* to the project clause over modifying the table before passing it to `find`.\r\n* Add time-based filters to the predicate. Use a datetime column value or [ingestion_time()](./ingestiontimefunction.md).\r\n* Search in specific columns rather than a full text search.\r\n* It's better not to reference columns that appear in multiple tables and have multiple types. If the predicate is valid when resolving such columns type for more than one type, the query will fall back to union.\r\nFor example, see [examples of cases where find will act as a union](./findoperator.md#examples-of-cases-where-find-will-act-as-union).",`### Term lookup across all tables in current database\r \r The query finds all rows from all tables in the current database in which any column includes the word \`Hernandez\`. The resulting records are transformed according to the [output schema](#output-schema). The output includes rows from the \`Customers\` table and the \`SalesTable\` table of the \`ContosoSales\` database.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAA0vLzEtRUPJILcpLzEtJrVICAAv0zUwQAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r find "Hernandez"\r \`\`\`\r \r ### Term lookup across all tables matching a name pattern in the current database\r \r The query finds all rows from all tables in the current database whose name starts with \`C\`, and in which any column includes the word \`Hernandez\`. The resulting records are transformed according to the [output schema](#output-schema). Now, the output only contains records from the \`Customers\` table.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAA0vLzEtRyMxT0HDW0lQoz0gtSlXQUshILFZQ8kgtykvMS0mtUgIA+50LFCQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r find in (C*) where * has "Hernandez"\r \`\`\`\r \r ### Term lookup across all tables in all databases in the cluster\r \r The query finds all rows from all tables in all databases in which any column includes the word \`Kusto\`.\r This query is a [cross-database](./cross-cluster-or-database-queries.md) query.\r The resulting records are transformed according to the [output schema](#output-schema).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0vLzEtRyMxT0EhJLElMSixO1VDXUtfU09JUKM9ILUpV0FLISCxWUPIuLS7JVwIAAccP5C0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r find in (database('*').*) where * has "Kusto"\r \`\`\`\r \r ### Term lookup across all tables and databases matching a name pattern in the cluster\r \r The query finds all rows from all tables whose name starts with \`K\` in all databases whose name start with \`B\` and in which any column includes the word \`Kusto\`.\r The resulting records are transformed according to the [output schema](#output-schema).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0vLzEtRyMxT0EhJLElMSixO1VAK1lLS1HPW0lQoz0gtSlXQUshILFZQ8i4tLslXAgCcXznPLwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r find in (database("S*").C*) where * has "Kusto"\r \`\`\`\r \r ### Term lookup in several clusters\r \r The query finds all rows from all tables whose name starts with \`K\` in all databases whose name start with \`B\` and in which any column includes the word \`Kusto\`.\r The resulting records are transformed according to the [output schema](#output-schema).\r \r \`\`\`\r find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))\r where * has "Kusto"\r \`\`\`\r \r ## Examples of \`find\` output results \r \r The following examples show how \`find\` can be used over two tables: *EventsTable1* and *EventsTable2*.\r Assume we have the next content of these two tables:\r \r ### EventsTable1\r \r |Session_Id|Level|EventText|Version\r |---|---|---|---|\r |acbd207d-51aa-4df7-bfa7-be70eb68f04e|Information|Some Text1|v1.0.0\r |acbd207d-51aa-4df7-bfa7-be70eb68f04e|Error|Some Text2|v1.0.0\r |28b8e46e-3c31-43cf-83cb-48921c3986fc|Error|Some Text3|v1.0.1\r |8f057b11-3281-45c3-a856-05ebb18a3c59|Information|Some Text4|v1.1.0\r \r ### EventsTable2\r \r |Session_Id|Level|EventText|EventName\r |---|---|---|---|\r |f7d5f95f-f580-4ea6-830b-5776c8d64fdd|Information|Some Other Text1|Event1\r |acbd207d-51aa-4df7-bfa7-be70eb68f04e|Information|Some Other Text2|Event2\r |acbd207d-51aa-4df7-bfa7-be70eb68f04e|Error|Some Other Text3|Event3\r |15eaeab5-8576-4b58-8fc6-478f75d8fee4|Error|Some Other Text4|Event4\r \r ### Search in common columns, project common and uncommon columns, and pack the rest \r \r \`\`\`\r find in (EventsTable1, EventsTable2) \r where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error' \r project EventText, Version, EventName, pack_all()\r \`\`\`\r \r **Output**\r \r |source_|EventText|Version|EventName|pack_\r |---|---|---|---|---|\r |EventsTable1|Some Text2|v1.0.0||{"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}\r |EventsTable2|Some Other Text3||Event3|{"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}\r \r ### Search in common and uncommon columns\r \r \`\`\`\r find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName\r \`\`\`\r \r **Output**\r \r |source_|Session_Id|EventText|Version|EventName|\r |---|---|---|---|---|\r |EventsTable1|acbd207d-51aa-4df7-bfa7-be70eb68f04e|Some Text1|v1.0.0\r |EventsTable1|acbd207d-51aa-4df7-bfa7-be70eb68f04e|Some Text2|v1.0.0\r |EventsTable2|f7d5f95f-f580-4ea6-830b-5776c8d64fdd|Some Other Text1||Event1\r \r Note: in practice, *EventsTable1* rows will be filtered with \`\`\`Version == 'v1.0.0'\`\`\` predicate and *EventsTable2* rows will be filtered with \`\`\`EventName == 'Event1'\`\`\` predicate.\r \r ### Use abbreviated notation to search across all tables in the current database\r \r \`\`\`\r find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'\r \`\`\`\r \r **Output**\r \r |source_|Session_Id|Level|EventText|pack_|\r |---|---|---|---|---|\r |EventsTable1|acbd207d-51aa-4df7-bfa7-be70eb68f04e|Information|Some Text1|{"Version":"v1.0.0"}\r |EventsTable1|acbd207d-51aa-4df7-bfa7-be70eb68f04e|Error|Some Text2|{"Version":"v1.0.0"}\r |EventsTable2|acbd207d-51aa-4df7-bfa7-be70eb68f04e|Information|Some Other Text2|{"EventName":"Event2"}\r |EventsTable2|acbd207d-51aa-4df7-bfa7-be70eb68f04e|Error|Some Other Text3|{"EventName":"Event3"}\r \r ### Return the results from each row as a property bag\r \r \`\`\`\r find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()\r \`\`\`\r \r **Output**\r \r |source_|pack_|\r |---|---|\r |EventsTable1|{"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"}\r |EventsTable1|{"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"}\r |EventsTable2|{"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"}\r |EventsTable2|{"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"}\r \r ## Examples of cases where \`find\` will act as \`union\`\r \r ### Using a non-tabular expression as find operand\r \r \`\`\`\r let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };\r find in (PartialEventsTable1, EventsTable2) \r where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'\r \`\`\`\r \r ### Referencing a column that appears in multiple tables and has multiple types\r \r Assume we've created two tables by running:\r \r \`\`\`\r .create tables \r Table1 (Level:string, Timestamp:datetime, ProcessId:string),\r Table2 (Level:string, Timestamp:datetime, ProcessId:int64)\r \`\`\`\r \r * The following query will be executed as \`union\`.\r \r \r \r \`\`\`\r find in (Table1, Table2) where ProcessId == 1001\r \`\`\`\r \r The output result schema will be *(Level:string, Timestamp, ProcessId_string, ProcessId_int)*.\r \r * The following query will also be executed as \`union\`, but will produce a different result schema.\r \r \r \r \`\`\`\r find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string \r \`\`\`\r \r The output result schema will be *(Level:string, Timestamp, ProcessId_string)*`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/findoperator","findoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"fork","Runs multiple consumer operators in parallel.","## Syntax\r\n\r\n*T* `|` `fork` [*name*`=`]`(`*subquery*`)` [*name*`=`]`(`*subquery*`)` ...\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *subquery* | string | ✓ | A downstream pipeline of [supported query operators](#supported-query-operators).|\r\n| *name* | string | | A temporary name for the subquery result table.|\r\n\r\n> [!NOTE]\r\n>\r\n> * Avoid using `fork` with a single *subquery*.\r\n> * The name of the results tab will be the same name as provided with the `name` parameter or the [`as` operator](asoperator.md).\r\n\r\n### Supported query operators\r\n\r\n* [`as`](asoperator.md)\r\n* [`count`](countoperator.md)\r\n* [`extend`](extendoperator.md)\r\n* [`parse`](parseoperator.md)\r\n* [`where`](whereoperator.md)\r\n* [`take`](takeoperator.md)\r\n* [`project`](projectoperator.md)\r\n* [`project-away`](projectawayoperator.md)\r\n* [`project-keep`](project-keep-operator.md)\r\n* [`project-rename`](projectrenameoperator.md)\r\n* [`project-reorder`](projectreorderoperator.md)\r\n* [`summarize`](summarizeoperator.md)\r\n* [`top`](topoperator.md)\r\n* [`top-nested`](topnestedoperator.md)\r\n* [`sort`](./sort-operator.md)\r\n* [`mv-expand`](mvexpandoperator.md)\r\n* [`reduce`](reduceoperator.md)\r\n\r\n## Returns\r\n\r\nMultiple result tables, one for each of the *subquery* arguments.\r\n\r\n## Tips\r\n\r\n* Use [`materialize`](materializefunction.md) as a replacement for [`join`](joinoperator.md) or [`union`](unionoperator.md) on fork legs. The input stream will be cached by materialize and then the cached expression can be used in join/union legs.\r\n* Use [batch](batches.md) with [`materialize`](materializefunction.md) of tabular expression statements instead of the `fork` operator.",`### Unnamed subqueries\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVQguSSxJVbC1VVBy8/EP8nRxVALJpeUXZfNyKQCBBlSdS2piSUaxS2ZRanKJgjaU65mXAhGwUzDURFXvmZdVWpSZitABE0DRAwCWU8oSkwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State == "FLORIDA"\r | fork\r ( where DeathsDirect + DeathsIndirect > 1)\r ( where InjuriesDirect + InjuriesIndirect > 1)\r \`\`\`\r \r ### Named subqueries\r \r In the following examples, the result tables will be named "StormsWithDeaths" and "StormsWithInjuries".\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVQguSSxJVbC1VVBy8/EP8nRxVALJpeUXZfNyKQCBBkSZS2piSUaxS2ZRanKJgjaU65mXAhGwUzBUqFFILAaaBrSiODyzJAOiQhPFEM+8rNKizFSEMTABfAbB1GgCAM0zVJu/AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State == "FLORIDA"\r | fork\r (where DeathsDirect + DeathsIndirect > 1 | as StormsWithDeaths)\r (where InjuriesDirect + InjuriesIndirect > 1 | as StormsWithInjuries)\r \`\`\`\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVQguSSxJVbC1VVBy8/EP8nRxVALJpeUXZfNyKQBBMEhTcXhmSYZLamJJRrGCrYIGRCeE75JZlJpcoqAN5XrmpUAE7BQMNdFN8MzLKi3KTEUyAyYCNwUmgGIOAGODP2W5AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State == "FLORIDA"\r | fork\r StormsWithDeaths = (where DeathsDirect + DeathsIndirect > 1)\r StormsWithInjuries = (where InjuriesDirect + InjuriesIndirect > 1)\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/forkoperator","forkoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"format_bytes","Formats a number as a string representing data size in bytes.","## Syntax\r\n\r\n`format_bytes(`*size* [`,` *precision* [`,` *units*]]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *size* | real | ✓ | The value to be formatted as data size in bytes.|\r\n| *precision* | int | | The number of digits the value will be rounded to after the decimal point. The default is 0.|\r\n| *units* | string | | The units of the target data size: `Bytes`, `KB`, `MB`, `GB`, `TB`, or `PB`. If this parameter is empty, the units will be auto-selected based on input value.|\r\n\r\n## Returns\r\n\r\nA string of *size* formatted as data size in bytes.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUeAqM1SwVUjLL8pNLIlPqixJLdYwNTPR1OEqM0IXNzQwNjbSUTAESRqjSxoZGIDlQZImuCR1FMDyprjlDXQUlLydlDQBI/ZQzZ0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print \r v1 = format_bytes(564),\r v2 = format_bytes(10332, 1),\r v3 = format_bytes(20010332),\r v4 = format_bytes(20010332, 2),\r v5 = format_bytes(20010332, 0, "KB")\r \`\`\`\r \r **Output**\r \r |v1|v2|v3|v4|v5|\r |---|---|---|---|---|\r |564 Bytes|10.1 KB|19 MB|19.08 MB|19541 KB|\r \r ## See also\r \r * [Estimate table size](../management/estimate-table-size.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/format-bytesfunction","format-bytesfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"format_datetime","Formats a datetime according to the provided format.","## Syntax\r\n\r\n`format_datetime(`*date* `,` *format*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *date* | datetime | ✓ | The value to format.|\r\n| *format* | string | ✓| The output format comprised of one or more of the [supported format elements](#supported-format-elements).\r\n\r\n### Supported format elements\r\n\r\nThe *format* parameter should include one or more of the following elements:\r\n\r\n|Format specifier| Description| Examples|\r\n|--|--|--|\r\n|`d`| The day of the month, from 1 through 31.| 2009-06-01T13:45:30 -> 1, 2009-06-15T13:45:30 -> 15\r\n|`dd`| The day of the month, from 01 through 31.| 2009-06-01T13:45:30 -> 01, 2009-06-15T13:45:30 -> 15\r\n|`f`| The tenths of a second in a date and time value.| 2009-06-15T13:45:30.6170000 -> 6, 2009-06-15T13:45:30.05 -> 0\r\n|`ff`| The hundredths of a second in a date and time value.| 2009-06-15T13:45:30.6170000 -> 61, 2009-06-15T13:45:30.0050000 -> 00\r\n|`fff`| The milliseconds in a date and time value.| 6/15/2009 13:45:30.617 -> 617, 6/15/2009 13:45:30.0005 -> 000\r\n|`ffff`| The ten thousandths of a second in a date and time value.| 2009-06-15T13:45:30.6175000 -> 6175, 2009-06-15T13:45:30.0000500 -> 0000\r\n|`fffff`| The hundred thousandths of a second in a date and time value. |2009-06-15T13:45:30.6175400 -> 61754, 2009-06-15T13:45:30.000005 -> 00000\r\n|`ffffff`| The millionths of a second in a date and time value.| 2009-06-15T13:45:30.6175420 -> 617542, 2009-06-15T13:45:30.0000005 -> 000000\r\n|`fffffff`| The ten millionths of a second in a date and time value.| 2009-06-15T13:45:30.6175425 -> 6175425, 2009-06-15T13:45:30.0001150 -> 0001150\r\n|`F`| If non-zero, the tenths of a second in a date and time value.| 2009-06-15T13:45:30.6170000 -> 6, 2009-06-15T13:45:30.0500000 -> (no output)\r\n|`FF`| If non-zero, the hundredths of a second in a date and time value.| 2009-06-15T13:45:30.6170000 -> 61, 2009-06-15T13:45:30.0050000 -> (no output)\r\n|`FFF`| If non-zero, the milliseconds in a date and time value.| 2009-06-15T13:45:30.6170000 -> 617, 2009-06-15T13:45:30.0005000 -> (no output)\r\n|`FFFF`| If non-zero, the ten thousandths of a second in a date and time value.|2009-06-15T13:45:30.5275000 -> 5275, 2009-06-15T13:45:30.0000500 -> (no output)\r\n|`FFFFF`| If non-zero, the hundred thousandths of a second in a date and time value.| 2009-06-15T13:45:30.6175400 -> 61754, 2009-06-15T13:45:30.0000050 -> (no output)\r\n|`FFFFFF`| If non-zero, the millionths of a second in a date and time value.| 2009-06-15T13:45:30.6175420 -> 617542, 2009-06-15T13:45:30.0000005 -> (no output)\r\n|`FFFFFFF`| If non-zero, the ten millionths of a second in a date and time value.| 2009-06-15T13:45:30.6175425 -> 6175425, 2009-06-15T13:45:30.0001150 -> 000115\r\n|`h`| The hour, using a 12-hour clock from 1 to 12.| 2009-06-15T01:45:30 -> 1, 2009-06-15T13:45:30 -> 1\r\n|`hh`| The hour, using a 12-hour clock from 01 to 12.| 2009-06-15T01:45:30 -> 01, 2009-06-15T13:45:30 -> 01\r\n|`H`| The hour, using a 24-hour clock from 0 to 23.| 2009-06-15T01:45:30 -> 1, 2009-06-15T13:45:30 -> 13\r\n|`HH`| The hour, using a 24-hour clock from 00 to 23.| 2009-06-15T01:45:30 -> 01, 2009-06-15T13:45:30 -> 13\r\n|`m`| The minute, from 0 through 59.| 2009-06-15T01:09:30 -> 9, 2009-06-15T13:29:30 -> 29\r\n|`mm`| The minute, from 00 through 59.| 2009-06-15T01:09:30 -> 09, 2009-06-15T01:45:30 -> 45\r\n|`M`| The month, from 1 through 12.| 2009-06-15T13:45:30 -> 6\r\n|`MM`| The month, from 01 through 12.| 2009-06-15T13:45:30 -> 06\r\n|`s`| The second, from 0 through 59.| 2009-06-15T13:45:09 -> 9\r\n|`ss`| The second, from 00 through 59.| 2009-06-15T13:45:09 -> 09\r\n|`y`| The year, from 0 to 99.| 0001-01-01T00:00:00 -> 1, 0900-01-01T00:00:00 -> 0, 1900-01-01T00:00:00 -> 0, 2009-06-15T13:45:30 -> 9, 2019-06-15T13:45:30 -> 19\r\n|`yy`| The year, from 00 to 99.| 0001-01-01T00:00:00 -> 01, 0900-01-01T00:00:00 -> 00, 1900-01-01T00:00:00 -> 00, 2019-06-15T13:45:30 -> 19\r\n|`yyyy`| The year as a four-digit number.| 0001-01-01T00:00:00 -> 0001, 0900-01-01T00:00:00 -> 0900, 1900-01-01T00:00:00 -> 1900, 2009-06-15T13:45:30 -> 2009\r\n|`tt`| AM / PM hours| 2009-06-15T13:45:09 -> PM\r\n\r\n### Supported delimiters\r\n\r\nThe format specifier can include the following delimiters:\r\n\r\n|Delimiter|Comment|\r\n|---------|-------|\r\n|`' '`| Space|\r\n|`'/'`||\r\n|`'-'`|Dash|\r\n|`':'`||\r\n|`','`||\r\n|`'.'`||\r\n|`'_'`||\r\n|`'['`||\r\n|`']'`||\r\n\r\n## Returns\r\n\r\nA string with *date* formatted as specified by *format*.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFIKVGwVUhJLEktycxN1TAyMDTXNTDUNbJUMLC0MjCwMjDVtOYqKMrMK1HgKjO0Tcsvyk0siYerTynRUa+s1PX11U1JUYj28LDKzbUqLo5V19QBKjfCplwBqB6kA6IBoZ6rzBiXcpjxGRkQ5QolJUAdAJCyrq29AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let dt = datetime(2017-01-29 09:00:05);\r print \r v1=format_datetime(dt,'yy-MM-dd [HH:mm:ss]'), \r v2=format_datetime(dt, 'yyyy-M-dd [H:mm:ss]'),\r v3=format_datetime(dt, 'yy-MM-dd [hh:mm:ss tt]')\r \`\`\`\r \r **Output**\r \r |v1|v2|v3|\r |--|--|--|\r |17-01-29 [09:00:05]|2017-1-29 [9:00:05]|17-01-29 [09:00:05 AM]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/format-datetimefunction","format-datetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"format_ipv4","Parses the input with a netmask and returns a string representing the IPv4 address.",`## Syntax\r \r \`format_ipv4(\`*ip* [\`,\` *prefix*\`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip* | string | ✓ | The IPv4 address. The format may be a string or number representation in big-endian order.|\r | *prefix* | int | | An integer from 0 to 32 representing the number of most-significant bits that are taken into account. If unspecified, all 32 bit-masks are used.|\r \r ## Returns\r \r If conversion is successful, the result will be a string representing IPv4 address.\r If conversion isn't successful, the result will be an empty string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcSUlKLU4mKr4pKizLx0HYXcxOJsq5z8vHRNrmguBXVDSyM9QzMLPUM9Q3UdBSMTHQU4wJA1NsIpq29kgqIAmyzIUg1dQ00dBa5YrhqF1IqS1LwUBaDjSnNKFGwV0vKLchNL4jMLykxgjoa4FqQBbi1EeTxIHFUPWAhNIwAom5ZMBgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(address:string, mask:long)\r [\r '192.168.1.1', 24, \r '192.168.1.1', 32, \r '192.168.1.1/24', 32, \r '192.168.1.1/24', long(-1), \r ]\r | extend result = format_ipv4(address, mask), \r result_mask = format_ipv4_mask(address, mask)\r \`\`\`\r \r **Output**\r \r |address|mask|result|result_mask|\r |---|---|---|---|\r |192.168.1.1|24|192.168.1.0|192.168.1.0/24|\r |192.168.1.1|32|192.168.1.1|192.168.1.1/32|\r |192.168.1.1/24|32|192.168.1.0|192.168.1.0/24|\r |192.168.1.1/24|-1|||\r \r ## See also\r \r * For IPv4 address formatting including CIDR notation, see [format_ipv4_mask()](format-ipv4-mask-function.md).\r * For a list of functions related to IP addresses, see [IPv4 and IPv6 functions](scalarfunctions.md#ipv4ipv6-functions).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/format-ipv4-function","format-ipv4-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"format_ipv4_mask","Parses the input with a netmask and returns a string representing the IPv4 address in CIDR notation.",`## Syntax\r \r \`format_ipv4_mask(\`*ip* [\`,\` *prefix*\`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip* | string | ✓ | The IPv4 address as CIDR notation. The format may be a string or number representation in big-endian order.|\r | *prefix* | int | | An integer from 0 to 32 representing the number of most-significant bits that are taken into account. If unspecified, all 32 bit-masks are used.|\r \r ## Returns\r \r If conversion is successful, the result will be a string representing IPv4 address as CIDR notation.\r If conversion isn't successful, the result will be an empty string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcSUlKLU4mKr4pKizLx0HYXcxOJsq5z8vHRNrmguBXVDSyM9QzMLPUM9Q3UdBSMTHQU4wJA1NsIpq29kgqIAmyzIUg1dQ00dBa5YrhqF1IqS1LwUBaDjSnNKFGwV0vKLchNL4jMLykxgjoa4FqQBbi1EeTxIHFUPWAhNIwAom5ZMBgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(address:string, mask:long)\r [\r '192.168.1.1', 24, \r '192.168.1.1', 32, \r '192.168.1.1/24', 32, \r '192.168.1.1/24', long(-1), \r ]\r | extend result = format_ipv4(address, mask), \r result_mask = format_ipv4_mask(address, mask)\r \`\`\`\r \r **Output**\r \r |address|mask|result|result_mask|\r |---|---|---|---|\r |192.168.1.1|24|192.168.1.0|192.168.1.0/24|\r |192.168.1.1|32|192.168.1.1|192.168.1.1/32|\r |192.168.1.1/24|32|192.168.1.0|192.168.1.0/24|\r |192.168.1.1/24|-1|||\r \r ## See also\r \r * For IPv4 address formatting without CIDR notation, see [format_ipv4()](format-ipv4-function.md).\r * For a list of functions related to IP addresses, see [IPv4 and IPv6 functions](scalarfunctions.md#ipv4ipv6-functions).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/format-ipv4-mask-function","format-ipv4-mask-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"format_timespan","Formats a timespan according to the provided format.","## Syntax\r\n\r\n`format_timespan(`*timespan* `,` *format*`)`\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *timespan* | timespan | ✓ | The value to format.|\r\n| *format* | string | ✓| The output format comprised of one or more of the [supported format elements](#supported-format-elements).\r\n\r\n### Supported format elements\r\n\r\n|Format specifier| Description| Examples\r\n|---|---|---\r\n|`d`-`dddddddd`| The number of whole days in the time interval. Padded with zeros if needed.| 15.13:45:30: d -> 15, dd -> 15, ddd -> 015\r\n|`f`| The tenths of a second in the time interval.| 15.13:45:30.6170000 -> 6, 15.13:45:30.05 -> 0\r\n|`ff`| The hundredths of a second in the time interval.| 15.13:45:30.6170000 -> 61, 15.13:45:30.0050000 -> 00\r\n|`fff`| The milliseconds in the time interval.| 6/15/2009 13:45:30.617 -> 617, 6/15/2009 13:45:30.0005 -> 000\r\n|`ffff`| The ten thousandths of a second in the time interval.| 15.13:45:30.6175000 -> 6175, 15.13:45:30.0000500 -> 0000\r\n|`fffff`| The hundred thousandths of a second in the time interval.| 15.13:45:30.6175400 -> 61754, 15.13:45:30.000005 -> 00000\r\n|`ffffff`| The millionths of a second in the time interval.| 15.13:45:30.6175420 -> 617542, 15.13:45:30.0000005 -> 000000\r\n|`fffffff`| The ten millionths of a second in the time interval.| 15.13:45:30.6175425 -> 6175425, 15.13:45:30.0001150 -> 0001150\r\n|`F`| If non-zero, the tenths of a second in the time interval.| 15.13:45:30.6170000 -> 6, 15.13:45:30.0500000 -> (no output)\r\n|`FF`| If non-zero, the hundredths of a second in the time interval.| 15.13:45:30.6170000 -> 61, 15.13:45:30.0050000 -> (no output)\r\n|`FFF`| If non-zero, the milliseconds in the time interval.| 15.13:45:30.6170000 -> 617, 15.13:45:30.0005000 -> (no output)\r\n|`FFFF`| If non-zero, the ten thousandths of a second in the time interval. |15.13:45:30.5275000 -> 5275, 15.13:45:30.0000500 -> (no output)\r\n|`FFFFF`| If non-zero, the hundred thousandths of a second in the time interval.| 15.13:45:30.6175400 -> 61754, 15.13:45:30.0000050 -> (no output)\r\n|`FFFFFF`| If non-zero, the millionths of a second in the time interval.| 15.13:45:30.6175420 -> 617542, 15.13:45:30.0000005 -> (no output)\r\n|`FFFFFFF`| If non-zero, the ten millionths of a second in the time interval.| 15.13:45:30.6175425 -> 6175425, 15.13:45:30.0001150 -> 000115\r\n|`H`| The hour, using a 24-hour clock from 0 to 23.| 15.01:45:30 -> 1, 15.13:45:30 -> 13\r\n|`HH`| The hour, using a 24-hour clock from 00 to 23.| 15.01:45:30 -> 01, 15.13:45:30 -> 13\r\n|`m`| The number of whole minutes in the time interval that aren't included as part of hours or days. Single-digit minutes don't have a leading zero.| 15.01:09:30 -> 9, 15.13:29:30 -> 29\r\n|`mm`| The number of whole minutes in the time interval that aren't included as part of hours or days. Single-digit minutes have a leading zero.| 15.01:09:30 -> 09, 15.01:45:30 -> 45\r\n|`s`| The number of whole seconds in the time interval that aren't included as part of hours, days, or minutes. Single-digit seconds don't have a leading zero.| 15.13:45:09 -> 9\r\n|`ss`|The number of whole seconds in the time interval that aren't included as part of hours, days, or minutes. Single-digit seconds have a leading zero.| 15.13:45:09 -> 09\r\n\r\n### Supported delimiters\r\n\r\nThe format specifier can include following delimiters:\r\n\r\n|Delimiter|Comment|\r\n|---------|-------|\r\n|`' '`| Space|\r\n|`'/'`||\r\n|`'-'`|Dash|\r\n|`':'`||\r\n|`','`||\r\n|`'.'`||\r\n|`'_'`||\r\n|`'['`||\r\n|`']'`||\r\n\r\n## Returns\r\n\r\nA string with *timespan* formatted as specified by *format*.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoUbBVKMnMTdUwstQzsLQyMLAyMNUzNDI2MdW05iooyswrUeAqM7RNyy/KTSyJB6ksLkjM0yjRUVBPSdHLyLDKzbUqLrZyc1PX1OEqM8KhEKgSolAhOg0CYtU1AcM/CQ1/AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let t = time(29.09:00:05.12345);\r print \r v1=format_timespan(t, 'dd.hh:mm:ss:FF'),\r v2=format_timespan(t, 'ddd.h:mm:ss [fffffff]')\r \`\`\`\r \r **Output**\r \r |v1|v2|\r |---|---|\r |29.09:00:05:12|029.9:00:05 [1234500]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/format-timespanfunction","format-timespanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"funnel_sequence","Calculates distinct count of users who have taken a sequence of states, and the distribution of previous/next states that have led to/were followed by the sequence. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*T* `| evaluate` `funnel_sequence(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *MaxSequenceStepWindow*, *Step*, *StateColumn*, *Sequence*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The input tabular expression. |\r\n| *IdColum* | string | ✓ | The column reference representing the ID. This column must be present in *T*.|\r\n| *TimelineColumn* | string | ✓ | The column reference representing the timeline. This column must be present in *T*.|\r\n| *Start* | datetime, timespan, or long | ✓ | The analysis start period.|\r\n| *End* | datetime, timespan, or long | ✓ | The analysis end period.|\r\n| *MaxSequenceStepWindow* | datetime, timespan, or long | ✓ | The value of the max allowed timespan between two sequential steps in the sequence.|\r\n| *Step* | datetime, timespan, or long | ✓ | The analysis step period, or bin. |\r\n| *StateColumn* | string | ✓ | The column reference representing the state. This column must be present in *T*.|\r\n| *Sequence* | dynamic | ✓ | An array with the sequence values that are looked up in `StateColumn`.|\r\n\r\n## Returns\r\n\r\nReturns three output tables, which are useful for constructing a sankey diagram for the analyzed sequence:\r\n\r\n* Table #1 - prev-sequence-next `dcount`\r\n * TimelineColumn: the analyzed time window\r\n * prev: the prev state (may be empty if there were any users that only had events for the searched sequence, but not any events prior to it).\r\n * next: the next state (may be empty if there were any users that only had events for the searched sequence, but not any events that followed it).\r\n * `dcount`: distinct count of `IdColumn` in time window that transitioned `prev` --> `Sequence` --> `next`.\r\n * samples: an array of IDs (from `IdColumn`) corresponding to the row's sequence (a maximum of 128 IDs are returned).\r\n* Table #2 - prev-sequence `dcount`\r\n * TimelineColumn: the analyzed time window\r\n * prev: the prev state (may be empty if there were any users that only had events for the searched sequence, but not any events prior to it).\r\n * `dcount`: distinct count of `IdColumn` in time window that transitioned `prev` --> `Sequence` --> `next`.\r\n * samples: an array of IDs (from `IdColumn`) corresponding to the row's sequence (a maximum of 128 IDs are returned).\r\n* Table #3 - sequence-next `dcount`\r\n * TimelineColumn: the analyzed time window\r\n * next: the next state (may be empty if there were any users that only had events for the searched sequence, but not any events that followed it).\r\n * `dcount`: distinct count of `IdColumn` in time window that transitioned `prev` --> `Sequence` --> `next`.\r\n * samples: an array of IDs (from `IdColumn`) corresponding to the row's sequence (a maximum of 128 IDs are returned).",`### Exploring storm events\r \r The following query looks at the table StormEvents (weather statistics for 2007) and shows which events happened before/after all Tornado events occurred in 2007.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12OuwrCQBBFe79iOhOI5CE+SGNlIdiIAQsRGbMTXUxm4+5EEPx4VxFRYYrhcC73xjEsjTlrPoJhWIuxzfxKLA6coGgnunQ59OIYVmkOmxMKnLBtiR0cqDKWoDCWURmgZ2z2MrM/Eysh+y9+dfXuHmLdoRBUHTPVe0eXjrikYN5qZxQtVOTXoZVCNxSB8qr4L8iSZDJIUn/hL51+aKqi4Xjk86+y4tY+8zfGRpfBtv9e1d+F4QP9Gyd+DAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r // Looking on StormEvents statistics: \r // Q1: What happens before Tornado event?\r // Q2: What happens after Tornado event?\r StormEvents\r | evaluate funnel_sequence(EpisodeId, StartTime, datetime(2007-01-01), datetime(2008-01-01), 1d,365d, EventType, dynamic(['Tornado']))\r \`\`\`\r \r Result includes three tables:\r \r * Table #1: All possible variants of what happened before and after the sequence. For example, the second line means that there were 87 different events that had following sequence: \`Hail\` -> \`Tornado\` -> \`Hail\`\r \r \r |\`StartTime\`|\`prev\`|\`next\`|\`dcount\`|\r |---|---|---|---|\r |2007-01-01 00:00:00.0000000|||293|\r |2007-01-01 00:00:00.0000000|Hail|Hail|87|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|Thunderstorm Wind|77|\r |2007-01-01 00:00:00.0000000|Hail|Thunderstorm Wind|28|\r |2007-01-01 00:00:00.0000000|Hail||28|\r |2007-01-01 00:00:00.0000000||Hail|27|\r |2007-01-01 00:00:00.0000000||Thunderstorm Wind|25|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|Hail|24|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind||24|\r |2007-01-01 00:00:00.0000000|Flash Flood|Flash Flood|12|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|Flash Flood|8|\r |2007-01-01 00:00:00.0000000|Flash Flood||8|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|Thunderstorm Wind|6|\r |2007-01-01 00:00:00.0000000||Funnel Cloud|6|\r |2007-01-01 00:00:00.0000000||Flash Flood|6|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|Funnel Cloud|6|\r |2007-01-01 00:00:00.0000000|Hail|Flash Flood|4|\r |2007-01-01 00:00:00.0000000|Flash Flood|Thunderstorm Wind|4|\r |2007-01-01 00:00:00.0000000|Hail|Funnel Cloud|4|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|Hail|4|\r |2007-01-01 00:00:00.0000000|Funnel Cloud||4|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|Funnel Cloud|3|\r |2007-01-01 00:00:00.0000000|Heavy Rain|Thunderstorm Wind|2|\r |2007-01-01 00:00:00.0000000|Flash Flood|Funnel Cloud|2|\r |2007-01-01 00:00:00.0000000|Flash Flood|Hail|2|\r |2007-01-01 00:00:00.0000000|Strong Wind|Thunderstorm Wind|1|\r |2007-01-01 00:00:00.0000000|Heavy Rain|Flash Flood|1|\r |2007-01-01 00:00:00.0000000|Heavy Rain|Hail|1|\r |2007-01-01 00:00:00.0000000|Hail|Flood|1|\r |2007-01-01 00:00:00.0000000|Lightning|Hail|1|\r |2007-01-01 00:00:00.0000000|Heavy Rain|Lightning|1|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|Heavy Rain|1|\r |2007-01-01 00:00:00.0000000|Flash Flood|Flood|1|\r |2007-01-01 00:00:00.0000000|Flood|Flash Flood|1|\r |2007-01-01 00:00:00.0000000||Heavy Rain|1|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|Lightning|1|\r |2007-01-01 00:00:00.0000000|Lightning|Thunderstorm Wind|1|\r |2007-01-01 00:00:00.0000000|Flood|Thunderstorm Wind|1|\r |2007-01-01 00:00:00.0000000|Hail|Lightning|1|\r |2007-01-01 00:00:00.0000000||Lightning|1|\r |2007-01-01 00:00:00.0000000|Tropical Storm|Hurricane (Typhoon)|1|\r |2007-01-01 00:00:00.0000000|Coastal Flood||1|\r |2007-01-01 00:00:00.0000000|Rip Current||1|\r |2007-01-01 00:00:00.0000000|Heavy Snow||1|\r |2007-01-01 00:00:00.0000000|Strong Wind||1|\r \r * Table #2: shows all distinct events grouped by the previous event. For example, the second line shows that there were a total of 150 events of \`Hail\` that happened just before \`Tornado\`.\r \r \r |\`StartTime\`|\`prev\`|\`dcount\`|\r |---------|-----|------|\r |2007-01-01 00:00:00.0000000||331|\r |2007-01-01 00:00:00.0000000|Hail|150|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|135|\r |2007-01-01 00:00:00.0000000|Flash Flood|28|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|22|\r |2007-01-01 00:00:00.0000000|Heavy Rain|5|\r |2007-01-01 00:00:00.0000000|Flood|2|\r |2007-01-01 00:00:00.0000000|Lightning|2|\r |2007-01-01 00:00:00.0000000|Strong Wind|2|\r |2007-01-01 00:00:00.0000000|Heavy Snow|1|\r |2007-01-01 00:00:00.0000000|Rip Current|1|\r |2007-01-01 00:00:00.0000000|Coastal Flood|1|\r |2007-01-01 00:00:00.0000000|Tropical Storm|1|\r \r * Table #3: shows all distinct events grouped by next event. For example, the second line shows that there were a total of 143 events of \`Hail\` that happened after \`Tornado\`.\r \r \r |\`StartTime\`|\`next\`|\`dcount\`|\r |---------|-----|------|\r |2007-01-01 00:00:00.0000000||332|\r |2007-01-01 00:00:00.0000000|Hail|145|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|143|\r |2007-01-01 00:00:00.0000000|Flash Flood|32|\r |2007-01-01 00:00:00.0000000|Funnel Cloud|21|\r |2007-01-01 00:00:00.0000000|Lightning|4|\r |2007-01-01 00:00:00.0000000|Heavy Rain|2|\r |2007-01-01 00:00:00.0000000|Flood|2|\r |2007-01-01 00:00:00.0000000|Hurricane (Typhoon)|1|\r \r Now, let's try to find out how the following sequence continues: \r \`Hail\` -> \`Tornado\` -> \`Thunderstorm Wind\`\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRSC1LzClNLElVSCvNy0vNiS9OLSxNzUtO1eBSQAWuBZnF+Smpnik66DLBJYlFJSGZuakYMilAg0uAEhpGBgbmugaGQKSJV5EFLkWGmNYam5liCoL9FVJZkKqjgGFPZV5ibmayRrS6R2JmjrqOgnpIflFeYko+mJlRmpeSWlQMChuF8My8FPVYTWQDNAHldk1eNgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | evaluate funnel_sequence(\r EpisodeId,\r StartTime,\r datetime(2007-01-01),\r datetime(2008-01-01),\r 1d,\r 365d,\r EventType, \r dynamic(['Hail', 'Tornado', 'Thunderstorm Wind'])\r )\r \`\`\`\r \r Skipping \`Table #1\` and \`Table #2\`, and looking at \`Table #3\`, we can conclude that sequence \`Hail\` -> \`Tornado\` -> \`Thunderstorm Wind\` in 92 events ended with this sequence, continued as \`Hail\` in 41 events, and turned back to \`Tornado\` in 14.\r \r |\`StartTime\`|\`next\`|\`dcount\`|\r |---------|-----|------|\r |2007-01-01 00:00:00.0000000||92|\r |2007-01-01 00:00:00.0000000|Hail|41|\r |2007-01-01 00:00:00.0000000|Tornado|14|\r |2007-01-01 00:00:00.0000000|Flash Flood|11|\r |2007-01-01 00:00:00.0000000|Lightning|2|\r |2007-01-01 00:00:00.0000000|Heavy Rain|1|\r |2007-01-01 00:00:00.0000000|Flood|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/funnel-sequence-plugin","funnel-sequence-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"funnel_sequence_completion","Calculates a funnel of completed sequence steps while comparing different time periods. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*T* `| evaluate` `funnel_sequence_completion(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *BinSize*`,` *StateColumn*`,` *Sequence*`,` *MaxSequenceStepWindows*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The input tabular expression. |\r\n| *IdColum* | string | ✓ | The column reference representing the ID. The column must be present in *T*.|\r\n| *TimelineColumn* | string | ✓ | The column reference representing the timeline. The column must be present in *T*.|\r\n| *Start* | datetime, timespan, or long | ✓ | The analysis start period.|\r\n| *End* | datetime, timespan, or long | ✓ | The analysis end period.|\r\n| *BinSize* | datetime, timespan, or long | ✓ | The analysis window size. Each window is analyzed separately.|\r\n| *StateColumn* | string | ✓ | The column reference representing the state. The column must be present in *T*.|\r\n| *Sequence* | dynamic | ✓ | An array with the sequence values that are looked up in `StateColumn`.|\r\n| *MaxSequenceStepPeriods* | dynamic | ✓ | An array with the values of the max allowed timespan between the first and last sequential steps in the sequence. Each period in the array generates a funnel analysis result.|\r\n\r\n## Returns\r\n\r\nReturns a single table useful for constructing a funnel diagram for the analyzed sequence:\r\n\r\n* `TimelineColumn`: the analyzed time window (bin), each bin in the analysis timeframe (*Start* to *End*) generates a funnel analysis separately.\r\n* `StateColumn`: the state of the sequence.\r\n* `Period`: the maximal period allowed for completing steps in the funnel sequence measured from the first step in the sequence. Each value in *MaxSequenceStepPeriods* generates a funnel analysis with a separate period.\r\n* `dcount`: distinct count of `IdColumn` in time window that transitioned from first sequence state to the value of `StateColumn`.",`### Exploring Storm Events\r \r The following query checks the completion funnel of the sequence: \`Hail\` -> \`Tornado\` -> \`Thunderstorm Wind\`\r in "overall" time of 1hour, 4hours, 1day.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WQywrCMBBF937F7FohQusbxKWg6xZciEjojBhIJzVJFcWPNylVFBIIw8nh3tHk4eS8tB7WgNKTVzWl4yxbjLI8nOFqoCNCjAH4I5b/xF0xmnuhnhTAyXyG/dzRtSWu4hQfLGtVpYdkK5VOBCSlsSzRdM9Ly0jWeWNr2AdZcvyoG7LKoPs15BcB03BzjFQRP21uxN4NXkA3qdsQFM4tM+lvglNl6iYIleF00yhnkHYooIjty1BK9JsQXV3xW0lAZy8fTUf1QvGNNnwDOQRUXkgBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let _start = datetime(2007-01-01);\r let _end = datetime(2008-01-01);\r let _windowSize = 365d;\r let _sequence = dynamic(['Hail', 'Tornado', 'Thunderstorm Wind']);\r let _periods = dynamic([1h, 4h, 1d]);\r StormEvents\r | evaluate funnel_sequence_completion(EpisodeId, StartTime, _start, _end, _windowSize, EventType, _sequence, _periods) \r \`\`\`\r \r **Output**\r \r |\`StartTime\`|\`EventType\`|\`Period\`|\`dcount\`|\r |---|---|---|---|\r |2007-01-01 00:00:00.0000000|Hail|01:00:00|2877|\r |2007-01-01 00:00:00.0000000|Tornado|01:00:00|208|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|01:00:00|87|\r |2007-01-01 00:00:00.0000000|Hail|04:00:00|2877|\r |2007-01-01 00:00:00.0000000|Tornado|04:00:00|231|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|04:00:00|141|\r |2007-01-01 00:00:00.0000000|Hail|1.00:00:00|2877|\r |2007-01-01 00:00:00.0000000|Tornado|1.00:00:00|244|\r |2007-01-01 00:00:00.0000000|Thunderstorm Wind|1.00:00:00|155|\r \r Understanding the results: \r The outcome is three funnels (for periods: One hour, 4 hours, and one day). For each funnel step, a number of distinct counts of are shown. You can see that the more time is given to complete the whole sequence of \`Hail\` -> \`Tornado\` -> \`Thunderstorm Wind\`, the higher \`dcount\` value is obtained. In other words, there were more occurrences of the sequence reaching the funnel step.\r \r ## See also\r \r * [scan operator](scan-operator.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/funnel-sequence-completion-plugin","funnel-sequence-completion-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"gamma","Computes the gamma function for the provided *number*.",`## Syntax\r \r \`gamma(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | real | ✓ | The number used to calculate the gamma function. |\r \r ## Returns\r \r Gamma function of *number*.\r \r ## See also\r \r For computing log-gamma function, see [loggamma()](loggammafunction.md).`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/gammafunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_distance_2points","Calculates the shortest distance in meters between two geospatial coordinates on Earth.",`## Syntax\r \r \`geo_distance_2points(\`*p1_longitude*\`,\`*p1_latitude*\`,\`*p2_longitude*\`,\`*p2_latitude*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*p1_longitude*| real | ✓ | The longitude value in degrees of the first geospatial coordinate. A valid value is in the range [-180, +180].|\r |*p1_latitude*| real | ✓ | The latitude value in degrees of the first geospatial coordinate. A valid value is in the range [-90, +90].|\r |*p2_longitude*| real | ✓ | The longitude value in degrees of the second geospatial coordinate. A valid value is in the range [-180, +180].|\r |*p2_latitude*| real | ✓ | The latitude value in degrees of the second geospatial coordinate. A valid value is in the range [-90, +90].|\r \r ## Returns\r \r The shortest distance, in meters, between two geographic locations on Earth. If the coordinates are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere.`,`The following example finds the shortest distance between Seattle and Los Angeles.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz3KQQqAIBBA0avMskBFJ8exRWeRKAkXqaj3J1ctP+/XlvKAO/Vx5iuGlMMbR2wdDnhiCT9gLXPsizSIymp26AVYVsSeiAVIY7xCJvQzNqu02TW59QMCmjc+XwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print distance_in_meters = geo_distance_2points(-122.407628, 47.578557, -118.275287, 34.019056)\r \`\`\`\r \r **Output**\r \r | distance_in_meters |\r |--------------------|\r | 1546754.35197381 |\r \r Here's an approximation of shortest path from Seattle to London. The line consists of coordinates along the LineString and within 500 meters from it.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03Oz2rDMAwG8PueQvhkD684paW0rG+w244hBM/WEm+JHBRBKNvefU5gf3T9vp8k9tQhJHjlPEIFkqFy28AsOEF19wkT5zcMAgN1cAX2FLWBe2D0g36o9ntjYfDyPzq7wpYeGTf0grIgkv4TsNuBM1D6G/0pHE5rcHbml3eY25hm8RSwnXIiaSW3QyLUZbMt2MYb+TEF/aHkNqG6qKeSPgsn6pRVIWeOibzgrC51vV63h1Nja2ePVdN8GQOPcHTrw4wUkWEOXgQ59J4FliQ96PdE8Tr6yXwDBC8v7i4BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range i from 1 to 1000000 step 1\r | project lng = rand() * real(-122), lat = rand() * 90\r | where lng between(real(-122) .. 0) and lat between(47 .. 90)\r | where geo_distance_point_to_line(lng,lat,dynamic({"type":"LineString","coordinates":[[-122,47],[0,51]]})) < 500\r | render scatterchart with (kind=map)\r \`\`\`\r \r The following example finds all rows in which the shortest distance between two coordinates is between 1 meter and 11 meters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22MsQrCQBBEe79iygghsPY2Qjo7P+A4c0M8IbvhspgUfryJgo1WMwxv3sWtDO2D6tPuCS5OTUh58qgdgwS3IDLgiJ4WvvthtLw+qhP7rGfTGp8WvUar6b1sGX2/WucbC/9Ir/SZVFSCpoHIxo7F7uz8l34BxwMseakAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | extend distance_1_to_11m = geo_distance_2points(BeginLon, BeginLat, EndLon, EndLat)\r | where distance_1_to_11m between (1 .. 11)\r | project distance_1_to_11m\r \`\`\`\r \r **Output**\r \r | distance_1_to_11m |\r |-------------------|\r | 10.5723100154958 |\r | 7.92153588248414 |\r \r The following example returns a null result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjJLC5JzEtOVbBVSE/Nj4dx440K8oHSxRrGBgY6hiCoCQDd7v6oMAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print distance = geo_distance_2points(300,1,1,1)\r \`\`\`\r \r **Output**\r \r | distance |\r |----------|\r | |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-distance-2points-function","geo-distance-2points-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_distance_point_to_line","Calculates the shortest distance in meters between a coordinate and a line or multiline on Earth.",`## Syntax\r \r \`geo_distance_point_to_line(\`*longitude*\`,\`*latitude*\`,\`*lineString*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *longitude* | real | ✓ | The geospatial coordinate longitude value in degrees. A valid value is in the range [-180, +180].|\r | *latitude* | real | ✓ | The geospatial coordinate latitude value in degrees. A valid value is in the range [-90, +90].|\r | *lineString* | dynamic | ✓ | A line or multiline in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The shortest distance, in meters, between a coordinate and a line or multiline on Earth. If the coordinate or lineString are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r \r ### LineString definition and constraints\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2],..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r > [!TIP]\r >\r > * Using literal LineString or a MultiLineString may result in better performance.\r > * If you want to know the shortest distance between one or more points to many lines, consider folding these lines into one multiline. See the following [example](#examples).`,`### Shortest distance to airport\r \r The following example finds the shortest distance between North Las Vegas Airport and a nearby road.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03PwWrDMAwG4FcxObWQFVuyZLuwN+htxxJCSEwxrE5IfCmj7z6zunPOn/Tr17KGmMQUtjTE0fch9nef/LqJT3Hzc/8Py5zn+jT33yH6w4dSdFLOMVArkE+gpFauFdMjDvcwHn6a9Fh8cxbNJY9/pXzk1rSiGed5nUIckt8yXq+vHEVoSw445ahrRRFk54pIicxVtASCP1EOtJE7QSL7EmsJcCdaGi6Sz+gqpJlLmtHa7naYNaoijNZWsQjWFSEpTRUHrN5pbLC2Bgm6fKoManRVgHLtdwNk6rrn8fgL1VPyAZ0BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print distance_in_meters = geo_distance_point_to_line(-115.199625, 36.210419, dynamic({ "type":"LineString","coordinates":[[-115.115385,36.229195],[-115.136995,36.200366],[-115.140252,36.192470],[-115.143558,36.188523],[-115.144076,36.181954],[-115.154662,36.174483],[-115.166431,36.176388],[-115.183289,36.175007],[-115.192612,36.176736],[-115.202485,36.173439],[-115.225355,36.174365]]}))\r \`\`\`\r \r **Output**\r \r | distance_in_meters |\r |--------------------|\r | 3797.88887253334 |\r \r ### Storm events across the south coast\r \r Storm events in south coast US. The events are filtered by a maximum distance of 5 km from the defined shore line.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22ST48TMQzF7/spop5aqUS2E8cOsBcQt70tt1VVjdqoHdjOVNPAagV8d9ymXS6c5o9/eX5+8XOp7jT+qPvPY3eq7t5tX4fu0G/mv2b19Vhm793soR/KY536YTdbutlmHKdtP3S1nKz49PQui0dlYOUcJOacl47Y5yxsH5hZCJFWS3chWYFTipCIDUs+J6TIIsCUstwoxIw3Rnxm5owAMUViDg2KHiLlpJeOrWn2QomIAuZgZyA2knxWJcWLWvZKyEpCwOejF0SzTSCAKPZoFGIQYZNBjOGNChol8cVXAB+Qs4qdYRZNzbyeRwwA0voZRTY+GENRz3ijko8agzTC5hCynBgCplZnj0Qg9uPqOqkFR+ZYOWljLAFAy+Qs1GI3LYyMZJZCkIQtKiWfks1zi0C9QkIJDKocRdKNUow5vuWuHoIlKeeRJVkaNwxFJDTzdoFszhNTUErCV2dgt4+EkBvEnuCsjBw4WWG1+rP4cPdYx+nw5WcZ6unutztO47eyqe5T2fXDwzgsr29dXboL9NWW0biXfZmK25Vxve1PtRs2ZX0c+6Gu67h+tj2d/0/g334v3EfHAGBKUxm2ZXKnTVdrmTb7bqrupa97N//eD9v7Q3dc/AWyeZdJHAMAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let southCoast = dynamic({"type":"LineString","coordinates":[[-97.18505859374999,25.997549919572112],[-97.58056640625,26.96124577052697],[-97.119140625,27.955591004642553],[-94.04296874999999,29.726222319395504],[-92.98828125,29.82158272057499],[-89.18701171875,29.11377539511439],[-89.384765625,30.315987718557867],[-87.5830078125,30.221101852485987],[-86.484375,30.4297295750316],[-85.1220703125,29.6880527498568],[-84.00146484374999,30.14512718337613],[-82.6611328125,28.806173508854776],[-82.81494140625,28.033197847676377],[-82.177734375,26.52956523826758],[-80.9912109375,25.20494115356912]]});\r StormEvents\r | project BeginLon, BeginLat, EventType\r | where geo_distance_point_to_line(BeginLon, BeginLat, southCoast) < 5000\r | render scatterchart with (kind=map)\r \`\`\`\r \r ### New York taxi pickups\r \r NY taxi pickups. Pickups are filtered by maximum distance of 0.1 meter from the defined multiline.\r \r \r \r \`\`\`\r let MadisonAve = dynamic({"type":"MultiLineString","coordinates":[[[-73.9879823,40.7408625],[-73.9876492,40.7413345],[-73.9874982,40.7415046],[-73.9870343,40.7421446],[-73.9865812,40.7427655],[-73.9861292,40.7433756],[-73.9856813,40.7439956],[-73.9854932,40.7442606],[-73.9852232,40.7446216],[-73.9847903,40.7452305],[-73.9846232,40.7454536],[-73.9844803,40.7456606],[-73.9843413,40.7458585],[-73.9839533,40.7463955],[-73.9839002,40.7464696],[-73.9837683,40.7466566],[-73.9834342,40.7471015],[-73.9833833,40.7471746],[-73.9829712,40.7477686],[-73.9824752,40.7484255],[-73.9820262,40.7490436],[-73.9815623,40.7496566],[-73.9811212,40.7502796],[-73.9809762,40.7504976],[-73.9806982,40.7509255],[-73.9802752,40.7515216],[-73.9798033,40.7521795],[-73.9795863,40.7524656],[-73.9793082,40.7528316],[-73.9787872,40.7534725],[-73.9783433,40.7540976],[-73.9778912,40.7547256],[-73.9774213,40.7553365],[-73.9769402,40.7559816],[-73.9764622,40.7565766],[-73.9760073,40.7572036],[-73.9755592,40.7578366],[-73.9751013,40.7584665],[-73.9746532,40.7590866],[-73.9741902,40.7597326],[-73.9737632,40.7603566],[-73.9733032,40.7609866],[-73.9728472,40.7616205],[-73.9723422,40.7622826],[-73.9718672,40.7629556],[-73.9714042,40.7635726],[-73.9709362,40.7642185],[-73.9705282,40.7647636],[-73.9704903,40.7648196],[-73.9703342,40.7650355],[-73.9701562,40.7652826],[-73.9700322,40.7654535],[-73.9695742,40.7660886],[-73.9691232,40.7667166],[-73.9686672,40.7673375],[-73.9682142,40.7679605],[-73.9677482,40.7685786],[-73.9672883,40.7692076],[-73.9668412,40.7698296],[-73.9663882,40.7704605],[-73.9659222,40.7710936],[-73.9654262,40.7717756],[-73.9649292,40.7724595],[-73.9644662,40.7730955],[-73.9640012,40.7737285],[-73.9635382,40.7743615],[-73.9630692,40.7749936],[-73.9626122,40.7756275],[-73.9621172,40.7763106],[-73.9616111,40.7769896],[-73.9611552,40.7776245],[-73.9606891,40.7782625],[-73.9602212,40.7788866],[-73.9597532,40.7795236],[-73.9595842,40.7797445],[-73.9592942,40.7801635],[-73.9591122,40.7804105],[-73.9587982,40.7808305],[-73.9582992,40.7815116],[-73.9578452,40.7821455],[-73.9573802,40.7827706],[-73.9569262,40.7833965],[-73.9564802,40.7840315],[-73.9560102,40.7846486],[-73.9555601,40.7852755],[-73.9551221,40.7859005],[-73.9546752,40.7865426],[-73.9542571,40.7871505],[-73.9541771,40.7872335],[-73.9540892,40.7873366],[-73.9536971,40.7879115],[-73.9532792,40.7884706],[-73.9532142,40.7885205],[-73.9531522,40.7885826],[-73.9527382,40.7891785],[-73.9523081,40.7897545],[-73.9518332,40.7904115],[-73.9513721,40.7910435],[-73.9509082,40.7916695],[-73.9504602,40.7922995],[-73.9499882,40.7929195],[-73.9495051,40.7936045],[-73.9490071,40.7942835],[-73.9485542,40.7949065],[-73.9480832,40.7955345],[-73.9476372,40.7961425],[-73.9471772,40.7967915],[-73.9466841,40.7974475],[-73.9453432,40.7992905],[-73.9448332,40.7999835],[-73.9443442,40.8006565],[-73.9438862,40.8012945],[-73.9434262,40.8019196],[-73.9431412,40.8023325],[-73.9429842,40.8025585],[-73.9425691,40.8031855],[-73.9424401,40.8033609],[-73.9422987,40.8035533],[-73.9422013,40.8036857],[-73.9421022,40.8038205],[-73.9420024,40.8039552],[-73.9416372,40.8044485],[-73.9411562,40.8050725],[-73.9406471,40.8057176],[-73.9401481,40.8064135],[-73.9397022,40.8070255],[-73.9394081,40.8074155],[-73.9392351,40.8076495],[-73.9387842,40.8082715],[-73.9384681,40.8087086],[-73.9383211,40.8089025],[-73.9378792,40.8095215],[-73.9374011,40.8101795],[-73.936405,40.8115707],[-73.9362328,40.8118098]],[[-73.9362328,40.8118098],[-73.9362432,40.8118567],[-73.9361239,40.8120222],[-73.9360302,40.8120805]],[[-73.9362328,40.8118098],[-73.9361571,40.8118294],[-73.9360443,40.8119993],[-73.9360302,40.8120805]],[[-73.9360302,40.8120805],[-73.9359423,40.8121378],[-73.9358551,40.8122385],[-73.9352181,40.8130815],[-73.9348702,40.8135515],[-73.9347541,40.8137145],[-73.9346332,40.8138615],[-73.9345542,40.8139595],[-73.9344981,40.8139945],[-73.9344571,40.8140165],[-73.9343962,40.8140445],[-73.9343642,40.8140585],[-73.9343081,40.8140725],[-73.9341971,40.8140895],[-73.9341041,40.8141005],[-73.9340022,40.8140965],[-73.9338442,40.8141005],[-73.9333712,40.8140895],[-73.9325541,40.8140755],[-73.9324561,40.8140705],[-73.9324022,40.8140695]],[[-73.9360302,40.8120805],[-73.93605,40.8121667],[-73.9359632,40.8122805],[-73.9353631,40.8130795],[-73.9351482,40.8133625],[-73.9350072,40.8135415],[-73.9347441,40.8139168],[-73.9346611,40.8140125],[-73.9346101,40.8140515],[-73.9345401,40.8140965],[-73.9344381,40.8141385],[-73.9343451,40.8141555],[-73.9342991,40.8141675],[-73.9341552,40.8141985],[-73.9338601,40.8141885],[-73.9333991,40.8141815],[-73.9323981,40.8141665]]]});\r nyc_taxi\r | project pickup_longitude, pickup_latitude\r | where geo_distance_point_to_line(pickup_longitude, pickup_latitude, MadisonAve) <= 0.1\r | take 100\r | render scatterchart with (kind=map)\r \`\`\`\r \r The following example folds many lines into one multiline and queries this multiline. The query finds all taxi pickups that happened 10 km away from all roads in Manhattan.\r \r \r \r \`\`\`\r let ManhattanRoads =\r datatable(features:dynamic)\r [\r dynamic({"type":"Feature","properties":{"Label":"145thStreetBrg"},"geometry":{"type":"MultiLineString","coordinates":[[[-73.9322259,40.8194635],[-73.9323259,40.8194743],[-73.9323973,40.8194779]]]}}),\r dynamic({"type":"Feature","properties":{"Label":"W120thSt"},"geometry":{"type":"MultiLineString","coordinates":[[[-73.9619541,40.8104844],[-73.9621542,40.8105725],[-73.9630542,40.8109455],[-73.9635902,40.8111714],[-73.9639492,40.8113174],[-73.9640502,40.8113705]]]}}),\r dynamic({"type":"Feature","properties":{"Label":"1stAve"},"geometry":{"type":"MultiLineString","coordinates":[[[-73.9704124,40.748033],[-73.9702043,40.7480906],[-73.9696892,40.7487346],[-73.9695012,40.7491976],[-73.9694522,40.7493196]],[[-73.9699932,40.7488636],[-73.9694522,40.7493196]],[[-73.9694522,40.7493196],[-73.9693113,40.7494946],[-73.9688832,40.7501056],[-73.9686562,40.7504196],[-73.9684231,40.7507476],[-73.9679832,40.7513586],[-73.9678702,40.7514986]],[[-73.9676833,40.7520426],[-73.9675462,40.7522286],[-73.9673532,40.7524976],[-73.9672892,40.7525906],[-73.9672122,40.7526806]]]}})\r // ... more roads ...\r ];\r let allRoads=toscalar(\r ManhattanRoads\r | project road_coordinates=features.geometry.coordinates\r | summarize make_list(road_coordinates)\r | project multiline = bag_pack("type","MultiLineString", "coordinates", list_road_coordinates));\r nyc_taxi\r | project pickup_longitude, pickup_latitude\r | where pickup_longitude != 0 and pickup_latitude != 0\r | where geo_distance_point_to_line(pickup_longitude, pickup_latitude, parse_json(allRoads)) > 10000\r | take 10\r | render scatterchart with (kind=map)\r \`\`\`\r \r ### Invalid LineString\r \r The following example will return a null result because of the invalid LineString input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjJLC5JzEtOjc/Mi89NLUktKlawVUhPzY+HSxTkA9XFl+TH52TmpWoY6hjqKKRU5iXmZiZrVCsolVQWpCpZKfkA5YJLgCamK9VqagIAkwcZF1sAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print distance_in_meters = geo_distance_point_to_line(1,1, dynamic({ "type":"LineString"}))\r \`\`\`\r \r **Output**\r \r | distance_in_meters |\r |--------------------|\r | |\r \r ### Invalid coordinate\r \r The following example will return a null result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytJLVayio421DGM1Yk20jGKja3V1AQArromlhUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print distance_in_meters = geo_distance_point_to_line(300, 3, dynamic({ "type":"LineString","coordinates":[[1,1],[2,2]]}))\r \`\`\`\r \r **Output**\r \r | distance_in_meters |\r |--------------------|\r | |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-distance-point-to-line-function","geo-distance-point-to-line-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_distance_point_to_polygon","Calculates the shortest distance between a coordinate and a polygon or a multipolygon on Earth.",`## Syntax\r \r \`geo_distance_point_to_polygon(\`*longitude*\`,\`*latitude*\`,\`*polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *longitude* | real | ✓ | Geospatial coordinate, longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *latitude* | real | ✓ | Geospatial coordinate, latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The shortest distance, in meters, between a coordinate and a polygon or a multipolygon on Earth. If polygon contains point, the distance will be 0. If the coordinates or polygons are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1,..., LinearRingHole_N],..., [LinearRingShell, LinearRingHole_1,..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon doesn't necessarily contain its vertices.\r \r > [!TIP]\r >\r > * Using literal polygons may result in better performance.\r > * If you want to know if polygon contains point, see [geo_point_in_polygon()](./geo-point-in-polygon-function.md)`,`The following example calculates shortest distance in meters from some location in NYC to Central Park.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WQwWrDMAyG73sK41MLWbEtS7Jb9g67hxBMYkpYZofUl1D27ksaAttJ4tenn18aYxFdTGUOYzuF+Ut8iH5J4XvoTk9ZlinKq/zM43LPSVayy3nuhxRKfMhrXdfvDBdvPVZWXdiTb6pdQqfYEBlAQLMNnVLkSAGS9kYfmDNKe2usBWfdy4OcQWIDCpn5wBg0O0erFYLfMYuogVBt5cD+5mian/PtbZqHVMQ95rYfHiWkLrZTXqW25LV5HXXag6y+YttlhdW/f5x/Afn4cVQhAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r print geo_distance_point_to_polygon(-73.9839, 40.7705, central_park)\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |259.940756070596|\r \r The following example enriches the data with distance.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WazYtcxxXF9/orGm1swUTU94eNF1l5k0AgJFkYISaaRmkYzwyjNolJ8r/nd16/qrrPWWgMMuo5Xa/q3nPPPbeeHs/X08+/PF4vL8+Pv35+fjr9cHr49en+58unb//99vrry/ntd6e3fxTgTzfA27vT20/Pz68Pl6f76/kLv/6Jn9/V+L53n4q7/fjo707Jva/R19hunwVXPtyddmhoOaXua83Ztx3qXAu5FJd9zH5BS63hhgg5xbA/IKeFqCWm0nIOobU4oLWV6HprpZd4g6b3bAJYT6XEHlLaoS3qA+dyqd0vqE8+jkO4kschqt1ZL71nV9n4vlisscTaAoeocSF9DSmH5GLtcSCzPnKtR88mF5TVtEDMPbe+Q1NtvvXimkvVPP/r8f4g8J6e3GIm3Gwtl3aLOchYuuu5xNh8nys3n2InxrmksMe+tFpCbomo9BwNMqdWc6it5d4GlBi70PkwWWDJkVM5310ewKjYpUpUezHQCjl8c8X1tKDkOVROV0pb0OBiy8QyNT9SALQpgM5zVLNqCIU08Y0UUx/Q0FsJJCCGVA00sqleoSZ5HFDH8310EMp7Cw2u+15TyX2sWltPqfjaWdlCCWiOoaVcSxnQmgs7SjXVfNxA46gRxsxFk/fOJT4LllkRZsbMn0R83yrbTDlXT1XEYgopeRgVKZY+MgUrO8TvPopgZtEG5RVbB35AIWolsNl1d4B2H6ByrC6HCaWqO7woNQQD7WIQv0pwe0KJVIZsDWKYrZK8QrJcdnOrrRE6CpVKSPZQgTQ3dhv72iqlpoCUw5o+lpLZAUxNE+l8q85X+G4XhTzEOZLpvKBV8iHp8Cb+KcBs9CqmlOZWFRbVX48WSegpP1jl6kBG8ktAPGLT7ZoEAGZyilEqFDZEYZcdtpjwZwcBa27ShhH+SDH4XmBZNPwHSvY70QtDVypVD9EhEEdKFunJVYRBrDyhBJk6C9ILC2UHpIV9lUG/SKiICU9Cc4xacpxCSXUYUwaUUkF0SV1pZtXipVbUhGPdAW0ZUSy+JcrFQKXxDtWlBOde+1a5pMG1bFet6AkywqkXlHqmrWRPwRxW3eQ5lJTGBhKl71shjfUQ1gzJOVfxvq69VrbEschkPbC6pgAPczfBovgywXPZVnUn3MTEe+I+GVA5F/xFsLwtQKLFc6iPdSqyRAIKoYnVQkPQygGF8IsCXvxR77S1Su2i1CQxzbKCV4SLeuP/2SpQhwBki03MvUJWOgU5yLauRCL2RrOueW4A5jQJMKezBoEdUWuNkqljVbZCXRf6o7ccpNfTaQKiOnsAUHAoII+3woZSVdV6lhTvUDo74aArUHB21SRKZVX3pABcR0RVsTRSC6ULsSmKq9UJRfsl364UEwEOVaV1SPZIFuXPkaB3qzZWAbV10jC0fSCJUZDiVm/JGqR15CkqmQNKrGjInhN7G1X4EyskAD2hUnT2m7UHu1PyQn+S7Pm5KgwiVtD1sCoVLw/lWhuWCSgVTWtB8G0PCHQkyqc5Py2LNiCtIH/k20JRNThVHDmbUMoUF0RyrGBhoyiWVD3MHtrG6ZEV+gL1ZTbgsCVUoReXhgqxIRjJEjHYDZC8QmqwSNVPJP2vyCgiw6td4yjpV8SwpAlt4jga0rAyprNjBTe60iDyiBW1W+UOvX6zoNhCahvKOzeVBcNJqYcuzlQLJSxUIFHsc9XKySn5LGNtNhAwYKp2R4NYqyLEWEP1HQtlP3CLys5z0YCrUAxdtIsmOJTl2XCOE4pSbhGZDvwGRXIJf6huOHCtmvmbmG1dUEcnISpyHWJaW6WuyBcfWygpQZo4GWyeUGUWBWnHvaqOaK/y4nlByVWC29laRoQNtaMOMVl1Qmk3WWV8KGysmaMwvNrz3ABdgD0UWT+jLHRXfqWMt7j2qgLgC8maZiiIYqIiMawMlK2PqYSb6RjoFzLQtiVWWgkfHoOqcRaKtPrNjlWzai3kipEC32GHkQSp1eXxwyZWuFg1YjumUYKEDzvE2itWmlAqPZPisjVIXdE18TPTX8ARIksrpD7s4ARLmQ9Q5mxiJSdAg6BcTKzIXZVzIgLRRECR1tGK0TZyzQGqnEQ5HEvizIntqiHLyuCZalrBgg5Nypq6t1A8L4UYELe1asQISqCaNTgE0CvkSSRfUBKL5B0FS24BO58LTX6WFjJEy4yqbxssGhMkCIGQzQgQFFKCa0nuMDp6WJk1tK3Sxp3iIsmjsa1yFZQrwwdhnSqEWlIcDDO9m6lR/lLiCMFmz8IgwVdEEDW1q8ovqgsS7720GUazxI3yQIgtFLFjX6RwmEGgfbMBajrlANW6ugwodUDpY+iaVCtlA8X3yLuqwc4NICFOrMi12b3S30iKXO5o70hNjF6CQWbsqgEjQbLxXiVOaFDfxDq7A9SnMbynCZWM3ob3YNoLDc9LsGHoGByxJU0ukgjWahsBM6IsghrkQBbllFGb7NpYqS5V8BR3nlDUM2KI+I5tRE52WvN3GMRumi6xO03nNckSgdXPkmbQAaUN8BsXNSgtKA4ha1CpivcOZZB1+A0sX4pmcoZBahci1zCueAM6Pt4C72pH90KtNI0aKNyIVRYt6HrEN5hVUWf6CkvKKg6o7lnUcBhALZR9us3P17koqY5+030z5TQpLkdmLDOLyreThKYbLHsqKL3lNQxx5TPdRtCKZIgtNGytiFMPN8whMZdsKnpvLyRA4K1y8MvgbPGgKuF6OULxS2iFRvg4oUhdQWoQaLsBp1s26pgQzFU5OPFHYfshrfCPPkjXmOWKM1DsaBnZzENYKQ04GlfCaNrEip1HjcRM6wbqVbKR+GUT1qKBmoMeSoAOosLGTNDp5laJU9QFiPVifFeXP4XpMS8khSLvTgwOUNlkNLIPf8Xja1FJ03das0hd0GiASot/uo8Muv8KRyRDMf6GsXAdSWNjg8NWrLK6FXMyW00rUEoWBpsGe4AiKzyG78e4zqSGofbWTa1m3ZRt+6W/rfSTu0jBFCsWuG78isieF//4qOsutR3zX4sucYNG+jqhHJQ+lDVBHzaAMnkNRX2WdXTbwXxE7iw0sgLi5OZADkh3lHIt1I+FqrDhZTKrckjaiEbgIwGwMNQbEWszVvTOokGptkNYxUiEggSEFVZGQVp+PMYKUumObbsUmVAydXN4VgEyQxAHi6hDWdAteNKvapOFJlOXukEJebGaQiWA2RpsZFX2BMFfugr1UpU9p4K9zRW+gPQ5jb8TWnURT81W65pzk69AHODWQCIFIgXPt609606M+VMGdUGhMEKDE4/pAJU9yBqo0oRKbaNq2y6qjqs7c7m0gURAdbIs13wIqiYZ9Zs6F9VtConW6G4j5be9Mo0Fg9wuDpBxO1/47T5IquDr/nzNhzi1FJWBtVWZ1ehu7wF2E8KpeYz6r27UFlU0RBVRXm4w7FCa1RapzZ5PaNF1zI5IMGF3DoZ3mpXG47xa2g1h7io1u5IYaqaPMRXmU4OUj+6XzeOyvJ1uvLAy81UBZoEiTKqrapBffatgX0Lg+DuBpO8h5UMf1YO67pvh3mJHilABo683EeNqvQVZgLKJubkxTduFG14W6sxCooLx3kXS5eyq9CDSrYl1PF/X6qHq/QTZNEhEqMnKalAZdjbqtgzqaU8GyhKoJpNDaXaigd5JQ8mKLM1BdwrqY/M9CPqZlFSUxxstFzToFlRNalwroEzoKFgl10ApA+KN9SzzxpwUKAlIS452A9h0MivZC2NQk8V3CgsiWwyUwCYNSvTTMdHoJpqsIJLw30CDzGSXIZu36/CbBzHxH3wPPlhSpKF8XZch1VUGm+8ku1cnz6JRsc4IUMd5e83FRNAMlGYoOdcoPoYfXQNDCTabLLEoeQSpaKyal7saFeGtzmDDqoajlyPr5UJibAvMI/J3BonAuO3CW695digpJRxwhjFpVQwdk7rdWhdas0MJfoxdZsroA3YPvWHvOLTRzOEXx9neBGQjULgA+TCEh7Y5XxnpNkSTDsdakdrerTET1c0q7lB5M7LVtyurBd0GXZ7m54WxhgnMkCrVJastyKWuiGU/9lBl3b2hNHoNa+5rqUqv63bauRvTt8wWMWFAIbwrqpmj6vKjI8DTosBrOlxKsn8mqslND6s7w9tPtDXydenh57/vvn/zeL6ezDvu0w+nNyd+Hu6v/Pf3x/O3j89Pny/XXx7O351ez/ePd6fH++vh7w/nL59eLy/Xy/PTd6cv19fL0+d32xo/bX8K9O0tGMm/29uJp2y++cvLy/n19Lfzl+vpz5eH8zd3v8GT6B1PDYP/8fV8fvrn5dM/Tn+9PD7ef/6/bzRa/LtZunzjD/c//nLP0e5Pv7+8vjy/XvnGh+/fmPO++c/p/K/r+enh9HD5cr1/+nQmAp/Pzx/HXz++PF+erh+vzx/3fzWwArJCcXf4dwXv/gf0De+0aSAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let multipolygon = dynamic({"type":"MultiPolygon","coordinates":[[[[-73.991460000000131,40.731738000000206],[-73.992854491775518,40.730082566051351],[-73.996772,40.725432000000154],[-73.997634685522883,40.725786309886963],[-74.002855946639244,40.728346630056791],[-74.001413,40.731065000000207],[-73.996796995070824,40.73736378205173],[-73.991724524037934,40.735245208931886],[-73.990703782359589,40.734781896080477],[-73.991460000000131,40.731738000000206]]],[[[-73.958357552055688,40.800369095633819],[-73.98143901556422,40.768762584141953],[-73.981548752788598,40.7685590292784],[-73.981565335901905,40.768307084720796],[-73.981754418060945,40.768399727738668],[-73.982038573548124,40.768387823012056],[-73.982268248204349,40.768298621883247],[-73.982384797518051,40.768097213086911],[-73.982320919746599,40.767894461792181],[-73.982155532845766,40.767756204474757],[-73.98238873834039,40.767411004834273],[-73.993650353659021,40.772145571634361],[-73.99415893763998,40.772493009137818],[-73.993831082030937,40.772931787850908],[-73.993891252437052,40.772955194876722],[-73.993962585514595,40.772944653908901],[-73.99401262480508,40.772882846631894],[-73.994122058082397,40.77292405902601],[-73.994136652588594,40.772901870174394],[-73.994301342391154,40.772970028663913],[-73.994281535134448,40.77299380206933],[-73.994376552751078,40.77303955110149],[-73.994294029824005,40.773156243992048],[-73.995023275860802,40.773481196576356],[-73.99508939189289,40.773388475039134],[-73.995013963716758,40.773358035426909],[-73.995050284699261,40.773297153189958],[-73.996240651898916,40.773789791397689],[-73.996195837470992,40.773852356184044],[-73.996098807369748,40.773951805299085],[-73.996179459973888,40.773986954351571],[-73.996095245226442,40.774086186437756],[-73.995572265161172,40.773870731394297],[-73.994017424135961,40.77321375261053],[-73.993935876811335,40.773179512586211],[-73.993861942928888,40.773269531698837],[-73.993822393527211,40.773381758622882],[-73.993767019318497,40.773483981224835],[-73.993698463744295,40.773562141052594],[-73.993358326468751,40.773926888327956],[-73.992622663865575,40.774974056037109],[-73.992577842766124,40.774956016359418],[-73.992527743951555,40.775002110439829],[-73.992469745815342,40.775024159551755],[-73.992403837191887,40.775018140390664],[-73.99226708903538,40.775116033858794],[-73.99217809026365,40.775279293897171],[-73.992059084937338,40.775497598192516],[-73.992125372394938,40.775509075053385],[-73.992226867797001,40.775482211026116],[-73.992329346608813,40.775468900958522],[-73.992361756801131,40.775501899766638],[-73.992386042960277,40.775557180424634],[-73.992087684712729,40.775983970821372],[-73.990927174149746,40.777566878763238],[-73.99039616003671,40.777585065679204],[-73.989461267506471,40.778875124584417],[-73.989175778438053,40.779287524015778],[-73.988868617400072,40.779692922911607],[-73.988871874499793,40.779713738253008],[-73.989219022880576,40.779697895209402],[-73.98927785904425,40.779723439271038],[-73.989409054180143,40.779737706471963],[-73.989498614927044,40.779725044389757],[-73.989596493388234,40.779698146683387],[-73.989679812902509,40.779677568658038],[-73.989752702937935,40.779671244211556],[-73.989842247806507,40.779680752670664],[-73.990040102120489,40.779707677698219],[-73.990137977524839,40.779699769704784],[-73.99033584033225,40.779661794394983],[-73.990430598697046,40.779664973055503],[-73.990622199396725,40.779676064914298],[-73.990745069505479,40.779671328184051],[-73.990872114282197,40.779646007643876],[-73.990961672224358,40.779639683751753],[-73.991057472829539,40.779652352625774],[-73.991157429497036,40.779669775606465],[-73.991242817404469,40.779671367084504],[-73.991255318289745,40.779650782516491],[-73.991294887120119,40.779630209208889],[-73.991321967649895,40.779631796041372],[-73.991359455569423,40.779585883337383],[-73.991551059227476,40.779574821437407],[-73.99141982585985,40.779755280287233],[-73.988886144117032,40.779878898532999],[-73.988939656706265,40.779956178440393],[-73.988926103530844,40.780059292013632],[-73.988911680264692,40.780096037146606],[-73.988919261468567,40.780226094343945],[-73.988381050202634,40.780981074045783],[-73.988232413846987,40.781233144215555],[-73.988210420831663,40.781225482542055],[-73.988140000000143,40.781409000000224],[-73.988041288067166,40.781585961353777],[-73.98810029382463,40.781602878305286],[-73.988076449145055,40.781650935001608],[-73.988018059972219,40.781634188810422],[-73.987960792842145,40.781770987031535],[-73.985465811970457,40.785360700575431],[-73.986172704965611,40.786068452258647],[-73.986455862401996,40.785919219081421],[-73.987072345615601,40.785189638820121],[-73.98711901394276,40.785210319004058],[-73.986497781023601,40.785951202887254],[-73.986164628806279,40.786121882448327],[-73.986128422486075,40.786239001331111],[-73.986071135219746,40.786240706026611],[-73.986027274789123,40.786228964236727],[-73.986097637849426,40.78605822569795],[-73.985429321269592,40.785413942184597],[-73.985081137732209,40.785921935110366],[-73.985198833254501,40.785966552197777],[-73.985170502389906,40.78601333415817],[-73.985216218673656,40.786030501816427],[-73.98525509797993,40.785976205511588],[-73.98524273937646,40.785972572653328],[-73.98524962933017,40.785963139855845],[-73.985281779186749,40.785978620950075],[-73.985240032884533,40.786035858136792],[-73.985683885242182,40.786222123919686],[-73.985717529004575,40.786175994668795],[-73.985765660297687,40.786196274858618],[-73.985682871922691,40.786309786213067],[-73.985636270930442,40.786290150649279],[-73.985670722564691,40.786242911993817],[-73.98520511880038,40.786047669212785],[-73.985211035607492,40.786039554883686],[-73.985162639946992,40.786020999769754],[-73.985131636312062,40.786060297019972],[-73.985016964065125,40.78601423719563],[-73.984655078830457,40.786534741807841],[-73.985743787901043,40.786570082854738],[-73.98589227228328,40.786426529019593],[-73.985942854994988,40.786452847880334],[-73.985949561556794,40.78648711396653],[-73.985812373526713,40.786616865357047],[-73.985135209703174,40.78658761889551],[-73.984619428584324,40.786586016349787],[-73.981952458164173,40.790393724337193],[-73.972823037363767,40.803428052816756],[-73.971036786332192,40.805918478839672],[-73.966701,40.804169000000186],[-73.959647,40.801156000000113],[-73.958508540159471,40.800682279767472],[-73.95853274080838,40.800491362464697],[-73.958357552055688,40.800369095633819]]],[[[-73.943592454622546,40.782747908206574],[-73.943648235390199,40.782656161333449],[-73.943870759887162,40.781273026571704],[-73.94345932494096,40.780048275653243],[-73.943213862652243,40.779317588660199],[-73.943004239504688,40.779639495474292],[-73.942716005450905,40.779544169476175],[-73.942712374762181,40.779214856940001],[-73.942535563208608,40.779090956062532],[-73.942893408188027,40.778614093246276],[-73.942438481745029,40.777315235766039],[-73.942244919522594,40.777104088947254],[-73.942074188038887,40.776917846977142],[-73.942002667222781,40.776185317382648],[-73.942620205199006,40.775180871576474],[-73.94285645694552,40.774796600349191],[-73.94293043781397,40.774676268036011],[-73.945870899588215,40.771692257932997],[-73.946618690150586,40.77093339256956],[-73.948664164778933,40.768857624399587],[-73.950069793030679,40.767025088383498],[-73.954418260786071,40.762184104951245],[-73.95650786241211,40.760285256574043],[-73.958787773424007,40.758213471309809],[-73.973015157270069,40.764278692864671],[-73.955760332998182,40.787906554459667],[-73.944023,40.782960000000301],[-73.943592454622546,40.782747908206574]]]]});\r let coordinates = \r datatable(longitude:real, latitude:real, description:string)\r [\r real(-73.9741), 40.7914, 'Upper West Side',\r real(-73.9950), 40.7340, 'Greenwich Village',\r real(-73.8743), 40.7773, 'LaGuardia Airport',\r ];\r coordinates\r | extend distance = geo_distance_point_to_polygon(longitude, latitude, multipolygon)\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|distance|\r |---|---|---|---|\r |-73.9741|40.7914|Upper West Side|0|\r |-73.995|40.734|Greenwich Village|0|\r |-73.8743|40.7773|LaGuardia Airport|5702.15731467514|\r \r The following example finds all states that are within 200-km distance, excluding state that contains the point.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12NwQrCMBAF737FHluodaNVEFTw4FEvxXMI7ZpG2iSkK1Lw442gVrw9hsfMuZQlK6Z+8gAf3JUqBqs6gi1cSPEtUJ9H7imwifO0Px4y8K4dtLO/H02uIw7DnyaD2vSsbPUSVmRaY3USv/KDpXfGsmQn39JkKoTI17jMoMB8tSi+uRRmIBAxjY17Q4FG9wbmiKBsPaId4BNva0k13AAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r US_States\r | project name = features.properties.NAME, polygon = features.geometry\r | project name, distance = ceiling(geo_distance_point_to_polygon(-111.905, 40.634, polygon) / 1000)\r | where distance < 200 and distance > 0\r \`\`\`\r \r **Output**\r \r |name|distance|\r |---|---|\r |Idaho|152|\r |Nevada|181|\r |Wyoming|83|\r \r The following example will return a null result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjJLC5JzEtOVbBVSE/Nj4dx4wvygbLxJflARk5len6ehqmBgY6hTkplXmJuZrJGtVJJZUGqkpWCUgBEXklHKTk/vyglMy+xJLUYKBEdHW2gYxCrE20I1AejgRRIMDa2VlMTAGFm5geAAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print distance = geo_distance_point_to_polygon(500,1,dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,1],[0,0]]]}))\r \`\`\`\r \r **Output**\r \r | distance |\r |------------|\r | |\r \r The following example will return a null result because of the invalid polygon input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03JywqFIBAG4FeRWRXMQrdB79BeREQlhJqRmo1E756HONDqv3z1KCQqlVMCxaxmtWb2/+krd/XCvWxtZRoMGkyNwl7icIG0mmFSsLwKCJH5SIWC5LODtVajdmiNRvPN3+vcPY4PvW97rH8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print distance = geo_distance_point_to_polygon(1,1,dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,10],[0,0]]]}))\r \`\`\`\r \r **Output**\r \r | distance |\r |------------|\r | |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-distance-point-to-polygon-function","geo-distance-point-to-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_geohash_neighbors","Calculates Geohash neighbors.",`Read more about [\`geohash\`](https://en.wikipedia.org/wiki/Geohash). \r \r ## Syntax\r \r \`geo_geohash_neighbors(\`*geohash*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *geohash* | string | ✓ | A geohash value as it was calculated by [geo_point_to_geohash()](geo-point-to-geohash-function.md). The geohash string must be between 1 and 18 characters.|\r \r ## Returns\r \r An array of Geohash neighbors. If the Geohash is invalid, the query produces a null result.`,`The following example calculates Geohash neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUchLzUzPSMovKlawVUhPzY8H4ozE4ox4uLiGenFpXl6luiYAmib90DAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print neighbors = geo_geohash_neighbors('sunny')\r \`\`\`\r \r **Output**\r \r |neighbors|\r |---|\r |["sunnt","sunpj","sunnx","sunpn","sunnv","sunpp","sunnz","sunnw"]|\r \r The following example calculates an array of input Geohash with its neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFIT83PSCzOULBVUC8uzcurVLfmKijKzCtRSE7NySkGCicWFSVWxifn5yUnlmgUJCZnx4NFNKAaNXVARsRDefF5qZnpGUn5RcVweU0AMyi9o2YAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let geohash = 'sunny';\r print cells = array_concat(pack_array(geohash), geo_geohash_neighbors(geohash))\r \`\`\`\r \r **Output**\r \r |cells|\r |---|\r |["sunny","sunnt","sunpj","sunnx","sunpn","sunnv","sunpp","sunnz","sunnw"]|\r \r The following example calculates Geohash polygons GeoJSON geometry collection.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WQwU5EIQxF9/MVhM3wkvELjCsT/QzSwcpjBiiBPiPGj7c8USdxR29vT2+JyMojrdBW9aCObcu5H+8PpYbMymGMTWSoFbp1lB2wKeCudlfMHFxOA2FnZTMGv56ptt/+cvhU6e0O3wvkl0llUtwL0qtpLMv88JRKF3SsCsXuKY/Vt2AmOztmZ4yRtqUENXzgCCn+BFe0MTTJOSG3YCFdGmXxncHbcYnRI4U+Kf2EwFuVpxZXQq5d1P+259l8pBgFGSgPdY4EbFJJEvkSLUsLVv7W/kAZ0g76yaeX5QvXq2jehQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let geohash = 'sunny';\r print cells = array_concat(pack_array(geohash), geo_geohash_neighbors(geohash))\r | mv-expand cells to typeof(string)\r | project polygons = geo_geohash_to_polygon(cells)\r | summarize arr = make_list(polygons)\r | project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", arr), "properties", bag_pack("name", "polygons"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{"type": "Feature","geometry": {"type": "GeometryCollection","geometries": [<br> {"type":"Polygon","coordinates":[[[42.451171875,23.6865234375],[42.4951171875,23.6865234375],[42.4951171875,23.73046875],[42.451171875,23.73046875],[42.451171875,23.6865234375]]]},<br> {"type":"Polygon","coordinates":[[[42.4072265625,23.642578125],[42.451171875,23.642578125],[42.451171875,23.6865234375],[42.4072265625,23.6865234375],[42.4072265625,23.642578125]]]},<br> {"type":"Polygon","coordinates":[[[42.4072265625,23.73046875],[42.451171875,23.73046875],[42.451171875,23.7744140625],[42.4072265625,23.7744140625],[42.4072265625,23.73046875]]]},<br> {"type":"Polygon","coordinates":[[[42.4951171875,23.642578125],[42.5390625,23.642578125],[42.5390625,23.6865234375],[42.4951171875,23.6865234375],[42.4951171875,23.642578125]]]},<br> {"type":"Polygon","coordinates":[[[42.451171875,23.73046875],[42.4951171875,23.73046875],[42.4951171875,23.7744140625],[42.451171875,23.7744140625],[42.451171875,23.73046875]]]},<br> {"type":"Polygon","coordinates":[[[42.4072265625,23.6865234375],[42.451171875,23.6865234375],[42.451171875,23.73046875],[42.4072265625,23.73046875],[42.4072265625,23.6865234375]]]},<br> {"type":"Polygon","coordinates":[[[42.4951171875,23.73046875],[42.5390625,23.73046875],[42.5390625,23.7744140625],[42.4951171875,23.7744140625],[42.4951171875,23.73046875]]]},<br> {"type":"Polygon","coordinates":[[[42.4951171875,23.6865234375],[42.5390625,23.6865234375],[42.5390625,23.73046875],[42.4951171875,23.73046875],[42.4951171875,23.6865234375]]]},<br> {"type":"Polygon","coordinates":[[[42.451171875,23.642578125],[42.4951171875,23.642578125],[42.4951171875,23.6865234375],[42.451171875,23.6865234375],[42.451171875,23.642578125]]]}]},<br> "properties": {"name": "polygons"}}|\r \r The following example calculates polygon unions that represent Geohash and its neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PQQ4CIQxF956C3TCJrlwaz0IQK+AwLYGOEePhhZFJXLhoF7/977cBWLijgRDEWQx5QSzDaReTRxZNzVXWKemiDKHRLKM2k1oV+fWNe2GBVC2ns1MI3roLpbyNx91bzI8DPKPGa2cyCS4R6CYz1yjbdmKiOxgWkUKxhC34l8uk+kSujGbJyzzr5F/QTqz7s55ABZ/rlR3yB9y5C3rCDZn7R7WPH3yyyNkSAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let h3cell = 'sunny';\r print cells = array_concat(pack_array(h3cell), geo_geohash_neighbors(h3cell))\r | mv-expand cells to typeof(string)\r | project polygons = geo_geohash_to_polygon(cells)\r | summarize arr = make_list(polygons)\r | project polygon = geo_union_polygons_array(arr)\r \`\`\`\r \r **Output**\r \r |polygon|\r |---|\r |{"type":"Polygon","coordinates":[[[42.4072265625,23.642578125],[42.451171875,23.642578125],[42.4951171875,23.642578125],[42.5390625,23.642578125],[42.5390625,23.686523437500004],[42.5390625,23.730468750000004],[42.5390625,23.7744140625],[42.4951171875,23.7744140625],[42.451171875,23.7744140625],[42.407226562499993,23.7744140625],[42.4072265625,23.73046875],[42.4072265625,23.6865234375],[42.4072265625,23.642578125]]]}|\r \r The following example returns true because of the invalid Geohash token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUxRsFXILM4rzcnRSE/NjwfijMTijPi81Mz0jKT8omIN9UR1TU0AbJVClTIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid = isnull(geo_geohash_neighbors('a'))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-geohash-neighbors-function","geo-geohash-neighbors-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_geohash_to_central_point","Calculates the geospatial coordinates that represent the center of a geohash rectangular area.",`Read more about [\`geohash\`](https://en.wikipedia.org/wiki/Geohash). \r \r ## Syntax\r \r \`geo_geohash_to_central_point(\`*geohash*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *geohash* | string | ✓ | A geohash value as it was calculated by [geo_point_to_geohash()](geo-point-to-geohash-function.md). The geohash string must be between 1 and 18 characters.|\r \r ## Returns\r \r The geospatial coordinate values in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the geohash is invalid, the query will produce a null result.\r \r > [!NOTE]\r > The GeoJSON format specifies longitude first and latitude second.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjIB5G2Cump+fFAnJFYnBFfkh+fnJpXUpSYEw+W1lAqLs3Lq1TS5KpRSK0oSc1LUUjOzy9KycxLLEktBmoGq9JDEkMozMnPS88sKU1JBSpDUhBtEKujkJNYgk3KMBYAnhfZ4psAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print point = geo_geohash_to_central_point("sunny")\r | extend coordinates = point.coordinates\r | extend longitude = coordinates[0], latitude = coordinates[1]\r \`\`\`\r \r **Output**\r \r |point|coordinates|longitude|latitude|\r |---|---|---|---|\r |{<br> "type": "Point",<br> "coordinates": [<br> 42.47314453125,<br> 23.70849609375<br> ]<br>}|[<br> 42.47314453125,<br> 23.70849609375<br>]|42.47314453125|23.70849609375|\r \r The following example returns a null result because of the invalid geohash input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzc9ILM5QsAWx4qG8+JL8+OTUvJKixJz4gnygMg2lRCVNAEhNnjMxAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print geohash = geo_geohash_to_central_point("a")\r \`\`\`\r \r **Output**\r \r |geohash|\r |---|\r ||\r \r ### Creating location deep-links for Bing Maps\r \r You can use the geohash value to create a deep-link URL to Bing Maps by pointing to the geohash center point:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32RS0/DMBCE7/kVo16cSGkNJ1BRhQRXuCD1gFBlGWdpLBI7st2G8vjvOA+gCgif7F17duYz51h7gg9Omy2UNUoGMjJoaxAslKN4xlXXvJUNCqJmXmnzjPXdDZ6crSGxJTtvrDYhqSig34lgRS0bsXMVVkhFX1wWByNrrXKIoENFy2FqhuQtQVzxGKenrAyh8UvO27ZdPMYLC2VrHtX8pW9WvdKCRY1hp6x1hY6OyT+cbpAz8XfvZJOj70VLgoyyBaWDjSwa+LhIOMe1NXtyoQtUSl/2AMgEckOoHNIUCCUZ7CIzNk3K/iXWwxmVp3jG8ghkymfEMx2XxlfiSLCz6mQ1ZP/WzL7Usi5kEwV/8q3A/P68fd0fzljyDnqJX19gMPXbaTqWcszu7Q7SEUpyNMs+AXziAcBEAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r // Use string concatenation to create Bing Map deep-link URL from a geo-point\r let point_to_map_url = (_point:dynamic, _title:string) \r {\r strcat('https://www.bing.com/maps?sp=point.', _point.coordinates[1] ,'_', _point.coordinates[0], '_', url_encode(_title)) \r };\r // Convert geohash to center point, and then use 'point_to_map_url' to create Bing Map deep-link\r let geohash_to_map_url = (_geohash:string, _title:string)\r {\r point_to_map_url(geo_geohash_to_central_point(_geohash), _title)\r };\r print geohash = 'sv8wzvy7'\r | extend url = geohash_to_map_url(geohash, "You are here")\r \`\`\`\r \r **Output**\r \r |geohash|url|\r |---|---|\r |sv8wzvy7|[https://www.bing.com/maps?sp=point.32.15620994567871_34.80245590209961_You+are+here](https://www.bing.com/maps?sp=point.32.15620994567871_34.80245590209961_You+are+here)|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-geohash-to-central-point-function","geo-geohash-to-central-point-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_geohash_to_polygon","Calculates the polygon that represents the geohash rectangular area.",`Read more about [geohash](https://en.wikipedia.org/wiki/Geohash). \r \r ## Syntax\r \r \`geo_geohash_to_polygon(\`*geohash*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *geohash* | string | ✓ | A geohash value as it was calculated by [geo_point_to_geohash()](geo-point-to-geohash-function.md). The geohash string must be between 1 and 18 characters.|\r \r ## Returns\r \r Polygon in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the geohash is invalid, the query will produce a null result.\r \r > [!NOTE]\r > Geohash edges are straight lines and aren't geodesics. If the geohash polygon is part of some other calculation, consider densifying it with [geo_polygon_densify()](geo-polygon-densify-function.md).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUXBPzc9ILM4IyM+pTM/PU7BVSE/Nj0+HCMaX5McXQCQ0lFKKTItKlTStAWzxQVs3AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print GeohashPolygon = geo_geohash_to_polygon("dr5ru");\r \`\`\`\r \r **Output**\r \r |GeohashPolygon|\r |---|\r |{<br>"type": "Polygon",<br>"coordinates": [<br>[[-74.00390625, 40.7373046875], [-73.9599609375, 40.7373046875], [-73.9599609375, 40.78125], [-74.00390625, 40.78125], [-74.00390625, 40.7373046875]]]<br>}|\r \r The following example assembles GeoJSON geometry collection of geohash polygons.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21RPW+DMBTc+RUWE0huEj4CplKnSo3UoR06VpXl0CdCYzCyXwaq/vgaMASltQc/3707n+3tlhxAnYQ5Devz2+sLKZWUUGKtWu9ToJ1HCYFsq3sNQlIiBY5V6L17xI67PNkU+T6OYkrS3SZnRbZj9EpFGcuKkWIRS6J0RbEiStmkSpM4T6j34f2QTqsvez6pXK6HoeKdqlvkqLiDh0RjGEr24V+V7Zd9pVqnnlFUMxE4aNCaS9MIXX/DrZpLg9ahEWfgsjYY3PDrg4+i4p0oz8F4Px/7DnxK/CcQeNG2nGBr0ADq3lKLYOk9OPJx+YEBdZIajN39EzB01jZIBxqnvqt5K5rZfHxOpzSrf/bD8Bc5oFVdCAIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r // Geohash GeoJSON collection\r datatable(lng:real, lat:real)\r [\r -73.975212, 40.789608,\r -73.916869, 40.818314,\r -73.989148, 40.743273,\r ]\r | project geohash = geo_point_to_geohash(lng, lat, 5)\r | project geohash_polygon = geo_geohash_to_polygon(geohash)\r | summarize geohash_polygon_lst = make_list(geohash_polygon)\r | project bag_pack(\r "type", "Feature",\r "geometry", bag_pack("type", "GeometryCollection", "geometries", geohash_polygon_lst),\r "properties", bag_pack("name", "Geohash polygons collection"))\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |{<br>"type": "Feature",<br>"geometry": {"type": "GeometryCollection","geometries": [<br>{"type": "Polygon", "coordinates": [[[-74.00390625, 40.78125], [-73.9599609375, 40.78125], [-73.9599609375, 40.8251953125],[ -74.00390625, 40.8251953125], [ -74.00390625, 40.78125]]]},<br>{"type": "Polygon", "coordinates": [[[ -73.9599609375, 40.78125], [-73.916015625, 40.78125], [-73.916015625, 40.8251953125], [-73.9599609375, 40.8251953125], [-73.9599609375, 40.78125]]]},<br>{"type": "Polygon", "coordinates": [[[-74.00390625, 40.7373046875], [-73.9599609375, 40.7373046875], [-73.9599609375, 40.78125], [-74.00390625, 40.78125], [-74.00390625, 40.7373046875]]]}]<br>},<br>"properties": {"name": "Geohash polygons collection"<br>}}|\r \r The following example returns a null result because of the invalid geohash input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUXBPzc9ILM4IyM+pTM/PU7BVSE/Nj0+HCMaX5McXQCQ0lBKVNK0B6T62yDMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print GeohashPolygon = geo_geohash_to_polygon("a");\r \`\`\`\r \r **Output**\r \r |GeohashPolygon|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-geohash-to-polygon-function","geo-geohash-to-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_children","Calculates the H3 cell children.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_children(\`*h3cell*\`,\`*resolution*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r | *resolution* | int | | Defines the requested children cells resolution. Supported values are in the range [1, 15]. If unspecified, an immediate children token will be calculated.|\r \r ## Returns\r \r Array of H3 Cell children tokens. If the H3 Cell is invalid or child resolution is lower than given cell, the query will produce a null result.\r \r > [!NOTE]\r >\r > A difference between cell resolution and its children can't be more than 5. A difference of 5 levels will be resulted in up to 16807 children tokens.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUjOyMxJKUrNU7BVSE/Nj88wTk7NyYmHiWqoW5gZJRoamBulQYC6JgDo0XQKNwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print children = geo_h3cell_children('862a1072fffffff')\r \`\`\`\r \r **Output**\r \r |children|\r |---|\r |[ "872a10728ffffff", "872a10729ffffff", "872a1072affffff", "872a1072bffffff", "872a1072cffffff", "872a1072dffffff", "872a1072effffff" ]|\r \r The following example counts children 3 levels below a given cell.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHIMI5PTs3JUbBVULcwM0o0NDA3SoMAdWsFroKizLwSheSMzJyUotS8+OT8UiDXViGxqCixMj4nNS+9JEMjPTU/PsMYZEg8TKEG1FQdBSTJnNSy1ByYjKaCtoKxpiYAhE7I7YIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let h3_cell = '862a1072fffffff'; \r print children_count = array_length(geo_h3cell_children(h3_cell, geo_h3cell_level(h3_cell) + 3))\r \`\`\`\r \r **Output**\r \r |children_count|\r |---|\r |343|\r \r The following example assembles GeoJSON geometry collection of H3 Cell children polygons.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PwU7DMAyG73sKq5e1EkiwSsCFExLwFlHovCZbEkeJhyji4XFouoKET8nv//9sx2QDw2Cs2ycM8AgjkjL9gM6pRW23D3c7fXtzvzvMte02X+Dfr/Ej6rBf00zAU0Q6tJmFOxZbTHTEoY74y2dSkdw0UmgXREnks/c62U8E0yujs1lcymUWgtcnVM5mnlO/hwj8mKmc8aZHFfVwajcg1ZS1mitonlHzOclzlsXvkdMkrUvg4n2pzSdyTuCWQlFrxGKW3z8LdhUtK0VMPPtWeND+B/7aQw1lGNYBXfcNNfE/VZEBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print children = geo_h3cell_children('862a1072fffffff')\r | mv-expand children to typeof(string)\r | project child = geo_h3cell_to_polygon(children)\r | summarize h3_hash_polygon_lst = make_list(child)\r | project geojson = bag_pack(\r "type", "Feature",\r "geometry", bag_pack("type", "GeometryCollection", "geometries", h3_hash_polygon_lst),\r "properties", bag_pack("name", "H3 polygons collection"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{ "type": "Feature", "geometry": { "type": "GeometryCollection", "geometries": [ ... ... ... ] }, "properties": { "name": "H3 polygons collection" }}|\r \r The following example returns true because of the invalid cell.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsjs8rzclRsAWyQAyN9NT8+Azj5NScnPjkjMyclKLUPA31xKRkdU1NABWsmhkyAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print is_null = isnull(geo_h3cell_children('abc'))\r \`\`\`\r \r **Output**\r \r |is_null|\r |---|\r |1|\r \r The following example returns true because the level difference between cell and its children is more than 5.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsjs8rzclRsAWyQAyN9NT8+Azj5NScnPjkjMyclKLUPLBYQT5QeXwJTFLDUEcBiCw1gZSppiYAGXNpOU0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print is_null = isnull(geo_h3cell_children(geo_point_to_h3cell(1, 1, 9), 15))\r \`\`\`\r \r **Output**\r \r |is_null|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-children-function","geo-h3cell-children-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_level","Calculates the H3 cell resolution.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_level(\`*h3cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r \r ## Returns\r \r An integer that represents H3 Cell level. Valid level is in range [0, 15]. If the H3 Cell is invalid, the query will produce a null result.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhOzcmJL0otVrBVSE/Nj88wBgvkpJal5mioW5gZJRoamBulQYC6JgA3an62NAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print cell_res = geo_h3cell_level('862a1072fffffff')\r \`\`\`\r \r **Output**\r \r |cell_res|\r |---|\r |6|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhOzcmJL0otVrBVSE/Nj88wBgvkpJal5miABArygariS2AyGoY6QGigqQkAmqtQej4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print cell_res = geo_h3cell_level(geo_point_to_h3cell(1,1,10))\r \`\`\`\r \r **Output**\r \r |cell_res|\r |---|\r |10|\r \r The following example returns true because of the invalid H3 Cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUyJL0otVrBVyCzOK83J0UhPzY/PME5OzcmJz0ktS83RUE9MSlbX1AQAUAf8gDMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid_res = isnull(geo_h3cell_level('abc'))\r \`\`\`\r \r **Output**\r \r |invalid_res|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-level-function","geo-h3cell-level-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_neighbors","Calculates the H3 cell neighbors.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_neighbors(\`*h3cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r \r ## Returns\r \r An array of H3 cell neighbors. If the H3 Cell is invalid, the query will produce a null result.\r \r > [!NOTE]\r > If more than immidiate neighbors are needed, please see [geo_h3cell_rings()](geo-h3cell-rings-function.md).`,`The following example calculates H3 cell neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUchLzUzPSMovKlawVUhPzY/PME5OzcmJhwtrqFuYGSUaGpgbpUGAuiYA0YTxRzkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print neighbors = geo_h3cell_neighbors('862a1072fffffff')\r \`\`\`\r \r **Output**\r \r |neighbors|\r |---|\r |["862a10727ffffff","862a10707ffffff","862a1070fffffff","862a10777ffffff","862a100dfffffff","862a100d7ffffff"]|\r \r The following example calculates an array of input H3 cell with its neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHIME5OzclRsFVQtzAzSjQ0MDdKgwB1a66Cosy8EgWQfDFQQWJRUWJlfHJ+XnJiiUZBYnJ2PFhEA2KCpo5Cemp+PIQTn5eamZ6RlF9UDJPVBADbK8PrbAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let h3cell = '862a1072fffffff';\r print cells = array_concat(pack_array(h3cell), geo_h3cell_neighbors(h3cell))\r \`\`\`\r \r **Output**\r \r |cells|\r |---|\r |["862a1072fffffff","862a10727ffffff","862a10707ffffff","862a1070fffffff","862a10777ffffff","862a100dfffffff","862a100d7ffffff"]|\r \r The following example calculates H3 cells polygons GeoJSON geometry collection.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WQ0UoDMRBF3/sVIS/NQgWtoIL4JOhnhGmcbtMmmZBMxRU/3sluigXzlLlz58xNArI63DsMQb2o9dPDFu5uH7f75ayfV7n4xKr1qxigFJiso+SATQZ3srNiFsKwUSOSXQqb0I+HHZV66Q6rHxU/b/ArQ/roSCbFU0bam8qyaWyeXOiIjlWmMI2U2t4rLJPtDTMj2kQ9xwjFf2MLKPYIJ7TBV8nYGddcgR0rJfHtYLTtFUa3EHqj9BsCn4tctbgicplE/W97781XCkGQnlJT+4jHKpUkkf/QsjRj4UX7AyWIM+iSTw/DL9SI6V2KAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let h3cell = '862a1072fffffff';\r print cells = array_concat(pack_array(h3cell), geo_h3cell_neighbors(h3cell))\r | mv-expand cells to typeof(string)\r | project polygons = geo_h3cell_to_polygon(cells)\r | summarize arr = make_list(polygons)\r | project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", arr), "properties", bag_pack("name", "polygons"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{"type": "Feature","geometry": {"type": "GeometryCollection","geometries": [<br> {"type":"Polygon","coordinates":[[[-74.0022744646159,40.735376026215022],[-74.046908029686236,40.727986222489115],[-74.060610712223664,40.696775140349033],[-74.029724408156682,40.672970047595463],[-73.985140983708192,40.680349049267583],[-73.971393761028622,40.71154393543933],[-74.0022744646159,40.735376026215022]]]},<br> {"type":"Polygon","coordinates":[[[-74.019448383546617,40.790439140236963],[-74.064132193843633,40.783038509825],[-74.077839665342211,40.751803958414136],[-74.046908029686236,40.727986222489115],[-74.0022744646159,40.735376026215022],[-73.988522328408948,40.766594382212254],[-74.019448383546617,40.790439140236963]]]},<br> {"type":"Polygon","coordinates":[[[-74.077839665342211,40.751803958414136],[-74.1224794808745,40.744383587828388],[-74.1361375042681,40.713156370029125],[-74.1052004095288,40.689365648097258],[-74.060610712223664,40.696775140349033],[-74.046908029686236,40.727986222489115],[-74.077839665342211,40.751803958414136]]]},<br> {"type":"Polygon","coordinates":[[[-74.060610712223664,40.696775140349033],[-74.1052004095288,40.689365648097258],[-74.118853750491638,40.658161927046628],[-74.0879619670209,40.634383824229609],[-74.043422283844933,40.641782462872115],[-74.029724408156682,40.672970047595463],[-74.060610712223664,40.696775140349033]]]},<br> {"type":"Polygon","coordinates":[[[-73.985140983708192,40.680349049267583],[-74.029724408156682,40.672970047595463],[-74.043422283844933,40.641782462872115],[-74.012581189358343,40.617990065981623],[-73.968047801220749,40.625358290164748],[-73.954305509472675,40.656529678451555],[-73.985140983708192,40.680349049267583]]]},<br> {"type":"Polygon","coordinates":[[[-73.926766604813565,40.718903205013063],[-73.971393761028622,40.71154393543933],[-73.985140983708192,40.680349049267583],[-73.954305509472675,40.656529678451555],[-73.909728515658443,40.663878222244435],[-73.895936872069854,40.69505685239637],[-73.926766604813565,40.718903205013063]]]},<br> {"type":"Polygon","coordinates":[[[-73.943844904976629,40.773964402038523],[-73.988522328408948,40.766594382212254],[-74.0022744646159,40.735376026215022],[-73.971393761028622,40.71154393543933],[-73.926766604813565,40.718903205013063],[-73.912969923470314,40.750105305345329],[-73.943844904976629,40.773964402038523]]]}]},<br> "properties": {"name": "polygons"}}|\r \r The following example calculates polygon unions that represent H3 cell and its neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PwQrCMAyG73uK3taBgk5QQXyWUmvW1bVNaTtx4sPbbh14MIdA8v/5kmiIpD8I0JpcSX0+tny/O7XdEvWlcl7ZSLIekoF7zycm0AoeqeNiYHOHLoRmQyQgWwpmQcn+hj6salN9iHlu4eW4vRdkRBInB9jRENMmmT3O4wNEJA71JNHmvT/YiKwIdEbkiTAaw716Qz4w2Q0fgGkV0o2F8YdbsKNVaFdkKP+k3HwBry+HcRoBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let h3cell = '862a1072fffffff';\r print cells = array_concat(pack_array(h3cell), geo_h3cell_neighbors(h3cell))\r | mv-expand cells to typeof(string)\r | project polygons = geo_h3cell_to_polygon(cells)\r | summarize arr = make_list(polygons)\r | project polygon = geo_union_polygons_array(arr)\r \`\`\`\r \r **Output**\r \r |polygon|\r |---|\r |{<br> "type": "Polygon",<br> "coordinates": [[[ -73.926766604813565, 40.718903205013063],[ -73.912969923470314, 40.750105305345329],[ -73.943844904976629, 40.773964402038523],[ -73.988522328408948, 40.766594382212254],[ -74.019448383546617, 40.79043914023697],[ -74.064132193843633, 40.783038509825005],[ -74.077839665342211, 40.751803958414136],[ -74.1224794808745, 40.744383587828388],[ -74.1361375042681, 40.713156370029125],[ -74.1052004095288, 40.689365648097251],[ -74.118853750491638, 40.658161927046628],[ -74.0879619670209, 40.6343838242296],[ -74.043422283844933, 40.641782462872115],[ -74.012581189358343, 40.617990065981623],[ -73.968047801220749, 40.625358290164755],[ -73.954305509472675, 40.656529678451555],[ -73.909728515658443, 40.663878222244442],[ -73.895936872069854, 40.695056852396377],[ -73.926766604813565, 40.718903205013063]]]}|\r \r The following example returns true because of the invalid H3 Cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUxRsFXILM4rzcnRSE/Nj88wTk7NyYnPS81Mz0jKLyrWUE9MSlbX1AQAU7dmMDMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid = isnull(geo_h3cell_neighbors('abc'))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-neighbors-function","geo-h3cell-neighbors-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_parent","Calculates the H3 cell parent.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_parent(\`*h3cell*\`,\`*resolution*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r | *resolution* | int | | Defines the requested children cells resolution. Supported values are in the range [0, 14]. If unspecified, an immediate children token will be calculated.|\r \r ## Returns\r \r H3 Cell parent token \`string\`. If the H3 Cell is invalid or parent resolution is higher than given cell, the query will produce an empty result.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShILErNK4lPTs3JUbBVSE/Nj88wBnHiIRIa6hZmRomGBuZGaRCgrgkAkZ+TCTgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print parent_cell = geo_h3cell_parent('862a1072fffffff')\r \`\`\`\r \r **Output**\r \r |parent_cell|\r |---|\r |852a1073fffffff|\r \r The following example calculates cell parent at level 1.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShILErNK4lPTs3JUbBVSE/Nj88wBnHiIRIa6hZmRomGBuZGaRCgrqNgqAkA+3YzFzsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print parent_cell = geo_h3cell_parent('862a1072fffffff', 1)\r \`\`\`\r \r **Output**\r \r |parent_cell|\r |---|\r |812a3ffffffffff|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShILErNK4kvSi1WsFVIT82PzzBOTs3Jic9JLUvN0UASgCjUAAsV5AO1xpfA5DQMdYDQQBMIAJou0OFVAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print parent_res = geo_h3cell_level(geo_h3cell_parent((geo_point_to_h3cell(1,1,10))))\r \`\`\`\r \r **Output**\r \r |parent_res|\r |---|\r |9|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShILErNK4kvSi1WsFVIT82PzzBOTs3Jic9JLUvN0UASgCgEixTkA3XGl8CkNAx1gNBAU0fBWFMTAG9zfXpWAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print parent_res = geo_h3cell_level(geo_h3cell_parent(geo_point_to_h3cell(1,1,10), 3))\r \`\`\`\r \r **Output**\r \r |parent_res|\r |---|\r |3|\r \r The following example produces an empty result because of the invalid cell input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUxRsFXILE7NLSip1EhPzY/PME5OzcmJL0gsSs0r0VA3NDJW19QEAJzHefMxAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid = isempty(geo_h3cell_parent('123'))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|\r \r The following example produces an empty result because of the invalid parent resolution.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUxRsFXILE7NLSip1EhPzY/PME5OzcmJL0gsSs0r0VC3MDNKNDQwN0qDAHUdBUMDA01NALIyRtVCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid = isempty(geo_h3cell_parent('862a1072fffffff', 100))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|\r \r The following example produces an empty result because parent can't be of a higher resolution than child.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUxRsFXILE7NLSip1EhPzY/PME5OzcmJL0gsSs0r0VC3MDNKNDQwN0qDAHUdBUNTTU0A3k3StEEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid = isempty(geo_h3cell_parent('862a1072fffffff', 15))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-parent-function","geo-h3cell-parent-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_rings","Calculates the H3 cell Rings.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_rings(\`*h3cell*\`,\`*distance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r | *distance* | int | ✓ | Defines the maximum ring distance from given cell. Valid distance is in range [0, 142].|\r \r ## Returns\r \r An ordered array of ring arrays where first ring contains the original cell, second ring contains neighboring cells, and so on. If either the H3 Cell or distance is invalid, the query produces a null result.\r \r > [!NOTE]\r >\r > * For H3 Cell immediate neighbors only, please see [geo_h3cell_neighbors()](geo-h3cell-neighbors-function.md).\r > * A cell might be not present in the ring if pentagonal distortion was encountered.`,`The following example produces rings up to distance 2.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQAS6cUKtgrpqfnxGcbJqTk58WAhDXULM8M0CwtLkzQIUNdRMNIEAJ04a1w0AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print rings = geo_h3cell_rings('861f8894fffffff', 2)\r \`\`\`\r \r **Output**\r \r |rings|\r |---|\r |[<br> ["861f8894fffffff"],<br> ["861f88947ffffff","861f8895fffffff","861f88867ffffff","861f8d497ffffff","861f8d4b7ffffff","861f8896fffffff"],<br> ["861f88967ffffff","861f88977ffffff","861f88957ffffff","861f8882fffffff","861f88877ffffff","861f88847ffffff","861f8886fffffff","861f8d49fffffff","861f8d487ffffff","861f8d4a7ffffff","861f8d59fffffff","861f8d597ffffff"]<br> ]|\r \r The following example produces all cells at level 1 (all neighbors).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUchLzUzPSMovKlawVUhPzY/PME5OzcmJB8qlF2uoW5gZpllYWJqkQYC6joKhZrRhLACfNYVMOwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print neighbors = geo_h3cell_rings('861f8894fffffff', 1)[1]\r \`\`\`\r \r **Output**\r \r |neighbors|\r |---|\r |["861f88947ffffff", "861f8895fffffff", "861f88867ffffff", "861f8d497ffffff", "861f8d4b7ffffff","861f8896fffffff"]|\r \r The following example produces list of cells from all rings.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQAS6cUKtgrpqfnxGcbJqTk58WAhDXULM8M0CwtLkzQIUNdRMNTkqlHILdNNLCjIqYTqzM9T4NLgUlAoLs3NTSzKrEpVAJkBMjE3MTs1PiezuEQDrFKTSxMAkXmI93IAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print rings = geo_h3cell_rings('861f8894fffffff', 1)\r | mv-apply rings on \r (\r summarize cells = make_list(rings)\r )\r \`\`\`\r \r **Output**\r \r |cells|\r |---|\r |["861f8894fffffff","861f88947ffffff","861f8895fffffff","861f88867ffffff","861f8d497ffffff","861f8d4b7ffffff","861f8896fffffff"]|\r \r The following example assembles GeoJSON geometry collection of all cells.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1VPS07DMBDd5xSjbGpLZVEVobBgVQm4hWXCJKT1T/a0ahCHZ5yYumRhxe/vECdHwMeY4AVG9Opr36MxaoHEpnvaDV33/Dis32YLO9n8gL086BDMXJzeQSMagHS2VsfpG8HqEyozJRKLQjbFhdeg3SdkZq0A8kBzQD+IRBnJwhD9EXuC4M08cvi/ZeRVwUWNya7aXnhlErG3bin4fQUHH9NS8aFHFXR/yg8BaPOodgvtK2o6R/5dYdZbpDgzdTPctG+FPHhjOHzyLqPFMmHi2900WSJ5SsBIK19DnbZL6Pv+z5Sgr8FS/gJRaHlovAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print rings = geo_h3cell_rings('861f8894fffffff', 1)\r | mv-apply rings on \r (\r summarize make_list(rings)\r )\r | mv-expand list_rings to typeof(string)\r | project polygon = geo_h3cell_to_polygon(list_rings)\r | summarize polygon_lst = make_list(polygon)\r | project geojson = bag_pack(\r "type", "Feature",\r "geometry", bag_pack("type", "GeometryCollection", "geometries", polygon_lst),\r "properties", bag_pack("name", "H3 polygons collection"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{ "type": "Feature", "geometry": { "type": "GeometryCollection", "geometries": [ ... ... ... ]}, "properties": { "name": "H3 polygons collection" }}|\r \r The following example returns true because of the invalid cell.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsjs8rzclRsAWyQAyN9NT8+Azj5NScnHiggvRiDfXEpGR1HQVjTU0AZygYaTIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print is_null = isnull(geo_h3cell_rings('abc', 3))\r \`\`\`\r \r **Output**\r \r |is_null|\r |---|\r |1|\r \r The following example returns true because of the invalid distance.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsjs8rzclRsAWyQAyN9NT8+Azj5NScnHiggvRiDXULM8M0CwtLkzQIUNdRMDQ10NQEAAa/KwhAAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print is_null = isnull(geo_h3cell_rings('861f8894fffffff', 150))\r \`\`\`\r \r **Output**\r \r |is_null|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-rings-function","geo-h3cell-rings-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_to_central_point","Calculates the geospatial coordinates that represent the center of an H3 Cell.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_to_central_point(\`*h3cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r \r ## Returns\r \r The geospatial coordinate values in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the H3 cell token is invalid, the query will produce a null result.\r \r > [!NOTE]\r > The GeoJSON format specifies longitude first and latitude second.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgwTk7NyVGwVUhPzY+HcOJL8uOTU/NKihJz4gvygYo0lCzMjBINDcyN0iBASRMA4+TrCj0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print h3cell = geo_h3cell_to_central_point("862a1072fffffff")\r \`\`\`\r \r **Output**\r \r |h3cell|\r |---|\r |{<br>"type": "Point",<br>"coordinates": [-74.016008479792447, 40.7041679083504]<br>}|\r \r The following example returns the longitude of the H3 Cell center point:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjJz0vPLClNSVWwVUhPzY/PME5OzcmJL8mPT07NKylKzIkvyAeq01CyMDNKNDQwN0qDACVNveT8/KKUzLzEktTiaINYALPfSvhPAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print longitude = geo_h3cell_to_central_point("862a1072fffffff").coordinates[0]\r \`\`\`\r \r **Output**\r \r |longitude|\r |---|\r |-74.0160084797924|\r \r The following example returns a null result because of the invalid H3 cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgwTk7NyVGwVUhPzY+HcOJL8uOTU/NKihJz4gvygYo0lAyVNAFOq4ZHLwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print h3cell = geo_h3cell_to_central_point("1")\r \`\`\`\r \r **Output**\r \r |h3cell|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-to-central-point-function","geo-h3cell-to-central-point-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_h3cell_to_polygon","Calculates the polygon that represents the H3 Cell rectangular area.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_h3cell_to_polygon(\`*h3cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *h3cell* | string | ✓ | An H3 Cell token value as it was calculated by [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).|\r \r ## Returns\r \r Polygon in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the H3 Cell is invalid, the query will produce a null result.\r \r > [!NOTE]\r > H3 Cell polygon edges are straight lines and aren't geodesics. If an H3 Cell polygon is part of some other calculation, consider densifying it with [geo_polygon_densify()](geo-polygon-densify-function.md).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzY/PME5OzcmJL8mPL8jPqUzPz9NQsjAzSjQ0MDdKgwAlTQDHS0haLgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print geo_h3cell_to_polygon("862a1072fffffff")\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |{<br>"type": "Polygon",<br>"coordinates": [[[-74.0022744646159, 40.735376026215022], [-74.046908029686236, 40.727986222489115], [-74.060610712223664, 40.696775140349033],[ -74.029724408156682, 40.672970047595463], [-73.985140983708192, 40.680349049267583],[ -73.971393761028622, 40.71154393543933], [-74.0022744646159, 40.735376026215022]]]<br>}|\r \r The following example assembles GeoJSON geometry collection of H3 Cell polygons.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22RwU6EMBCG7zzFhBMkdRcsQjHxZOIaD3rwaEzTxQngFkra7gHjw1ugYTe7tpfp/PPN/G23W3imUKGUsEP18v72CpWSEivbqj74EtbtvcRI9vW9RiEJSGHnKA4+AnDrpqCb8i7PGSWQJRuWFGVSkJOU5iwvFyllNM3OJFamGZulIqO3BSXBZ/ALg1bfbj40lDfCNPAANSo+qLa33Cre0MntZGj2QiCPryFXLsda9R5emIn2+cjXTag5dp3Q7Q9ewlwa6xp04oBctsZGF/r53L2o+SCqQzTfLrTjgCGB8AmFPWoXLmnnpUOrRyetwFq78+Lj+v5T1iMtGnf6x2DsWzsjA2q71J2a96Kbm7tP9pA5++Awjv8A8oXQEwECAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r // H3 cell GeoJSON collection\r datatable(lng:real, lat:real)\r [\r -73.956683, 40.807907,\r -73.916869, 40.818314,\r -73.989148, 40.743273,\r ]\r | project h3_hash = geo_point_to_h3cell(lng, lat, 6)\r | project h3_hash_polygon = geo_h3cell_to_polygon(h3_hash)\r | summarize h3_hash_polygon_lst = make_list(h3_hash_polygon)\r | project bag_pack(\r "type", "Feature",\r "geometry", bag_pack("type", "GeometryCollection", "geometries", h3_hash_polygon_lst),\r "properties", bag_pack("name", "H3 polygons collection"))\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |{<br>"type": "Feature",<br>"geometry": {"type": "GeometryCollection", "geometries": [{"type": "Polygon","coordinates": [[[-73.9609635556213, 40.829061732419916], [-74.005691351383675, 40.821680937801922], [-74.019448383546617, 40.790439140236963], [-73.988522328408948, 40.766594382212254], [-73.943844904976629, 40.773964402038523], [-73.930043202964953, 40.805189944379514], [-73.9609635556213, 40.829061732419916]]]},<br>{"type": "Polygon", "coordinates": [[[-73.902385078754875, 40.867671551513595], [-73.94715685019348, 40.860310688399885], [-73.9609635556213, 40.829061732419916], [-73.930043202964953, 40.805189944379514], [-73.885321931061725, 40.812540084842404 ], [-73.871470551071766, 40.843772725733125], [ -73.902385078754875, 40.867671551513595]]]},<br>{"type": "Polygon","coordinates": [[[-73.943844904976629, 40.773964402038523], [-73.988522328408948, 40.766594382212254], [-74.0022744646159, 40.735376026215022], [-73.971393761028622, 40.71154393543933], [-73.926766604813565, 40.718903205013063], [ -73.912969923470314, 40.750105305345329 ], [-73.943844904976629, 40.773964402038523]]]}]<br>},<br>"properties": {"name": "H3 polygons collection"}<br>}|\r \r The following example returns a null result because of the invalid H3 Cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzY/PME5OzcmJL8mPL8jPqUzPz9NQclDSBAA3CNqGIAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print geo_h3cell_to_polygon("@")\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-h3cell-to-polygon-function","geo-h3cell-to-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_info_from_ip_address","Retrieves geolocation information about IPv4 or IPv6 addresses.",`## Syntax\r \r \`geo_info_from_ip_address(\`*IpAddress* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *IpAddress*| string | ✓ | IPv4 or IPv6 address to retrieve geolocation information about.|\r \r ## Returns\r \r A dynamic object containing the information on IP address whereabouts (if the information is available). The object contains the following fields:\r \r |Name| Type | Description|\r |--|--|--|\r |\`country\`|string|Country name|\r |\`state\`|string|State (subdivision) name|\r |\`city\`|string|City name|\r |\`latitude\`|real|Latitude coordinate|\r |\`longitude\`|real|Longitude coordinate|\r \r > [!NOTE]\r >\r > * IP geolocation is inherently imprecise; locations are often near the center of the population. Any location provided by this function should not be used to identify a particular address or household.\r > * This function uses GeoLite2 data created by MaxMind, available from [https://www.maxmind.com](https://www.maxmind.com).\r > * The function is also built on the [MaxMind DB Reader](https://github.com/oschwald/maxminddb-rust) library provided under [ISC license](https://github.com/oschwald/maxminddb-rust/blob/main/LICENSE).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsiM/JT04syczPs01PzY/PzEvLj08rys+NB8okpqQUpRYXa6gbGeiZGusZGRjrmRqoawIAlfxqOjoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print ip_location=geo_info_from_ip_address('20.53.203.50')\r \`\`\`\r \r **Output**\r \r |ip_location|\r |--|\r |\`{"country": "Australia", "state": "New South Wales", "city": "Sydney", "latitude": -33.8715, "longitude": 151.2006}\`|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAw3JwQqAIAwA0F/pZt1MCWTQt4w1XQzKifr/1Lu+1rXORRs+xjTV6nkXQ61iKN1e/Idy7mWM1QXyEUJKHmQPDCmCEBe4vGeAcOTitg/tI4d9TwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print ip_location=geo_info_from_ip_address('2a03:2880:f12c:83:face:b00c::25de')\r \`\`\`\r \r **Output**\r \r |ip_location|\r |--|\r |\`{"country": "United States", "state": "Florida", "city": "Boca Raton", "latitude": 26.3594, "longitude": -80.0771}\`|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-info-from-ip-address-function","geo-info-from-ip-address-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_intersection_2lines","Calculates the intersection of two lines or multilines.",`## Syntax\r \r \`geo_intersection_2lines(\`*lineString1*\`,\`*lineString2*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString1* | dynamic | ✓ | A line or multiline in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *lineString2* | dynamic | ✓ | A line or multiline in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Intersection in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If LineString or a MultiLineString are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2],..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2,..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r > [!TIP]\r >\r > Use literal LineString or MultiLineString for better performance.`,`The following example calculates intersection between two lines. In this case, the result is a point.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52QsQqDMBRF935FyKSQikbjSyz9g24dRUT0IQFNRLNI6b83rUXs2uEt58I9lzegI4M2eHezNn1CrqRbTTPqNnhQt05IC3rbY8poa+3cadM4XGhRlmdIIwVSccWyOAIpEiEqtmEZqzjdMM95UlXP8HIafnz8L5+3KLEVSw67DzIh+AeDgvzrm3yPI/5wXrB12hqv7NHWR1Tz96QlODyCHVeGL/xzpu8mAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString1 = dynamic({"type":"LineString","coordinates":[[-73.978929,40.785155],[-73.980903,40.782621]]});\r let lineString2 = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});\r print intersection = geo_intersection_2lines(lineString1, lineString2)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "Point","coordinates": [-73.979837116670978,40.783989289772165]}|\r \r The following example calculates intersection between two lines. In this case, the result is a line.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHIycxLVbBVSKnMS8zNTNaoViqpLEhVslLyAYoHlxRl5qUr6Sgl5+cXpWTmJZakFitZRUfrmhvrWZpbWBpZ6pgY6JlbmBqamsbqQIQtDCwNjCHCRmZGhrGxtZrWXAVAc0oUgDi1qDg1uSQzPw9oZXpqfjyyULwRyC3FGiBSB+wuTQCXmF3SoQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"LineString","coordinates":[[-73.978929,40.785155],[-73.980903,40.782621]]});\r print intersection = geo_intersection_2lines(line, line)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "LineString","coordinates": [[ -73.978929, 40.785155],[ -73.980903, 40.782621]]}|\r \r The following two lines don't intersect.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHIycxLDS4pysxLN1SwVUipzEvMzUzWqFYqqSxIVbJS8oFLK+koJefnF6Vk5iWWpBYrWUVHG+ooGMbqRBvpKBjFxtZqWnPloJhnRKp5xjoKxkDzTHQUTCDmFQDVlSgAcWpRcWpySWZ+HtDI9NT8eGSheCOQlcUaSB7RQXaFJgAdJFio5gAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString1 = dynamic({"type":"LineString","coordinates":[[1, 1],[2, 2]]});\r let lineString2 = dynamic({"type":"LineString","coordinates":[[3, 3],[4, 4]]});\r print intersection = geo_intersection_2lines(lineString1, lineString2)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "GeometryCollection", "geometries": []}|\r \r The following example will return a null result because one of lines is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5WPsQoDIRBE+3zFYqVgo9ddyB+kSylyyLkcC2Y91ASOkH+PIRAuZeo3vJlJ2CAR46UV4sXACeLG4UqzfIi2rShGcf5iocWcc4nEoWEVo3NGg/HaWQ3W+6c6HtKPz/7rGzQMH9HaAw2I7yFR7BqqfEtJLpinDrBUnBtlnuy7rcrdB70foNQL22IrxuIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString1 = dynamic({"type":"LineString","coordinates":[[1, 1],[2, 2]]});\r let lineString2 = dynamic({"type":"LineString","coordinates":[[3, 3]]});\r print invalid = isnull(geo_intersection_2lines(lineString1, lineString2))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-intersection-2lines-function","geo-intersection-2lines-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_intersection_2polygons","Calculates the intersection of two polygons or multipolygons.",`## Syntax\r \r \`geo_intersection_2polygons(\`*polygon1*\`,\`*polygon1*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon1* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *polygon2* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Intersection in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If Polygon or a MultiPolygon are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ],..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon contains its vertices.\r \r > [!TIP]\r >\r > * Using literal Polygon or a MultiPolygon may result in better performance.`,`The following example calculates intersection between two polygons. In this case, the result is a polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52STWrDMBBG9z2F0SoBN8yPRjNK6R26NyaExARDYoXEG1N696rEjr1qoQhpIT3mmzfo3PTFNZ2HU+qweC+OQ7e/tIfVp+uHa+O27uPx5kp3SOl2bLt939zdtqqqV+VNDAyRVTRQ9KWHjaqPZh6UiU3qcqIkiFHwGEaIjRFRDSL6J0UgDCEfGOjBsXr5AQ1lUQ0DqGEuITiFckTinBFtzvy1s7r+Wr+9nGd7+o89IbNQMCAYzQS8kIH3in7hj3mBicg0AMkGECIBLzACzT1SLqs6chjykDgaRZ6xP1Ifbtdb2/VF3s3t3hz6NnXZ8NSk3fJqR6P+fTX9gvI5kfU3hDmIFB0CAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon1 = dynamic({"type":"Polygon","coordinates":[[[-73.9630937576294,40.77498840732385],[-73.963565826416,40.774383111780914],[-73.96205306053162,40.773745311181585],[-73.96160781383514,40.7743912365898],[-73.9630937576294,40.77498840732385]]]});\r let polygon2 = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});\r print intersection = geo_intersection_2polygons(polygon1, polygon2)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "Polygon", "coordinates": [[[-73.962105776437156,40.774591360999679],[-73.962642403166868,40.774807020251778],[-73.9631313085556,40.774578106920352],[-73.962079882621765,40.774167803982927],[-73.962105776437156,40.774591360999679]]]}|\r \r The following example calculates intersection between two polygons. In this case, the result is a point.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoyM+pTM/PM1SwVUipzEvMzUzWqFYqqSxIVbJSCoDIKekoJefnF6Vk5iWWpBYrWUVHRxvpmJjG6kQbQChDHRMTIAUWjI2t1bTmykGYbESaycZIZoEpYyAFFoSYXFCUmVeiAMSpRcWpySWZ+XlA89NT8+ORheKNoJYXa8D8pwN3jyYAACvP9/cAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});\r let polygon2 = dynamic({"type":"Polygon","coordinates":[[[3,44],[2,45],[2,43],[3,44]]]});\r print intersection = geo_intersection_2polygons(polygon1, polygon2)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "Point","coordinates": [2,45]}|\r \r The following two polygons intersection is a collection.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3VQQQqDMBC89xUhJ4UQTKItWvqEQu9LENEggTQRTQ9S+vem0bYe2sMyuzPLMLtGeTQ4M/fOMnRC3Wybq26TO/bzoHCFL4uGCW6dGzttG68mXAEAJ3khCWQLMJLnASIp5SM97szXmf9yPt+M1//tQWwcI4gAkZShAWCUlS+R8n0MQLOsCCot4yKjotjHURziuFleAw6jth6FUuOkWq+dDTF75eotVfP1hil5v4l8zkqfcwvpPD4BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});\r let polygon2 = dynamic({"type":"MultiPolygon","coordinates":[[[[3,44],[2,45],[2,43],[3,44]]],[[[1.192,45.265],[1.005,44.943],[1.356,44.937],[1.192,45.265]]]]});\r print intersection = geo_intersection_2polygons(polygon1, polygon2)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "GeometryCollection","geometries": [<br>{ "type": "Point", "coordinates": [2, 45]},<br>{ "type": "Polygon", "coordinates": [[[1.3227075526410679,45.003909145068739],[1.0404565374899824,45.004356403066552],[1.005,44.943],[1.356,44.937],[1.3227075526410679,45.003909145068739]]]}]}|\r \r The following two polygons don't intersect.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoyM+pTM/PM1SwVUipzEvMzUzWqFYqqSxIVbJSCoDIKekoJefnF6Vk5iWWpBYrWUVHRxvpmJjG6kQbQChDHRMTIAUWjI2t1bTmykGYbESaycYQs4whJgONNIbwTKAmFxRl5pUoAHFqUXFqcklmfh7Q/PTU/HhkoXgjqOXFGjD/6cDdowkAMQjV5/cAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});\r let polygon2 = dynamic({"type":"Polygon","coordinates":[[[3,44],[3,45],[2,43],[3,44]]]});\r print intersection = geo_intersection_2polygons(polygon1, polygon2)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "GeometryCollection", "geometries": []}|\r \r The following example finds all counties in USA that intersect with area of interest polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WQT0vEMBDF7/spYk8t1JLmT5Ou7EHEoyKIp1JK6c52K92kpFmkqN/dWbeyRQ+SSzL5zZt5rwdPagd1ZXdVZzw4GD3ZkO1k6kPXhO+BnwYI1sGT7afWmiAOGmvdtjO1hzFYF0VxrXiSZyzlXLJMU0azWNBEKUmFZJoKoVIhy3jmeIqHainljAmpdEqznFG+wBhVudYMZZWauTRTmvJcs5xfsH+mluVndLN6ea7u7NH4DsbVBxmcfYXGEzQI6HQHtT+i6wTrA7gTlDzePtzHpDn1TEukBXsA76ZfKjH5Tm7Ed2cNNiBXLUsVG87xjeFZNP6TeYSab3u84o+rp6oH0/p9uFT5GY8bRuRqQ+gXegS8Q7wBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});\r US_Counties\r | project name = features.properties.NAME, county = features.geometry\r | project name, intersection = geo_intersection_2polygons(county, area_of_interest)\r | where array_length(intersection.geometries) != 0\r \`\`\`\r \r **Output**\r \r |name|intersection|\r |---|---|\r |New York|{"type": "Polygon","coordinates": [[[-73.96213352680206, 40.775045280447145], [-73.9631313085556, 40.774578106920345], [-73.96207988262177,40.77416780398293],[-73.96213352680206, 40.775045280447145]]]}|\r \r The following example will return a null result because one of the polygons is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42QzUrFMBCF9z5FyaqFesnfTJIrvoP7UkpowyUYk5JGoYjvbmstiLhwNcycMx9zJrhSjS6WbMMw2/w8zCmstxSrx2pao33xY/1Oyjo7ciVPh0RaMqaUJx9tcQu5dl13r8TFSAOtpBdl0PTtMQJNFUfkAgTwXdSUokYqAJnh7LRpTpmRXEqhpf5ioOaAigsKSqnTpgRTWuOGAmEOmwRgAoHu5bT9vKPvP5qHu7CF9PHNBj/9J9++Mmcft6UlvoZQ31wattblxY3Fpzjwb8pS/8K2fz6zaT4BPdFP/2cBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park_polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r let invalid_polygon = dynamic({"type":"Polygon"});\r print isnull(geo_intersection_2polygons(invalid_polygon, central_park_polygon))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-intersection-2polygons-function","geo-intersection-2polygons-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_intersection_line_with_polygon","Calculates the intersection of a line or a multiline with a polygon or a multipolygon.",`## Syntax\r \r \`geo_intersection_line_with_polygon(\`*lineString*\`,\`*polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *polygon* | dynamic | ✓ | A Polygon or MultiPolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Intersection in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If lineString or a multiLineString or a polygon or a multipolygon are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line or a polygon edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) or a [geo_polygon_densify()](geo-polygon-densify-function.md) in order to convert planar edges to geodesics.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N],..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon contains its vertices.\r \r > [!TIP]\r >\r > Use literal LineString or MultiLineString for better performance.`,`The following example calculates intersection between line and polygon. In this case, the result is a line.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32Qy2rDMBBF9/0Ko1UCbtBrHk7oH3RR6DIYExzhClzJOIJgSv+9bhQnhZYuZnNnmDNzepeK3gf3mkYfuuKpOE7h8O7b1YdI0+DEVjzfuqIUbYzj0YdDciex3e8fyWwqBlVBaeWGmDVBXeaYLIC+xFQRqrr+XO8e+hk3xH7qYviL9ZJbv0HXlUpXEpgNcZWBwBJQKWRCWsAspQWjGKVZDgBNyMayNAj3A6WURul5gyLMcwwa0YABRHsb+x+a/xpmP6mYy40n1yZ/ea9zsfkZNd+im7NPb83Vwequvly8rL8Ayu2maJMBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});\r print intersection = geo_intersection_line_with_polygon(lineString, polygon)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "LineString","coordinates": [[-73.975611956578192,40.78060906714618],[-73.974552,40.779761]]}|\r \r The following example calculates intersection between line and polygon. In this case, the result is a multiline.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21Qy2rDMBC89yuETgkoi6SVIiklf9BDoUdjTHCEI3Al4wiCKf332lZfoT3sZXZmdmd6n0kfon/JY4gdOZLzFE+vod280TwNnh7o0/eWMtqmNJ5DPGV/pYeq2gnBQUvJCDoQztas2jkBSlpGFAdreV2/bx8f+vnKkPqpS/G/E89l9dd/duMg98hwDwZXe8ElcCWY0iCNKogDRL1wtDTrC3eiGVlIHNAhUwIM10WGINAxtODkijgDWlu2RBFYKHeikmWYq8hkHj9efZvDGqnzqfkNNUunzS3kS/OZe/PTMvvqYvsBzDzDun4BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-110.522, 39.198],[-91.428, 40.880]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-90.263,36.738],[-102.041,45.274],[-109.335,36.527],[-90.263,36.738]],[[-100.393,41.705],[-103.139,38.925],[-97.558,39.113],[-100.393,41.705]]]});\r print intersection = geo_intersection_line_with_polygon(lineString, polygon)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "MultiLineString","coordinates": [[[ -106.89353655881905, 39.769226209776306],[ -101.74448553679453, 40.373506008712525]],[[-99.136499431328858, 40.589336512699994],[-95.284527737311791, 40.799060242246348]]]}|\r \r The following line and polygon don't intersect.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32QwWrDMBBE7/0KoVMCalhJ3tU6oX/QQ6FHY0xwhCtwJeMIgin997p2kxZaetjLzmOGmd5n0Yfon/MYYicexGmKx9fQbt5kngYv9/Lxpkol25TGU4jH7M9yX1VaCV2ryihh6vp9e7jrZ7sh9VOX4l9eT6v026i6d3ZXOm1KQGbruFQF7BwjA5LWxI7cHLRQDFCg1Uxg0SyYQ+OIbcFgCfHKOQCw2swO2tHKMRoiixaJihv2f+jaa5j7ZzGfH8++zWGp1/nU/Hw1n0M2l5Bfmq8NNt/Tqusu2w865byEcwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[1, 1],[2, 2]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});\r print intersection = geo_intersection_line_with_polygon(lineString, polygon)\r \`\`\`\r \r **Output**\r \r |intersection|\r |---|\r |{"type": "GeometryCollection","geometries": []}|\r \r The following example finds all roads in the NYC GeoJSON roads table that intersects with the area of interest literal polygon.\r \r \`\`\`\r let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});\r NY_Manhattan_Roads\r | project name = features.properties.Label, road = features.geometry\r | project name, intersection = geo_intersection_line_with_polygon(road, area_of_interest)\r | where array_length(intersection.geometries) != 0\r \`\`\`\r \r **Output**\r \r |name|intersection|\r |---|---|\r |CentralParkW|{"type":"MultiLineString","coordinates":[[[-73.958295846836933,40.800316027289647],[-73.9582724,40.8003415]],[[-73.958413422194482,40.80037239620097],[-73.9584093,40.8003797]]]}|\r |FrederickDouglassCir|{"type":"LineString","coordinates":[[-73.9579272943862,40.800751229494182],[-73.9579019,40.8007238],[-73.9578688,40.8006749],[-73.9578508,40.8006203],[-73.9578459,40.800570199999996],[-73.9578484,40.80053310000001],[-73.9578627,40.800486700000008],[-73.957913,40.800421100000008],[-73.9579668,40.8003923],[-73.9580189,40.80037260000001],[-73.9580543,40.8003616],[-73.9581237,40.8003395],[-73.9581778,40.8003365],[-73.9582724,40.8003415],[-73.958308,40.8003466],[-73.9583328,40.8003517],[-73.9583757,40.8003645],[-73.9584093,40.8003797],[-73.9584535,40.80041099999999],[-73.9584818,40.8004536],[-73.958507000000012,40.8004955],[-73.9585217,40.800562400000004],[-73.9585282,40.8006155],[-73.958416200000016,40.8007325],[-73.9583541,40.8007785],[-73.9582772,40.800811499999995],[-73.9582151,40.8008285],[-73.958145918999392,40.800839887820239]]}|\r |W110thSt|{"type":"MultiLineString","coordinates":[[[-73.957828446036331,40.800476476316327],[-73.9578627,40.800486700000008]],[[-73.9585282,40.8006155],[-73.958565492035873,40.800631133466972]],[[-73.958416200000016,40.8007325],[-73.958446850928084,40.800744577466617]]]}|\r |WestDr|{"type":"LineString","coordinates":[[-73.9580543,40.8003616],[-73.958009693938735,40.800250494588468]]}|\r \r The following example finds all counties in the USA that intersect with area of interest literal LineString.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12QwWrDMBBE7/kKVScbXCPbkSWl5FBKb20voacQhHE2toojGVkhmLb/3nXTFBPddng7mp0OAqk8VNodtLEBPAyBrMl+tNXR1NEnDWMPdEVfjIVN8MY2NKG1c35vbBVgoKvt9l4UqRIZV0wpLqTkIlmyVKglz4qikEIyqfguuXClKCTPVc54kecXLhdc4iszKXj5z6nJaXJgf35SCRQzWbKMM77bfccPi/eNfnInGwwMiy/Se/cBdSCYHfCIA1ThhAelqPfgJyh9e3x9Tkg97YxzpAF3hODHG5eE/JYy4GycxQXk9FzSHRajzya0unfd2Dgb3dZ5/S5G73OLEhbuq1F3YJvQRnO3awxMGpO7NWE/FmJxj58BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let area_of_interest = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});\r US_Counties\r | project name = features.properties.NAME, county = features.geometry\r | project name, intersection = geo_intersection_line_with_polygon(area_of_interest, county)\r | where array_length(intersection.geometries) != 0\r \`\`\`\r \r **Output**\r \r |name|intersection|\r |---|---|\r |New York|{"type": "LineString","coordinates": [[-73.971590995788574, 40.794513338780895], [-73.967385292053223, 40.792758888618756],[-73.969788551330566, 40.789769718601512]]}|\r \r The following example will return a null result because the LineString is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WRy2rDMBBF9/0Ko5UNbtBjRhql9A+6KHQZTDCOMAJVMrZaMKX/XgfH8aKFbuceDjN3gstF8NG95dHHvnguLnNs331XfrE8D44d2cs9ZTXrUhovPrbZTex4Oj0adbCEwmIN/GCIpMGm+a6eHsLiHVKY+xT/kr6u0W/jqkSjSYMEiajMVU2ca1QIVoLSsqlvGEkyUlluYKPIGmG1NtLSTmkLVgEB2A1DbpTmChdwxzgKyUGTgBslLBlFSqBVd+qfzdbrh6WuXPjp7ONnG/xlqcBP8SOEsndpGWY3Tq7LPsWzvLY/lfsP6q23qvoB4Uu5gZ0BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});\r print is_invalid = isnull(geo_intersection_2lines(lineString, polygon))\r \`\`\`\r \r **Output**\r \r |is_invalid|\r |---|\r |1|\r \r The following example will return a null result because the polygon is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21Qy2rDMBC89yuMTja4QY+sd5WSP+ih0GMwwdjCCBTJWGrAlP575bpND8keZ2ZnZ8eZVDjrzXuarR+LYzEsvrvYvvxkaZkMO7DXG8tq1ocwD9Z3yUR2OJ2eUe00CtBca0AiwHrPd6j3IJRShMRJQ1tvugYVgdSSg5Jy00kEytMIQmhuOr06rQ781480ZlBQwwVwaNuv6uXJ5eBTcMsY/KPUbxt1F/lnd8rfpMLGs/XXztkhG9joP5wrRxMymMwcTZ9s8Ge5lhPL/4rqv6tV9Q1G11oPPAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[]});\r print is_invalid = isnull(geo_intersection_2lines(lineString, polygon))\r \`\`\`\r \r **Output**\r \r |is_invalid|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-intersection-line-with-polygon-function","geo-intersection-line-with-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_intersects_2lines","Calculates whether two lines or multilines intersect.",`## Syntax\r \r \`geo_intersects_2lines(\`*lineString1*\`,\`*lineString2*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString1* | dynamic | ✓ | A line or multiline in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *lineString2* | dynamic | ✓ | A line or multiline in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Indicates whether two lines or multilines intersect. If lineString or a multiLineString are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r > [!TIP]\r >\r > Use literal LineString or MultiLineString for better performance.`,`The following example checks whether some two literal lines intersects.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52QsQqDMBRF935FyKSQij6NL7H0D7p1FBHRIAEbxWSR0n9vWou1a4e3nAv3XN6gHBm0UVc3a9Mn5Ey6xTQ33QZ36pZJ0YJetpgy2o7j3GnTOGVpUZZHTCOJQoJkWRyh4AnnFVuxiGWcrhhySKrqEZ4Ow48P/vJ5i+RrsQDcfJhxDm+MEvOPb/I9jvhTs1Wts17Yq7H+ghpec2ywewLbLwyfFywOhCIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString1 = dynamic({"type":"LineString","coordinates":[[-73.978929,40.785155],[-73.980903,40.782621]]});\r let lineString2 = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});\r print intersects = geo_intersects_2lines(lineString1, lineString2)\r \`\`\`\r \r **Output**\r \r |intersects|\r |---|\r |True|\r \r The following example finds all roads in the NYC GeoJSON roads table that intersects with some lines of interest.\r \r \`\`\`\r let my_road = dynamic({"type":"LineString","coordinates":[[-73.97892951965332,40.78515573551921],[-73.98090362548828,40.78262115769851]]});\r NY_Manhattan_Roads\r | project name = features.properties.Label, road = features.geometry\r | where geo_intersects_2lines(road, my_road)\r | project name\r \`\`\`\r \r **Output**\r \r |name|\r |---|\r |Broadway|\r |W 78th St|\r |W 79th St|\r |W 80th St|\r |W 81st St|\r \r The following example will return a null result because one of lines is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52PQQqDMBRE9z1FyCpCKjE2TWLpDbrrUoKIfiQQo5h0IaV3ryVQ7LbLmeHP++MgImc93ONi/VCgK+pX3462I08c1xlwhW/fGFPcTdPSW99GCLiq66Mscy2V5pqeWC6VKIQwNNmKaVYmm595YcwruxzcD4//xdsoWqRixaVIxfN2EJEN/uEcGWBqNglLgC6Ghn+Igex20v0TWfYGvZfHxAYBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString1 = dynamic({"type":"LineString","coordinates":[[-73.978929,40.785155],[-73.980903,40.782621]]});\r let lineString2 = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275]]});\r print isnull(geo_intersects_2lines(lineString1, lineString2))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-intersects-2lines-function","geo-intersects-2lines-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_intersects_2polygons","Calculates whether two polygons or multipolygons intersect.",`## Syntax\r \r \`geo_intersects_2polygons(\`*polygon1*\`,\`*polygon1*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon1* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *polygon2* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Indicates whether two polygons or multipolygons intersect. If the Polygon or the MultiPolygon are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1], ..., [lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon contains its vertices.\r \r > [!TIP]\r >\r > Use literal LineString or MultiLineString for better performance.`,`The following example checks whether some two literal polygons intersects.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52Rz2rDMAyH73uKkFMLWdEfy5I79g67l1BKa0ogTUKSSxh793kkaXvaYBjsgz700yfXccy6tp6ubYPZe3aZmtOtOm8+83HqYr7PP+ZaXuTntu0vVXMa45DvD4fDq/IueIbAKuopuMLBTtUFMwfKxCZlsVLixcg79AvExoioBgHdnSIQBp8u9DRzrE5+QEN56oYe1DC1EFxDOSBxygj2yPx1srL82r691A97+o89IbOQNyBYzASckIFziu7JH9MBE5F1AZIMwAcCfsIINM1Iqa3qwqFPS+JgFPiB/ZE6u3V91YzZNbbH9MZ+iOdxONJiO2zWTy/uC9h+A0eK8+oMAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon1 = dynamic({"type":"Polygon","coordinates":[[[-73.9630937576294,40.77498840732385],[-73.963565826416,40.774383111780914],[-73.96205306053162,40.773745311181585],[-73.96160781383514,40.7743912365898],[-73.9630937576294,40.77498840732385]]]});\r let polygon2 = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});\r print geo_intersects_2polygons(polygon1, polygon2)\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|\r \r The following example finds all counties in the USA that intersect with area of interest literal polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WQzWrDMBCE73kKoVMCrpH1Y0kJOZTSY0uh9GSMEc4mdUkkIykU0fbdq2BDQ3soe1u+md2ZI0RkPJjO7bvBRvAQItqiXbLmNPTLDxzTCHiNn9wxHZzFBe6d87vBmggBr5umuZGs1DWtGBO0VoSSuuCklFIQLqginMuKi7aYOVblIUoIMWNcSFWRWlPCrjBKpFaKZlspZ66qpSJMK6rZD/bP1bb9Wm0WL8/dnTvbOEBYfKLRuzfoI8oBISfdg4nnnLrM+xH8BSofbx/uC9RfNOkaOYA7QfQpu7y/5qpQXkythewYOjpOLYXlpC3+VLv69cA3a++fAX8BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});\r US_Counties\r | project name = features.properties.NAME, county = features.geometry\r | where geo_intersects_2polygons(county, area_of_interest)\r | project name\r \`\`\`\r \r **Output**\r \r |name|\r |---|\r |New York|\r \r The following example will return a null result because one of the polygons is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42QzUrFMBCF9z5FyaqFesnfTJIrvoP7Ukpow6UYk5JEoYjvbmstiLhwNcycMx9zxrtSjS6UZP2w2PQ8LNGvtxiqx2pag32Zx/qdlHVx5EqeDom0ZIwxTXOwxWVy7bruXomLkQZaSS/KoOnbYwSaKo7IBQjgu6gpRY1UADLD2WnTnDIjuZRCS/3FQM0BFRcUlFKnTQmmtMYNBcIcNgnABALdy2n7eUfffzQPd34LOYc36+fpP/n2lSXNYVvK4dX7+ubisLUuZTeWPPBvRq5/Qds/X9k0n1CNw49lAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park_polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r let invalid_polygon = dynamic({"type":"Polygon"});\r print isnull(geo_intersects_2polygons(invalid_polygon, central_park_polygon))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-intersects-2polygons-function","geo-intersects-2polygons-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_intersects_line_with_polygon","Calculates whether a line or multiline intersect with a polygon or a multipolygon.",`## Syntax\r \r \`geo_intersects_line_with_polygon(\`*lineString*\`,\`*polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *polygon* | dynamic | ✓ | A Polygon or MultiPolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Indicates whether the line or multiline intersects with polygon or a multipolygon. If lineString or a multiLineString or a polygon or a multipolygon are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line or a polygon edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) or a [geo_polygon_densify()](geo-polygon-densify-function.md) in order to convert planar edges to geodesics.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon doesn't necessarily contain its vertices.\r \r > [!TIP]\r >\r > Use literal LineString or MultiLineString for better performance.`,`The following example checks whether a literal LineString intersects with a Polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32QzUrEQBCE7z5FmNMuxGX++mdWfAMPgsclhCU7xIGYhGRAgvjujs5mc1A89KW66K+rOh+LLvT+JU6hb4vH4rL057fQ7D5EXEYvjuLpthWlaIZhuoT+HP0sjqfTPZmDY1AOSisPxKwJqjLLZAH0j0yOUFXV5/7hrku4ceiWduj/Yj3n1W/Q9aTSTgKzIXYZCCwBlUImpBXMUlowilGa9QHQhGwsS4OwPSilNEqnC4ow+xg0ogEDiPZm+x+ac42pn1ik8dPsmzincK0f6k2ov0uu30N8ra/5d1vt5drJ/gtbMVZzjwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});\r print intersects = geo_intersects_line_with_polygon(lineString, polygon)\r \`\`\`\r \r **Output**\r \r |intersects|\r |---|\r |True|\r \r The following example finds all roads in the NYC GeoJSON roads table that intersect with area of interest literal polygon.\r \r \`\`\`\r let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});\r NY_Manhattan_Roads\r | project name = features.properties.Label, road = features.geometry\r | where geo_intersects_line_with_polygon(road, area_of_interest)\r | project name\r \`\`\`\r \r **Output**\r \r |name|\r |---|\r |Central Park W|\r |Frederick Douglass Cir|\r |W 110th St|\r |West Dr|\r \r The following example finds all counties in the USA that intersect with area of interest literal LineString.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12QQUvDMBiG7/sVIacNakmbpUkmHkS8qZfhaZQQum9dRpeU9BujqP/dlKrIcnx58vC9bwdIbARrwsE4jxBhQPJA9qO3Z9csPyiOPdANfXEethidb2lGmxDi3nmLMNDNbncnea5lITTTWkilhMzWLJd6LQrOuZKKKS3qbOYqyZUodckEL8uZK6VQ6VWFkqL64/Rkmgzsx6e0TGGhKlYIJur6a3W/eN+ap3Dx6GBYfJI+hhM0SNLtkEocwOIlFcpT3kOcoPzt8fU5I830Z/yPtBDOgHFMlusxrUBSMA8yJONgutTfXB0eTR+6sQ1+ebvar3V1c8g3SxOfMGIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let area_of_interest = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});\r US_Counties\r | project name = features.properties.NAME, county = features.geometry\r | where geo_intersects_line_with_polygon(area_of_interest, county)\r | project name\r \`\`\`\r \r **Output**\r \r |name|\r |---|\r |New York|\r \r The following example will return a null result because the LineString is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WQTWuDQBBA7/0VsicFG/ZjZncmof+gh0KPQUIwiwibVXRzkNL/XoMxHlrocZjHY+YFn7LQRv+ZhjY22Vt2meL52tb5l0hT78VevD+3ohR11w2XNp6TH8X+eHx1ZseEirEEuXNE2mFVfReHlzB7+y5MTRf/kn4sq9/GRYnOkgUNGtG4u5qktGgQWIOxuiofGGly2rB0sFLETrG1TjNtlGVgAwTAK4bSGSsNzuCGSVRagiUFD0oxOUNGIZsn9c9ly/f9nCtl7RhvIeSN707z6IfR12k86XvuMd+il2uoovgBkcn4944BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});\r print isnull(geo_intersects_2lines(lineString, polygon))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|\r \r The following example will return a null result because the polygon is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21QTWvDMAy971cEnxLIij+qSOroP9hhsGMJpaQmGDw7xO4hjP33OcvWHTbdpPf09PS8zZV3wb7m2YWxOlbXJVze3FC/i7xMVhzE8x0VrRhinK8uXLJN4nA6PaLZMSpgyQxIBNju5Q55D8oYQ0iSGPp243VoCDRrCUbrjacRqFSnCKG783hVWhXktx4xlqGiTiqQ0PcfzdODL8an6Jcxhv9cv2zQH8tfu1P5JlcuhZv39WjjubR2TnbI6azXNFL9m0n7c6ZpPgG+oq1pLQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let lineString = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});\r let polygon = dynamic({"type":"Polygon","coordinates":[]});\r print isnull(geo_intersects_2lines(lineString, polygon))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-intersects-line-with-polygon-function","geo-intersects-line-with-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_line_buffer","Calculates polygon or multipolygon that contains all points within the given radius of the input line or multiline on Earth.",`## Syntax\r \r \`geo_line_buffer(\`*lineString*\`,\` *radius*\`,\` *tolerance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *radius* | real | ✓ | Buffer radius in meters. Valid value must be positive.|\r | *tolerance* | real | | Defines the tolerance in meters that determines how much a polygon can deviate from the ideal radius. If unspecified, the default value \`10\` is used. Tolerance should be no lower than 0.0001% of the radius. Specifying tolerance bigger than radius will lower the tolerance to biggest possible value below the radius.|\r \r ## Returns\r \r Polygon or MultiPolygon around the input LineString or MultiLineString. If the coordinates or radius or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r > * Endcaps of the lines are round.\r > * Both sides of the lines are buffered.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.`,`The following query calculates polygon around line, with radius of 4 meters and 0.1 meter tolerance\r \r \`\`\`\r let line = dynamic({"type":"LineString","coordinates":[[-80.66634997047466,24.894526340592122],[-80.67373241820246,24.890808090321286]]});\r print buffer = geo_line_buffer(line, 4, 0.1)\r \`\`\`\r \r |buffer|\r |---|\r |{"type": "Polygon", "coordinates": [ ... ]}|\r \r The following query calculates buffer around each line and unifies result\r \r \`\`\`\r datatable(line:dynamic)\r [\r dynamic({"type":"LineString","coordinates":[[14.429214068940496,50.10043066548272],[14.431184174126173,50.10046525983731]]}),\r dynamic({"type":"LineString","coordinates":[[14.43030222687753,50.100780677801936],[14.4303847111523,50.10020274910934]]})\r ]\r | project buffer = geo_line_buffer(line, 2, 0.1)\r | summarize polygons = make_list(buffer)\r | project result = geo_union_polygons_array(polygons)\r \`\`\`\r \r |result|\r |---|\r |{"type": "Polygon","coordinates": [ ... ]}|\r \r The following example will return true, due to invalid line.\r \r \`\`\`\r print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString"}), 5))\r \`\`\`\r \r |buffer|\r |---|\r |True|\r \r The following example will return true, due to invalid radius.\r \r \`\`\`\r print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString","coordinates":[[0,0],[1,1]]}), 0))\r \`\`\`\r \r |buffer|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-line-buffer-function","geo-line-buffer-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_line_centroid","Calculates the centroid of a line or a multiline on Earth.",`## Syntax\r \r \`geo_line_centroid(\`*lineString*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The centroid coordinate values in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the line or the multiline is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r > * If input is a multiline and contains more than one line, the result will be the centroid of lines union.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.`,`The following example calculates line centroid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHIycxLVbBVSKnMS8zNTNaoViqpLEhVslLyAYoHlxRl5qUr6Sgl5+cXpWTmJZakFitZRUfrmhvrWZqaW5rpKJgY6FkYGJgYxeooQITNjQ3NwcLmZiYmFmaxsbWa1lwFQHNKFJJT80qK8jNTgNalp+bHg2yOh4lpgHia1gBYQZ0fkgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"LineString","coordinates":[[-73.95796, 40.80042], [-73.97317, 40.764486]]});\r print centroid = geo_line_centroid(line);\r \`\`\`\r \r **Output**\r \r |centroid|\r |---|\r |{"type": "Point", "coordinates": [-73.965567057230942, 40.782453249627416]}|\r \r The following example calculates line centroid longitude.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02QwWrDMAyG732K4FMLWZBkW5Y79ga77RhCKYkJLp0TMl/Ktnefs5Ax3X7p45f030Ou7jGF6qUaHun6Hvvjp8qPOaizei39t7zENKpa9dO0DDFdc/hQ57Z9crrxVsARM2mrLdUGGgEwxGgMstdou3rjjGdGskaEBFfOefboLEIp+4c5jU6Ei5fV/hdjY1ZdzEBrs3NCCIWxSOztxjlhLgKBCHeMyzHsWFDEyLZVQBw4q8nrrvs+PR/m8l2u+pDyMsWhhDCG6bLmcdl7x1WdDl/VvEy30Je00li4fdz8y6WF7gcIBtdSTwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"LineString","coordinates":[[-73.95807266235352,40.800426144169315],[-73.94966125488281,40.79691751000055],[-73.97317886352539,40.764486356930334],[-73.98210525512695,40.76786669510221],[-73.96004676818848,40.7980870753293]]});\r print centroid = geo_line_centroid(line)\r | project lng = centroid.coordinates[0]\r \`\`\`\r \r **Output**\r \r |lng|\r |---|\r |-73.9660675626837|\r \r The following example visualizes line centroid on a map.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzWPwWrDMBBE7/kKoZMNaVh5tSsppX/Qnno0JhhbJKKObBSVEtr+e+WaHGf37ezM5LOYQvTiRYz32F/DUH3LfF+8PMq3zymH17J8zynEs9zLYZ7TGGKf/U0e27Z9MnhwZJxli4qZoNlrOFgAIgYH0CjN3O03ziqHSA4NrZDhopVRlsho7gq0UdppQMONVQbtP+i4cKQAVtuHmUFlrGWkhtBtfhqJUYMuf1XXdb/1824pubMYfMxpDmPpePbzaa17esyqVdW7H5F8HH0St6HP2afh0qcsvkK+iOojxPX02i/1H97E8mMuAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"MultiLineString","coordinates":[[[-73.95798683166502,40.800556090021466],[-73.98193359375,40.76819171855746]],[[-73.94940376281738,40.79691751000055],[-73.97317886352539,40.76435634049001]]]});\r print centroid = geo_line_centroid(line)\r | render scatterchart with (kind = map)\r \`\`\`\r \r \r The following example returns True because of the invalid line.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx2MQQqAIBAAvyJ7UvDSNegH3TpKiOkiC7aGbYeI/p50nBmYoxGLotNvIflCjGrqxFcpOmP9jY/I0iolnW4OO0X9gNwHwghzz4v0RQYLsdaWiIPgCaNzg1XDur7GmA+R8wB3ZAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print is_bad_line = isnull(geo_line_centroid(dynamic({"type":"LineString","coordinates":[[1, 1]]})))\r \`\`\`\r \r **Output**\r \r |is_bad_line|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-line-centroid-function","geo-line-centroid-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_line_densify","Converts planar lines or multiline edges to geodesics by adding intermediate points.",`## Syntax\r \r \`geo_line_densify(\`*lineString*\`,\` *tolerance*\`,\` [ *preserve_crossing* ]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *tolerance* | int, long, or real | | Defines maximum distance in meters between the original planar edge and the converted geodesic edge chain. Supported values are in the range [0.1, 10000]. If unspecified, the default value \`10\` is used.|\r | *preserve_crossing* | bool | | If \`true\`, preserves edge crossing over antimeridian. If unspecified, the default value \`false\` is used.\r \r ## Returns\r \r Densified line in the [GeoJSON format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If either the line or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r \r **LineString definition**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * The coordinates [longitude, latitude] must be valid. The longitude must be a real number in the range [-180, +180] and the latitude must be a real number in the range [-90, +90].\r * The edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r **Constraints**\r \r * The maximum number of points in the densified line is limited to 10485760.\r * Storing lines in [dynamic](./scalar-data-types/dynamic.md) format has size limits.\r \r **Motivation**\r \r * [GeoJSON format](https://tools.ietf.org/html/rfc7946) defines an edge between two points as a straight cartesian line while \`geo_line_densify()\` uses [geodesic](https://en.wikipedia.org/wiki/Geodesic).\r * The decision to use geodesic or planar edges might depend on the dataset and is especially relevant in long edges.`,`The following example densifies a road in Manhattan island. The edge is short and the distance between the planar edge and its geodesic counterpart is less than the distance specified by tolerance. As such, the result remains unchanged.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy3K0QqDIBSA4VeRc6XgwqXoDPYGu9tlSESehbA00hsZe/dF7fb7/3ULsRCPMYdXQD+8Q0RyJyXlspeZzpgOG86lUl/juISJfqDUFaGDx16fxwwcppQ2H+JYMEPX9xcjG6tsqwwnSjTG6psWjp9upLj+XSvZSue+jLEf+uHlO5EAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[-73.949247, 40.796860],[-73.973017, 40.764323]]})))\r \`\`\`\r \r **Output**\r \r |densified_line|\r |---|\r |{"type":"LineString","coordinates":[[-73.949247, 40.796860], [-73.973017, 40.764323]]}|\r \r The following example densifies an edge of ~130-km length\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyWKMQqEMBAAv7JslUAKLdII9wM7yxBEzJ4s6EbMNuG4vxu0G2bmvFgUEknhL1OadxaCD2gu2spmNsqPm9+lmlRlOXg1P9R6Eg44tjo9Mzpcc74Sy6JUcAjBdw58Fx0E3zfqY/xba28ARL6/dAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[50, 50], [51, 51]]})))\r \`\`\`\r \r **Output**\r \r |densified_line|\r |---|\r |{"type":"LineString","coordinates":[[50,50],[50.125,50.125],[50.25,50.25],[50.375,50.375],[50.5,50.5],[50.625,50.625],[50.75,50.75],[50.875,50.875],[51,51]]}|\r \r The following example returns a null result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJzSvOTMtMTYnPycxLVbBVSE/NBzPjITKVGimVeYm5mcka1UollQWpSlZKPkDZ4BKg7nQlHaXk/PyilMy8xJLUYiWr6GhjAwMdw1idaEMgGVurqQkAeUICdmUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[300,1],[1,1]]}))\r \`\`\`\r \r **Output**\r \r |densified_line|\r |---|\r ||\r \r The following example returns a null result because of the invalid tolerance input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJzSvOTMtMTYnPycxLVbBVSE/NBzPjITKVGimVeYm5mcka1UollQWpSlZKPkDZ4BKg7nQlHaXk/PyilMy8xJLUYiWr6GhDHcNYnWgjHaPY2FpNHQUDTQAqaEHvZgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[1,1],[2,2]]}), 0)\r \`\`\`\r \r **Output**\r \r |densified_line|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-line-densify-function","geo-line-densify-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_line_length","Calculates the total length of a line or a multiline on Earth.",`## Syntax\r \r \`geo_line_length(\`*lineString*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The total length of a line or a multiline, in meters, on Earth. If the line or multiline is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r > * If input is a multiline and contains more than one line, the result will be total length of lines union.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.`,`The following example calculates the total line length, in meters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2PywqDMBBF9/0KyUrBSh6TSWLpH3TXpYiIBhuwUWw2UvrvTSp0VjOXw+XMbEM2O2+zazbuvn+6IX+TsK+W1OQW83vYnJ9ISYZl2Ubn+2BfpG6asxKVkZoqjsiFFJKXQCtNKXBkAAyNYLItDw4MIuMStOaaJU4ZNExJRuPIP6YEU1pj7JLC/DAESHcso0JA236Ky2mNQtHZ+ik8ovVkly490B1JnvbiCytjJ77WAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"LineString","coordinates":[[-73.95807266235352,40.800426144169315],[-73.94966125488281,40.79691751000055],[-73.97317886352539,40.764486356930334]]});\r print length = geo_line_length(line)\r \`\`\`\r \r **Output**\r \r |length|\r |---|\r |4922.48016992081|\r \r The following example calculates total multiline length, in meters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzWPy2rDMBBF9/kKo1UCThh5NA8l9A/aVZdGhJAIV+DKIVEXofTfK8dkN4/DnTljLM2Ycmzemssjn77Tef1ryuMazd58/IwlvdflZ7mlPJjWnKfpdkn5VOLd7Pu+3wruPIlXVrTMBF3rYKcARAweoLOOObQLp9YjkkehGRKuvRWrROI4VGihnHeAwp1aQX2CnitHFmCOfYUJWlFlpI7QL3kOidGBq3dtCOFvc1hd69/VL+ahfFXDIU7HWfa4TNZzvfkHgvHPoQIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"MultiLineString","coordinates":[[[-73.95798683166502,40.800556090021466],[-73.98193359375,40.76819171855746]],[[-73.94940376281738,40.79691751000055],[-73.97317886352539,40.76435634049001]]]});\r print length = geo_line_length(line)\r \`\`\`\r \r **Output**\r \r |length|\r |---|\r |8262.24339753741|\r \r The following example returns True because of the invalid line.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsjk9KTInPycxLVbAF8vJKc3I00lPzwSLxOal56SUZGimVeYm5mcka1UollQWpSlZKPkDJ4BKgAelKOkrJ+flFKZl5iSWpxUpW0dGGOgqGsbG1mpqaAAO8tvRiAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print is_bad_line = isnull(geo_line_length(dynamic({"type":"LineString","coordinates":[[1, 1]]})))\r \`\`\`\r \r **Output**\r \r |is_bad_line|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-line-length-function","geo-line-length-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_line_simplify","Simplifies a line or a multiline by replacing nearly straight chains of short edges with a single long edge on Earth.",`## Syntax\r \r \`geo_line_simplify(\`*lineString*\`,\` *tolerance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineString* | dynamic | ✓ | A LineString or MultiLineString in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *tolerance* | int, long, or real | | Defines minimum distance in meters between any two vertices. Supported values are in the range [0, ~7,800,000 meters]. If unspecified, the default value \`10\` is used.|\r \r ## Returns\r \r Simplified line or a multiline in the [GeoJSON format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type, with no two vertices with distance less than tolerance. If either the line or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere. Line edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r > * If input is a multiline and contains more than one line, the result will be simplification of lines union.\r > * High tolerance may cause small line to disappear.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.`,`The following example simplifies the line by removing vertices that are within a 10-meter distance from each other.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02Rz2rDMAyH73uKkFMLWZEtWX869ga77VhCKY1XDGkS2lzC2LvPYVlT3SQ+9P0st3Es2tTF4r1opu50TefNdzlOQyz35Ueef4631F3Kqjz3/a1J3WmM93J/OLwK7kwA0bEpBwatCHaiBozgwQWvnurqwRmDOBZP9MepiUkwD+p4xYidaBBDXKhcKMF5Qr9SebeSA6e8SFWMssAFdCvFM4dZwguUg5LlgBj4KRkHn4sR8cF5JshR4dkpXplDMPC2YMGLOaKQIz9hhoDKwPz/TkKarSKKXNc/27eXIV90LO7pOrTpK8Umn/4S++P8C8dlOm3mriocbH8B+xvcNaEBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let line = dynamic({"type":"LineString","coordinates":[[-73.97033169865608,40.789063020152824],[-73.97039607167244,40.78897975920816],[-73.9704617857933,40.78888837512432],[-73.97052884101868,40.7887949601531],[-73.9706052839756,40.788698498903564],[-73.97065222263336,40.78862640672032],[-73.97072866559029,40.78852791445617],[-73.97079303860664,40.788434498977836]]});\r print simplified = geo_line_simplify(line, 10)\r \`\`\`\r \r **Output**\r \r |simplified|\r |---|\r |{"type": "LineString", "coordinates": [[-73.97033169865608, 40.789063020152824], [-73.97079303860664, 40.788434498977836]]}|\r \r The following example simplifies lines and combines results into GeoJSON geometry collection.\r \r \`\`\`\r NY_Manhattan_Roads\r | project road = features.geometry\r | project road_simplified = geo_line_simplify(road, 100)\r | summarize roads_lst = make_list(road_simplified)\r | project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", roads_lst), "properties", bag_pack("name", "roads"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "roads"}}|\r \r The following example simplifies lines and unifies result\r \r \`\`\`\r NY_Manhattan_Roads\r | project road = features.geometry\r | project road_simplified = geo_line_simplify(road, 100)\r | summarize roads_lst = make_list(road_simplified)\r | project roads = geo_union_lines_array(roads_lst)\r \`\`\`\r \r **Output**\r \r |roads|\r |---|\r |{"type": "MultiLineString", "coordinates": [ ... ]}|\r \r The following example returns True because of the invalid line.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgsjs/MK0vMyUyJz8nMS1WwBYrklebkaKSn5oNF4oszcwtyMtMqNVIq8xJzM5M1qpVKKgtSlayUfIDSwSVAY9KVdJSS8/OLUjLzEktSi5WsoqMNdRQMY2NrNTU1Af5nM/VoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1]]})))\r \`\`\`\r \r **Output**\r \r |is_invalid_line|\r |---|\r |True|\r \r The following example returns True because of the invalid tolerance.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx3MQQrDIBBA0avIrBSmC7MM9AbddSkiEm0YmIwSbUBK717p9n349STpiloguSJTCkyS1X2KvJn1nstfQqOjMr2GTkPiQZv+QB81wwqPmZ99bnZA2Eo5E0nsucHqnEVlPboFF++/BtXNGvMDQCCfRnIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1],[2,2]]}), -1))\r \`\`\`\r \r **Output**\r \r |is_invalid_line|\r |---|\r |True|\r \r The following example returns True because high tolerance causes small line to disappear.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx2MwQrDIBBEf0X2pCCl6THQP8gtxyAi0YaFzSrRFiTk37vtwAzDG5hyIDeF1SN/AmH0hJzUUwi/ifSW8p/4inshfHUdO4cdV31C6yXBCJPMc5ObDSysOR8RObRUYVyW4TZYJeGs1IcVO3cZQfefjPkC36xb1X4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1.1, 1.1],[1.2,1.2]]}), 100000))\r \`\`\`\r \r **Output**\r \r |is_invalid_line|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-line-simplify-function","geo-line-simplify-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_point_buffer","Calculates polygon that contains all points within the given radius of the point on Earth.",`## Syntax\r \r \`geo_point_buffer(\`*longitude*\`,\` *latitude*\`,\` *radius*\`,\` *tolerance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *longitude* | real | ✓ | Geospatial coordinate longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *latitude* | real | ✓ | Geospatial coordinate latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *radius* | real | ✓ | Buffer radius in meters. Valid value must be positive.|\r | *tolerance* | real || Defines the tolerance in meters that determines how much a polygon can deviate from the ideal radius. If unspecified, the default value \`10\` is used. Tolerance should be no lower than 0.0001% of the radius. Specifying tolerance bigger than radius will lower the tolerance to biggest possible value below the radius.|\r \r ## Returns\r \r Polygon around the input point. If the coordinates or radius or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r >* The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r >* The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere.`,`The following query calculates polygon around [-115.1745008278, 36.1497251277] coordinates, with 20km radius.\r \r \`\`\`\r print buffer = geo_point_buffer(-115.1745008278, 36.1497251277, 20000)\r \`\`\`\r \r |buffer|\r |---|\r |{"type": "Polygon","coordinates": [ ... ]}|\r \r The following query calculates buffer around each point and unifies result\r \r \`\`\`\r datatable(longitude:real, latitude:real, radius:real)\r [\r real(-80.3212217992616), 25.268683367546604, 5000,\r real(-80.81717403605833), 24.82658441221962, 3000\r ]\r | project buffer = geo_point_buffer(longitude, latitude, radius)\r | summarize polygons = make_list(buffer)\r | project result = geo_union_polygons_array(polygons)\r \`\`\`\r \r |result|\r |---|\r |{"type": "MultiPolygon","coordinates": [ ... ]}|\r \r The following example will return true, due to invalid point.\r \r \`\`\`\r print result = isnull(geo_point_buffer(200, 1,0.1))\r \`\`\`\r \r |result|\r |---|\r |True|\r \r The following example will return true, due to invalid radius.\r \r \`\`\`\r print result = isnull(geo_point_buffer(10, 10, -1))\r \`\`\`\r \r |result|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-point-buffer-function","geo-point-buffer-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_point_in_circle","Calculates whether the geospatial coordinates are inside a circle on Earth.",`## Syntax\r \r \`geo_point_in_circle(\`*p_longitude*\`,\` *p_latitude*\`,\` *pc_longitude*\`,\` *pc_latitude*\`,\` *c_radius*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *p_longitude* | real | ✓ | Geospatial coordinate longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *p_latitude* | real | ✓ | Geospatial coordinate latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *pc_longitude* | real | ✓ | Circle center geospatial coordinate longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *pc_latitude* | real | ✓ | circle center geospatial coordinate latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *c_radius* | real | ✓ | Circle radius in meters. Valid value must be positive.|\r \r ## Returns\r \r Indicates whether the geospatial coordinates are inside a circle. If the coordinates or circle is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r >* The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r >* The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used to measure distance on Earth is a sphere.\r >* A circle is a spherical cap on Earth. The radius of the cap is measured along the surface of the sphere.`,`The following query finds all the places in the area defined by the following circle: Radius of 18 km, center at [-122.317404, 47.609119] coordinates.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3XS0UrDMBSA4fs+xbnbCrVL2rRp9wCCCArqnUiJ6bFG06RkERV8eKN1rN1qchUCH384aYUP+1HjWlvTKf/W4tah0Alo4afHQQuJ2513ynRxdB9BWD836zOaZWlOOSMsToDxtCQ1pXUCq1sU3mtcJXC6Nhu4MCCVkxphhuUpq3lZVSPGiorUVcCu9Wc/KAlXIcsaoeHcOtz5X3zE8MOjU9aBfdrDcJSZkdBJ/zI5JxUL8qVyr1qYdqlzmnlkMZaXZT5aGeOkzoJ1J6TtxeKL/608cmlGa17sG2nOiuDeYNvb5cR540P0Be/P6BA6tM1glfGNMs14e5jxYbwJTAY4mx+tCCFx8AZnX1D68Qt8AzYb0g4xAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(longitude:real, latitude:real, place:string)\r [\r real(-122.317404), 47.609119, 'Seattle', // In circle \r real(-123.497688), 47.458098, 'Olympic National Forest', // In exterior of circle \r real(-122.201741), 47.677084, 'Kirkland', // In circle\r real(-122.443663), 47.247092, 'Tacoma', // In exterior of circle\r real(-122.121975), 47.671345, 'Redmond', // In circle\r ]\r | where geo_point_in_circle(longitude, latitude, -122.317404, 47.609119, 18000)\r | project place\r \`\`\`\r \r **Output**\r \r |place|\r |---|\r |Seattle|\r |Kirkland|\r |Redmond|\r \r Storm events in Orlando. The events are filtered by 100 km within Orlando coordinates, and aggregated by event type and hash.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PwU7DMAyG7zyFjw0KW7sBKoddkHaCG9yrLLVaszSJHHdjiIcn3SbRw0625P//PvlDAg/bA3pJd78QOXyhFXjFjvx78Pq6GdFwDn2eIubcsUdG6DA0MZCXhnxjia3D4laT0bjioa4W6/qlUhpW9eJp/fisoSrLEu6noTI0jcNgmH4QbBi9FAp2p3+rht6kHjYzq4QmrSw6d8OqZt9MjUtwqtgMZOMujGKCKj3XnOVNrjP6Fhkioe0NCxxJeij25NvNYKKC5RLynO7XKPkOzMGQMzuHQB7exiQBtt/RBc6kFtNeQvwDFpFHo3MBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project BeginLon, BeginLat, EventType\r | where geo_point_in_circle(BeginLon, BeginLat, real(-81.3891), 28.5346, 1000 * 100)\r | summarize count() by EventType, hash = geo_point_to_s2cell(BeginLon, BeginLat)\r | project geo_s2cell_to_central_point(hash), EventType, count_\r | render piechart with (kind=map) // map pie rendering available in Kusto Explorer desktop\r \`\`\`\r \r The following example shows NY Taxi pickups within 10 meters of a particular location. Relevant pickups are aggregated by hash.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42Py27CQAxF93yFlxMpRTBFgiz4lpFxLMZlMjNyHPEQH9+kSBW7dnt17zl2vlMwvMnqCVXLF5NBFbpMNaSSz2JTz+1vgvYTzN1rZGU4cwm1SLYgOZAoJXZ/z1tQxuQ+9p/rrvOHpoXdZr3f+a6F7aaZ4eM0DKjyYDjdIeIY4fimshJGT5yS+4fJ++btswXy2i4U4myK6YV1i2fpKueeFUZCM1aKqAZXsQjuIrmfLxmwNt9Em1nwNgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r nyc_taxi\r | project pickup_longitude, pickup_latitude\r | where geo_point_in_circle( pickup_longitude, pickup_latitude, real(-73.9928), 40.7429, 10)\r | summarize by hash = geo_point_to_s2cell(pickup_longitude, pickup_latitude, 22)\r | project geo_s2cell_to_central_point(hash)\r | render scatterchart with (kind = map)\r \`\`\`\r \r The following example will return true.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMi0/OLErOSVWwVUhPzY8vyAeKxsNFNXQNjYz0DE2MTc1MdBRMzPVMgSxzcx0FiLiBgYWlGUTcyNzY1FBHwdjUwEATAJnKnMpbAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print in_circle = geo_point_in_circle(-122.143564, 47.535677, -122.100896, 47.527351, 3500)\r \`\`\`\r \r **Output**\r \r |in_circle|\r |---|\r |1|\r \r The following example will return false.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMi0/OLErOSVWwVUhPzY8vyAeKxsNFNXQNjYz0DI3NTc1NdRRMzPXMjA3MLIx1FCDiBgYWlmZgcVMjc2NTQx0FY1MDA00AV0g5xlsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print in_circle = geo_point_in_circle(-122.137575, 47.630683, -122.100896, 47.527351, 3500)\r \`\`\`\r \r **Output**\r \r |in_circle|\r |---|\r |0|\r \r The following example will return a null result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMi0/OLErOSVWwVUhPzY8vyAeKxsNFNYwMDHQUDOFIEwAH8KEmNgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print in_circle = geo_point_in_circle(200, 1, 1, 1, 1)\r \`\`\`\r \r **Output**\r \r |in_circle|\r |---|\r ||\r \r The following example will return a null result because of the invalid circle radius input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMi0/OLErOSVWwVUhPzY8vyAeKxsNFNQx1FOBI11ATAAIUtdY1AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print in_circle = geo_point_in_circle(1, 1, 1, 1, -1)\r \`\`\`\r \r **Output**\r \r |in_circle|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-point-in-circle-function","geo-point-in-circle-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_point_in_polygon","Calculates whether the geospatial coordinates are inside a polygon or a multipolygon on Earth.",`## Syntax\r \r \`geo_point_in_polygon(\`*longitude*\`,\` *latitude*\`,\` *polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *longitude* | real | ✓ | Geospatial coordinate, longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *latitude* | real | ✓ | Geospatial coordinate, latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r Indicates whether the geospatial coordinates are inside a polygon. If the coordinates or polygon is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon doesn't necessarily contain its vertices. Point containment in polygon is defined so that if the Earth is subdivided into polygons, every point is contained by exactly one polygon.\r \r > [!TIP]\r >\r > * Using literal Polygon or a MultiPolygon may result in better performance.\r > * If you want to know if any of the polygons contains a point, try the following steps: Fold the collection of polygons into one multipolygon. Then query this multipolygon. This may improve performance. See the following example.`,`Manhattan island without Central Park.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4VT0WrbQBB8z1cIvyQGN7nb273dzVsKpRRaKLRvIQQ1VhOBIxlZpg1t/70jy5abQogMNkZzs7Mzc8uyx+fbqjpbtc193W+X1WVXlatFsSr7f/8uq81dV6/7um0uN31XN/fzk+uTAs/w/uyNpnM3ycLzRcHhXNnYdFGcvntc111VfMGYqni7rVdLHD1dFMfn4qL40BSf29XTfdsU/1HmROx7SnUhAeXXh6r4VPVdu25XdV82xaftpto+Fu334qrrB+6RsvrZV13ddsOL9Uj/nN2UU9YDuybJYP9Yvt+W3bIui6u6W7cj4bPnZfabk9/Fj4cK+95X7e26rZv+tm5u96+PFh/dhbFPTflY3539mvVP62p2Ods7MVvM7toWQho4t5ldXl9f7xwhcY0Od2GNLaDc1Cha5Bg4S7xZjDDOHjkrmUSsNcAkZM/RMomovQxjQMRzNg9qeYfj8xBDsBzERUOKA04lejKBEHGfUJbBR+BQ1x0qsFiGQs9CLBOO4nAsB08qAy67e4geMSZhjYM6V6XMHJg8+8hnGIw5ZOp0gKkyZLk6O9EOFoMlAmXCr0+wQDlkCjHCwB2MPLAy9MGaCQWfNCbDl+0c0cQYaQwyyM1HNmeoE/i5Q7GgTJRUQ5SjvYSTUQb9tgtLFX4grZCTaJpgiREgS4p7MgsWIkOpRNIDihy3StKQ1B4GV+LgBx6RAywFVYSdphAs8CAOah3QaQHMdMNCnHFXRxxSijljCsZMMAQXkQ86NmaFM9EDCiKMvKaxRGYE2WhNpLFw8ALrwgHYfIAhPHXYGy2NfdOI9mH5jIuuE+y1lgM3AsWIOcF39Ga/bUByQtHVbEoV0hAOOmKkY38zcsFSmQzOTKEOGQeMTHB2hDFRHvhd0jGv4dLQsF30KQlGhzEGxZ4sfk3czc2f+fwvLfY7vIMFAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(longitude:real, latitude:real, description:string)\r [\r real(-73.985654), 40.748487, 'Empire State Building', // In Polygon \r real(-73.963249), 40.779525, 'The Metropolitan Museum of Art', // In exterior of polygon\r real(-73.874367), 40.777356, 'LaGuardia Airport', // In exterior of polygon\r ]\r | where geo_point_in_polygon(longitude, latitude, dynamic({"type":"Polygon","coordinates":[[[-73.92597198486328,40.87821814104651],[-73.94691467285156,40.85069618625578],[-73.94691467285156,40.841865966890786],[-74.01008605957031,40.7519385984599],[-74.01866912841797,40.704586878965245],[-74.01214599609375,40.699901911003046],[-73.99772644042969,40.70875101828792],[-73.97747039794922,40.71083299030839],[-73.97026062011719,40.7290474687069],[-73.97506713867186,40.734510840309376],[-73.970947265625,40.74543623770158],[-73.94210815429688,40.77586181063573],[-73.9434814453125,40.78080140115127],[-73.92974853515625,40.79691751000055],[-73.93077850341797,40.804454347291006],[-73.93489837646484,40.80965166748853],[-73.93524169921875,40.837190668541105],[-73.92288208007812,40.85770758108904],[-73.9101791381836,40.871728144624974],[-73.92597198486328,40.87821814104651]],[[-73.95824432373047,40.80071852197889],[-73.98206233978271,40.76815921628347],[-73.97309303283691,40.76422632379533],[-73.94914627075195,40.796949998204596],[-73.95824432373047,40.80071852197889]]]}))\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|\r |---|---|---|\r |-73.985654|40.748487|Empire State Building|\r \r Search for coordinates in multipolygon.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4Wa3YtcxxHF3/VXDHqxBRu7vz9s/JAnE0ggEJI8GGE20kQeWO8uqxGOSPK/53fu3O6umxetQUazZ/p2V506daqvHs7X06+fHq6X56eHzx+eHk8/nN5/frz/9fLu63+/vn5+Pr/+7vT6TwL8+QZ4fXd6/e7p6eX95fH+ev7Ir3/i53c1ftO7T8Xdfnz0d6fkvqnR19hunwVX3t6ddmhoOaXua83Ztx3qXAu5FJd9zH5BS63hhgg5xbA/IKeFqCWm0nIOobU4oLWV6HprpZd4g6Zv2ASwnkqJPaS0Q1vUB87lUrtfUJ98HIdwJY9DVLuzXnrPrrLxfbFYY4m1BQ5R40L6GlIOycXa40BmfeRaj55NLiiraYGYe259h6bafOvFNZeqef6X4/1W4D09ucVMuNlaLu0Wc5CxdNdzibH5PlduPsVOjHNJYY99abWE3BJR6TkaZE6t5lBby70NKDF2ofNhssCSI6dyvrs8gFGxS5Wo9mKgFXL45orraUHJc6icrpS2oMHFlollan6kAGhTAJ3nqGbVEApp4hsppj6gobcSSEAMqRpoZFO9Qk3yOKCO5/voIJT3Fhpc972mkvtYtbaeUvG1s7KFEtAcQ0u5ljKgNRd2lGqq+biBxlEjjJmLJu+dS3wWLLMizIyZP4n4vlW2mXKunqqIxRRS8jAqUix9ZApWdojffRTBzKINyiu2DvyAQtRKYLPr7gDtPkDlWF0OE0pVd3hRaggG2sUgfpXg9oQSqQzZGsQwWyV5hWS57OZWWyN0FCqVkOyhAmlu7Db2tVVKTQEphzV9LCWzA5iaJtL5Vp2v8N0uCnmIcyTTeUGr5EPS4U38U4DZ6FVMKc2tKiyqvx4tktBTfrDK1YGM5JeAeMSm2zUJAMzkFKNUKGyIwi47bDHhzw4C1tykDSP8kWLwvcCyaPgPlOx3oheGrlSqHqJDII6ULNKTqwiDWHlCCTJ1FqQXFsoOSAv7KoN+kVARE56E5hi15DiFkuowpgwopYLokrrSzKrFS62oCce6A9oyolh8S5SLgUrjHapLCc699q1ySYNr2a5a0RNkhFMvKPVMW8megjmsuslzKCmNDSRK37dCGushrBmSc67ifV17rWyJY5HJemB1TQEe5m6CRfFlgueyrepOuImJ98R9MqByLviLYHlbgESL51Af61RkiQQUQhOrhYaglQMK4RcFvPij3mlrldpFqUlimmUFrwgX9cb/s1WgDgHIFpuYe4WsdApykG1diUTsjWZd89wAzGkSYE5nDQI7otYaJVPHqmyFui70R285SK+n0wREdfYAoOBQQB5vhQ2lqqr1LCneoXR2wkFXoODsqkmUyqruSQG4joiqYmmkFkoXYlMUV6sTivZLvl0pJgIcqkrrkOyRLMqfI0HvVm2sAmrrpGFo+0ASoyDFrd6SNUjryFNUMgeUWNGQPSf2NqrwJ1ZIAHpCpejsN2sPdqfkhf4k2fNzVRhErKDrYVUqXh7KtTYsE1AqmtaC4NseEOhIlE9zfloWbUBaQf7It4WianCqOHI2oZQpLojkWMHCRlEsqXqYPbSN0yMr9AXqy2zAYUuoQi8uDRViQzCSJWKwGyB5hdRgkaqfSPpfkVFEhle7xlHSr4hhSRPaxHE0pGFlTGfHCm50pUHkEStqt8odev1mQbGF1DaUd24qC4aTUg9dnKkWSlioQKLY56qVk1PyWcbabCBgwFTtjgaxVkWIsYbqOxbKfuAWlZ3nogFXoRi6aBdNcCjLs+EcJxSl3CIyHfgNiuQS/lDdcOBaNfM3Mdu6oI5OQlTkOsS0tkpdkS8+tlBSgjRxMtg8ocosCtKOe1Ud0V7lxfOCkqsEt7O1jAgbakcdYrLqhNJussr4UNhYM0dheLXnuQG6AHsosn5GWeiu/EoZb3HtVQXAF5I1zVAQxURFYlgZKFsfUwk30zHQL2SgbUustBI+PAZV4ywUafWbHatm1VrIFSMFvsMOIwlSq8vjh02scLFqxHZMowQJH3aItVesNKFUeibFZWuQuqJr4memv4AjRJZWSH3YwQmWMh+gzNnESk6ABkG5mFiRuyrnRASiiYAiraMVo23kmgNUOYlyOJbEmRPbVUOWlcEz1bSCBR2alDV1b6F4XgoxIG5r1YgRlEA1a3AIoFfIk0i+oCQWyTsKltwCdj4XmvwsLWSIlhlV3zZYNCZIEAIhmxEgKKQE15LcYXT0sDJraFuljTvFRZJHY1vlKihXhg/COlUItaQ4GGZ6N1Oj/KXEEYLNnoVBgq+IIGpqV5VfVBck3ntpM4xmiRvlgRBbKGLHvkjhMINA+2YD1HTKAap1dRlQ6oDSx9A1qVbKBorvkXdVg50bQEKcWJFrs3ulv5EUudzR3pGaGL0Eg8zYVQNGgmTjvUqc0KC+iXV2B6hPY3hPEyoZvQ3vwbQXGp6XYMPQMThiS5pcJBGs1TYCZkRZBDXIgSzKKaM22bWxUl2q4CnuPKGoZ8QQ8R3biJzstObvMIjdNF1id5rOa5IlAqufJc2gA0ob4DcualBaUBxC1qBSFe8dyiDr8BtYvhTN5AyD1C5ErmFc8QZ0fLwF3tWO7oVaaRo1ULgRqyxa0PWIbzCros70FZaUVRxQ3bOo4TCAWij7dJufr3NRUh39pvtmymlSXI7MWGYWlW8nCU03WPZUUHrLaxjiyme6jaAVyRBbaNhaEacebphDYi7ZVPTeXkiAwFvl4JfB2eJBVcL1coTil9AKjfBxQpG6gtQg0HYDTrds1DEhmKtycOKPwvZDWuEffZCuMcsVZ6DY0TKymYewUhpwNK6E0bSJFTuPGomZ1g3Uq2Qj8csmrEUDNQc9lAAdRIWNmaDTza0Sp6gLEOvF+K4ufwrTY15ICkXenRgcoLLJaGQf/orH16KSpu+0ZpG6oNEAlRb/dB8ZdP8VjkiGYvwNY+E6ksbGBoetWGV1K+ZktppWoJQsDDYN9gBFVngM349xnUkNQ+2tm1rNuinb9kt/W+knd5GCKVYscN34FZE9L/7xUdddajvmvxZd4gaN9HVCOSh9KGuCPmwAZfIaivos6+i2g/mI3FloZAXEyc2BHJDuKOVaqB8LVWHDy2RW5ZC0EY3ARwJgYag3ItZmrOidRYNSbYewipEIBQkIK6yMgrT8eIwVpNId23YpMqFk6ubwrAJkhiAOFlGHsqBb8KRf1SYLTaYudYMS8mI1hUoAszXYyKrsCYK/dBXqpSp7TgV7myt8AelzGn8ntOoinpqt1jXnJl+BOMCtgUQKRAqeb1t71p0Y86cM6oJCYYQGJx7TASp7kDVQpQmV2kbVtl1UHVd35nJpA4mA6mRZrvkQVE0y6jd1LqrbFBKt0d1Gym97ZRoLBrldHCDjdr7w232QVMHX/fmaD3FqKSoDa6syq9Hd3gPsJoRT8xj1X92oLapoiCqivNxg2KE0qy1Smz2f0KLrmB2RYMLuHAzvNCuNx3m1tBvC3FVqdiUx1EwfYyrMpwYpH90vm8dleTvdeGFl5qsCzAJFmFRX1SC/+FbBvoTA8XcCSd9Dyoc+qgd13TfDvcWOFKECRl9vIsbVeguyAGUTc3NjmrYLN7ws1JmFRAXjvYuky9lV6UGkWxPreL6u1UPV+wmyaZCIUJOV1aAy7GzUbRnU054MlCVQTSaH0uxEA72ThpIVWZqD7hTUx+Z7EPQzKakojzdaLmjQLaia1LhWQJnQUbBKroFSBsQb61nmjTkpUBKQlhztBrDpZFayF8agJovvFBZEthgogU0alOinY6LRTTRZQSThv4EGmckuQzZv1+E3D2LiP/gefLCkSEP5ui5DqqsMNt9Jdq9OnkWjYp0RoI7z9pqLiaAZKM1Qcq5RfAw/ugaGEmw2WWJR8ghS0Vg1L3c1KsJbncGGVQ1HL0fWy4XE2BaYR+TvDBKBcduFt17z7FBSSjjgDGPSqhg6JnW7tS60ZocS/Bi7zJTRB+weesPecWijmcMvjrO9CchGoHAB8mEID21zvjLSbYgmHY61IrW9W2MmqptV3KHyZmSrb1dWC7oNujzNzwtjDROYIVWqS1ZbkEtdEct+7KHKuntDafQa1tzXUpVe1+20czemb5ktYsKAQnhXVDNH1eVHR4CnRYHXdLiUZP9MVJObHlZ3hrefaGvky9LDz3/ffP/q4Xw9mXfcpx9Or078vL+/8t8/Hs5fPzw9frhcP70/f3d6Od8/3J0e7q+Hv78/f3z3cnm+Xp4evzt9vL5cHj+82db4aftToK9vwUj+zd5OPGXz1V+fn88vp7+fP15Pf7m8P391J/i3357+8Hiyb+H/bxXSv69CZbPKjy/n8+Nvl3e/nP52eXi4/7Ct86VVGmbgzSxyVvnj/Y+f7gnC/en3l5fnp5frWuX8r+v55fL0cnr653HFt9+/MpF79Z/Tb7+cX86nD+enn5+fLo/Xny+PP+//1GBFccXv7vCPEd78D7ZWQDaeIAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let multipolygon = dynamic({"type":"MultiPolygon","coordinates":[[[[-73.991460000000131,40.731738000000206],[-73.992854491775518,40.730082566051351],[-73.996772,40.725432000000154],[-73.997634685522883,40.725786309886963],[-74.002855946639244,40.728346630056791],[-74.001413,40.731065000000207],[-73.996796995070824,40.73736378205173],[-73.991724524037934,40.735245208931886],[-73.990703782359589,40.734781896080477],[-73.991460000000131,40.731738000000206]]],[[[-73.958357552055688,40.800369095633819],[-73.98143901556422,40.768762584141953],[-73.981548752788598,40.7685590292784],[-73.981565335901905,40.768307084720796],[-73.981754418060945,40.768399727738668],[-73.982038573548124,40.768387823012056],[-73.982268248204349,40.768298621883247],[-73.982384797518051,40.768097213086911],[-73.982320919746599,40.767894461792181],[-73.982155532845766,40.767756204474757],[-73.98238873834039,40.767411004834273],[-73.993650353659021,40.772145571634361],[-73.99415893763998,40.772493009137818],[-73.993831082030937,40.772931787850908],[-73.993891252437052,40.772955194876722],[-73.993962585514595,40.772944653908901],[-73.99401262480508,40.772882846631894],[-73.994122058082397,40.77292405902601],[-73.994136652588594,40.772901870174394],[-73.994301342391154,40.772970028663913],[-73.994281535134448,40.77299380206933],[-73.994376552751078,40.77303955110149],[-73.994294029824005,40.773156243992048],[-73.995023275860802,40.773481196576356],[-73.99508939189289,40.773388475039134],[-73.995013963716758,40.773358035426909],[-73.995050284699261,40.773297153189958],[-73.996240651898916,40.773789791397689],[-73.996195837470992,40.773852356184044],[-73.996098807369748,40.773951805299085],[-73.996179459973888,40.773986954351571],[-73.996095245226442,40.774086186437756],[-73.995572265161172,40.773870731394297],[-73.994017424135961,40.77321375261053],[-73.993935876811335,40.773179512586211],[-73.993861942928888,40.773269531698837],[-73.993822393527211,40.773381758622882],[-73.993767019318497,40.773483981224835],[-73.993698463744295,40.773562141052594],[-73.993358326468751,40.773926888327956],[-73.992622663865575,40.774974056037109],[-73.992577842766124,40.774956016359418],[-73.992527743951555,40.775002110439829],[-73.992469745815342,40.775024159551755],[-73.992403837191887,40.775018140390664],[-73.99226708903538,40.775116033858794],[-73.99217809026365,40.775279293897171],[-73.992059084937338,40.775497598192516],[-73.992125372394938,40.775509075053385],[-73.992226867797001,40.775482211026116],[-73.992329346608813,40.775468900958522],[-73.992361756801131,40.775501899766638],[-73.992386042960277,40.775557180424634],[-73.992087684712729,40.775983970821372],[-73.990927174149746,40.777566878763238],[-73.99039616003671,40.777585065679204],[-73.989461267506471,40.778875124584417],[-73.989175778438053,40.779287524015778],[-73.988868617400072,40.779692922911607],[-73.988871874499793,40.779713738253008],[-73.989219022880576,40.779697895209402],[-73.98927785904425,40.779723439271038],[-73.989409054180143,40.779737706471963],[-73.989498614927044,40.779725044389757],[-73.989596493388234,40.779698146683387],[-73.989679812902509,40.779677568658038],[-73.989752702937935,40.779671244211556],[-73.989842247806507,40.779680752670664],[-73.990040102120489,40.779707677698219],[-73.990137977524839,40.779699769704784],[-73.99033584033225,40.779661794394983],[-73.990430598697046,40.779664973055503],[-73.990622199396725,40.779676064914298],[-73.990745069505479,40.779671328184051],[-73.990872114282197,40.779646007643876],[-73.990961672224358,40.779639683751753],[-73.991057472829539,40.779652352625774],[-73.991157429497036,40.779669775606465],[-73.991242817404469,40.779671367084504],[-73.991255318289745,40.779650782516491],[-73.991294887120119,40.779630209208889],[-73.991321967649895,40.779631796041372],[-73.991359455569423,40.779585883337383],[-73.991551059227476,40.779574821437407],[-73.99141982585985,40.779755280287233],[-73.988886144117032,40.779878898532999],[-73.988939656706265,40.779956178440393],[-73.988926103530844,40.780059292013632],[-73.988911680264692,40.780096037146606],[-73.988919261468567,40.780226094343945],[-73.988381050202634,40.780981074045783],[-73.988232413846987,40.781233144215555],[-73.988210420831663,40.781225482542055],[-73.988140000000143,40.781409000000224],[-73.988041288067166,40.781585961353777],[-73.98810029382463,40.781602878305286],[-73.988076449145055,40.781650935001608],[-73.988018059972219,40.781634188810422],[-73.987960792842145,40.781770987031535],[-73.985465811970457,40.785360700575431],[-73.986172704965611,40.786068452258647],[-73.986455862401996,40.785919219081421],[-73.987072345615601,40.785189638820121],[-73.98711901394276,40.785210319004058],[-73.986497781023601,40.785951202887254],[-73.986164628806279,40.786121882448327],[-73.986128422486075,40.786239001331111],[-73.986071135219746,40.786240706026611],[-73.986027274789123,40.786228964236727],[-73.986097637849426,40.78605822569795],[-73.985429321269592,40.785413942184597],[-73.985081137732209,40.785921935110366],[-73.985198833254501,40.785966552197777],[-73.985170502389906,40.78601333415817],[-73.985216218673656,40.786030501816427],[-73.98525509797993,40.785976205511588],[-73.98524273937646,40.785972572653328],[-73.98524962933017,40.785963139855845],[-73.985281779186749,40.785978620950075],[-73.985240032884533,40.786035858136792],[-73.985683885242182,40.786222123919686],[-73.985717529004575,40.786175994668795],[-73.985765660297687,40.786196274858618],[-73.985682871922691,40.786309786213067],[-73.985636270930442,40.786290150649279],[-73.985670722564691,40.786242911993817],[-73.98520511880038,40.786047669212785],[-73.985211035607492,40.786039554883686],[-73.985162639946992,40.786020999769754],[-73.985131636312062,40.786060297019972],[-73.985016964065125,40.78601423719563],[-73.984655078830457,40.786534741807841],[-73.985743787901043,40.786570082854738],[-73.98589227228328,40.786426529019593],[-73.985942854994988,40.786452847880334],[-73.985949561556794,40.78648711396653],[-73.985812373526713,40.786616865357047],[-73.985135209703174,40.78658761889551],[-73.984619428584324,40.786586016349787],[-73.981952458164173,40.790393724337193],[-73.972823037363767,40.803428052816756],[-73.971036786332192,40.805918478839672],[-73.966701,40.804169000000186],[-73.959647,40.801156000000113],[-73.958508540159471,40.800682279767472],[-73.95853274080838,40.800491362464697],[-73.958357552055688,40.800369095633819]]],[[[-73.943592454622546,40.782747908206574],[-73.943648235390199,40.782656161333449],[-73.943870759887162,40.781273026571704],[-73.94345932494096,40.780048275653243],[-73.943213862652243,40.779317588660199],[-73.943004239504688,40.779639495474292],[-73.942716005450905,40.779544169476175],[-73.942712374762181,40.779214856940001],[-73.942535563208608,40.779090956062532],[-73.942893408188027,40.778614093246276],[-73.942438481745029,40.777315235766039],[-73.942244919522594,40.777104088947254],[-73.942074188038887,40.776917846977142],[-73.942002667222781,40.776185317382648],[-73.942620205199006,40.775180871576474],[-73.94285645694552,40.774796600349191],[-73.94293043781397,40.774676268036011],[-73.945870899588215,40.771692257932997],[-73.946618690150586,40.77093339256956],[-73.948664164778933,40.768857624399587],[-73.950069793030679,40.767025088383498],[-73.954418260786071,40.762184104951245],[-73.95650786241211,40.760285256574043],[-73.958787773424007,40.758213471309809],[-73.973015157270069,40.764278692864671],[-73.955760332998182,40.787906554459667],[-73.944023,40.782960000000301],[-73.943592454622546,40.782747908206574]]]]});\r let coordinates = \r datatable(longitude:real, latitude:real, description:string)\r [\r real(-73.9741), 40.7914, 'Upper West Side', // In MultiPolygon\r real(-73.9950), 40.7340, 'Greenwich Village', // In MultiPolygon\r real(-73.8743), 40.7773, 'LaGuardia Airport', // In exterior of MultiPolygon\r ];\r coordinates\r | where geo_point_in_polygon(longitude, latitude, multipolygon)\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|\r |---|---|---|\r |-73.9741|40.7914|Upper West Side|\r |-73.995|40.734|Greenwich Village|\r \r Storm events in California. The events are filtered by a California state polygon and aggregated by event type and hash.\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22WS2/cNhSF9/0Vglc2MFXI++AlU2RTIKt2UaDdBYExGau2mrE0mFGSuo//3kNqyEkdrzz+cHVIXZ5zqf2wdLvtfvx9Pk7jtnvT3T1N28dxd/331fJ0GK5eX/0y75/u5+lqc7Wb5+PdOG2X4XT1+t27d9974p6YScNGqHcu+BjebzKnni1G5cK9D4FX7nvH5hy471NSYlq5w9N42D/jPuG/wFE24noKoj49q+eIisSyrutjb14sZuyxLsUVWy8pxpQ2bD15lK849CpOWDeMX0Vv5dpHdSwb1j6Z03RWkT6wiKbMsbz/BksfTclXLOa8+ozNu+SockbLKGYuEp1LlXsOTgtnp8E1efRXVx1v4kPTEa8cqXAXhVu9skbD7rlPzN5Cq0+mHDIPyUK41JMk8pkrStp2jEyDZSzOuOGAU5aijhYlfUHFUZL4TReoxx4p6PN66k011CPJy5JLBXujpPWknNiqEkh8tHquHq7ImyS8NboUKicJKZTygBZzw1iVS3m04KnJMCWsnTcP72pMzTaGvWvmlCyqr9wil87gACI37/nI6gu3wJx85RScT0XdHHvRysWzSixcvESuHI8GKa2MglTFyjWEhOzgwJ0QdlZ5dOhJqU/F5jU7BEuvvvRoklnjFpPTzCkYNawaiUo5nIUYVQ5Tx1T8Jy4Fqwn0HA3JzBi+Sly5GEV7bm/wAFOUcrUkqg27FF1Rj7CtXcoxJ6TIIDqaLvWwtFszmGBjqTwmCY4yJwFugwVvCl9kLurofLR5EDn03BcOJ0gbUD7A3kU/wFFOK6eIKaOFm8RLPcJsaplbDiFVbj544TxafIKHWn1MIebUhp69Bmn6iZVyHgLWRf8aR1c05w0cFm3q0Xil0bFLTT3BpyuHX7l2mTAhFE4qHIuezzaPacaki3kuYuxR7T7BAeYTlXkp6E5s3DnLYxeRCXkaVY43hMEyV3Jq9C230r+2LqK96vyfiwvE6/xWJ01GELO8HWCcabzIwyLEWSax53oomB0IXCo8JsZJV57Y1JVbA0MqUXstTMZs5RxVlXOgKQ+DVIKLqKoPSpVjrEYpMohknaTggkSXzYcU22Eh3Wyei0yCF7nikPODl0qYpBh6TSVmA2vmjIvT+SZTLsDMVQmDptXjzinlsWxrxflSQItDvjlx+PBc5Tg4dYUjVq3HOfTOUsxcGOa56Chu8pR5jifbc31ECSOzvu2lHlESdx5qwC5onuDAIuTCRV4sDyPJicF+2jZJYWQpPPrAbZuEaxK3Z/ngcFbHywsfIu/f/3vzw3e/LvPx8e3nYVpO3/3THY7zH8Nu6X4c7sfp53nanH9tl01Xin7DRw/qvjwMx6G7H+bbwzxOy+044Uf5Drp+6dHLF9QNHj59enzcHse/hm43f5qW65vuw9NFfdM9bE8P+NK6qC/z7Yl2w37/orjdfLXx/NBam5/aQfO43a8y11n3ZvP1SmX9Wzx+HKa74dgdxmH3sD0u3ZdxeeiuP47T3ZvH7eGme/Wqw99z2Tjdd9vP23G//bAfunHqfvp0Wubu7Z+H/XyEyt1w+rjMh/8AiuopHzsKAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let california = dynamic({"type":"Polygon","coordinates":[[[-123.233256,42.006186],[-122.378853,42.011663],[-121.037003,41.995232],[-120.001861,41.995232],[-119.996384,40.264519],[-120.001861,38.999346],[-118.71478,38.101128],[-117.498899,37.21934],[-116.540435,36.501861],[-115.85034,35.970598],[-114.634459,35.00118],[-114.634459,34.87521],[-114.470151,34.710902],[-114.333228,34.448009],[-114.136058,34.305608],[-114.256551,34.174162],[-114.415382,34.108438],[-114.535874,33.933176],[-114.497536,33.697668],[-114.524921,33.54979],[-114.727567,33.40739],[-114.661844,33.034958],[-114.524921,33.029481],[-114.470151,32.843265],[-114.524921,32.755634],[-114.72209,32.717295],[-116.04751,32.624187],[-117.126467,32.536556],[-117.24696,32.668003],[-117.252437,32.876127],[-117.329114,33.122589],[-117.471515,33.297851],[-117.7837,33.538836],[-118.183517,33.763391],[-118.260194,33.703145],[-118.413548,33.741483],[-118.391641,33.840068],[-118.566903,34.042715],[-118.802411,33.998899],[-119.218659,34.146777],[-119.278905,34.26727],[-119.558229,34.415147],[-119.875891,34.40967],[-120.138784,34.475393],[-120.472878,34.448009],[-120.64814,34.579455],[-120.609801,34.858779],[-120.670048,34.902595],[-120.631709,35.099764],[-120.894602,35.247642],[-120.905556,35.450289],[-121.004141,35.461243],[-121.168449,35.636505],[-121.283465,35.674843],[-121.332757,35.784382],[-121.716143,36.195153],[-121.896882,36.315645],[-121.935221,36.638785],[-121.858544,36.6114],[-121.787344,36.803093],[-121.929744,36.978355],[-122.105006,36.956447],[-122.335038,37.115279],[-122.417192,37.241248],[-122.400761,37.361741],[-122.515777,37.520572],[-122.515777,37.783465],[-122.329561,37.783465],[-122.406238,38.15042],[-122.488392,38.112082],[-122.504823,37.931343],[-122.701993,37.893004],[-122.937501,38.029928],[-122.97584,38.265436],[-123.129194,38.451652],[-123.331841,38.566668],[-123.44138,38.698114],[-123.737134,38.95553],[-123.687842,39.032208],[-123.824765,39.366301],[-123.764519,39.552517],[-123.85215,39.831841],[-124.109566,40.105688],[-124.361506,40.259042],[-124.410798,40.439781],[-124.158859,40.877937],[-124.109566,41.025814],[-124.158859,41.14083],[-124.065751,41.442061],[-124.147905,41.715908],[-124.257444,41.781632],[-124.213628,42.000709],[-123.233256,42.006186]]]});\r StormEvents\r | project BeginLon, BeginLat, EventType\r | where geo_point_in_polygon(BeginLon, BeginLat, california)\r | summarize count() by EventType, hash = geo_point_to_s2cell(BeginLon, BeginLat, 7)\r | project geo_s2cell_to_central_point(hash), EventType, count_\r | render piechart with (kind=map) // map rendering available in Kusto Explorer desktop\r \`\`\`\r \r The following example shows how to classify coordinates to polygons using the [partition](./partitionoperator.md) operator.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA51U22rbQBB991csepJAUfZ+cckfhBIIFIoxZiMtjhJFK6RNXTfJv3dkXezUpC2xwdZoztzOmd3KBXTjq/3W1x26QoUN8L2rXFy4Lm/LJpS+XqIutGW9TVEzIJeo2Nf2qcyTBYLPCqHDf/TV7dB33z6ivAx7ZFtno3SCxi9R2DcuWqJorAe+KPe+LcraBteBZ7VaXSiWaYGxUVJIKlLEMdiKc2UIw4xQsk4RoHhGJOaScCqUJhOQU4O5VooaqeQMNFgqpukME8YwIbFWRgqiBxhUZfCGCE37KgNQEoihlFMqBCEz8O/trddvSTrwcetsCJX7JBNQOqNQiirFOFN9MZVJqMYwJYRBq+rQUo/jwhAsORdj7x8DlRBamCkdl9pwIEtJRbnmM4woSbEGDwYoH6CKSkm11JIwTmfkvzo8oePaduib29ruE1wQnpkUMZmxQVdCRMa50RTmJoMUvZNR0Bl0ZKCH+hAoYFOAKi4wpwSGGoFQghsDSiui1YAzmDJjwCKcSSKOwKmXYbz1l0UFB+na57Y/MO9PUuXrbRmeC7dEsAdViioAHe3xDB1+ezvud8yIJB0sWDDVG5eX6NY/ud29ax0qazSdtZO4Xg42x4ES8HwWN+7kaRgwRPQUB2MRmZzHzeL1w043xuIVNa1/cHmYroYb28JwwAFQEPxwb8SNzR/j6ORG6RfgaIHizSz++JQkfe452X1Zh+wJFqItbVX+csVVaJ/d8BqKgGO7v4KFKX84dLc/a+Yw7Qsa76lZpoP1itzP4OritCNoHmp3bvPQ+TqGOXJb2Tb+M22SZCdB77ON2P/PNL4aswy8b53fNB6G3JT1ZgQc9+m4SUfaxvBRlQu7szMbB9fbb4lZo3bxBQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Polygons = datatable(description:string, polygon:dynamic)\r [ \r "New York city area", dynamic({"type":"Polygon","coordinates":[[[-73.85009765625,40.85744791303121],[-74.16046142578125,40.84290487729676],[-74.190673828125,40.59935608796518],[-73.83087158203125,40.61812224225511],[-73.85009765625,40.85744791303121]]]}),\r "Seattle area", dynamic({"type":"Polygon","coordinates":[[[-122.200927734375,47.68573021131587],[-122.4591064453125,47.68573021131587],[-122.4755859375,47.468949677672484],[-122.17620849609374,47.47266286861342],[-122.200927734375,47.68573021131587]]]}),\r "Las Vegas", dynamic({"type":"Polygon","coordinates":[[[-114.9,36.36],[-115.4498291015625,36.33282808737917],[-115.4498291015625,35.84453450421662],[-114.949951171875,35.902399875143615],[-114.9,36.36]]]}),\r ];\r let Locations = datatable(longitude:real, latitude:real)\r [\r real(-73.95), real(40.75), // Somewhere in New York\r real(-122.3), real(47.6), // Somewhere in Seattle\r real(-115.18), real(36.16) // Somewhere in Las Vegas\r ];\r Polygons\r | project polygonPartition = tostring(pack("description", description, "polygon", polygon))\r | partition hint.materialized=true hint.strategy=native by polygonPartition\r { \r Locations\r | extend description = parse_json(toscalar(polygonPartition)).description\r | extend polygon = parse_json(toscalar(polygonPartition)).polygon\r | where geo_point_in_polygon(longitude, latitude, polygon)\r | project-away polygon\r }\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|\r |---|---|---|\r |-73.95|40.75|New York city area|\r |-122.3|47.6|Seattle area|\r |-115.18|36.16|Las Vegas|\r \r See also [geo_polygon_to_s2cells()](geo-polygon-to-s2cells-function.md).\r \r Folding several polygons into one multipolygon and querying it.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA6WaW4tcxxWF3/UrGr1YAxNR94tNHkIe/JJAICR5EEK0Zxq549HM0NOKUS7/Pd863VVnHxtjSBSIUffqOlV7r7322nX0cDjv/vT08OXj0+PL7re7Vzv+3O/P/O+7h8Ob58s3X+/uvzzuPx3vbpbv311Ql4/e/Ov1+cvz4fXXu9fXdV7f7l7fPT2d7o+P+/PhhW/evXv3mxrf9u5TcZc/PvrbXXJva/Q1tstnwZX3t7srNLScUve15uzbFepcC7kUl33MfoWWWsMFEXKK4fqAnFZELTGVlnMIrcUBra1E11srvcQLNL1lE8B6KiX2kNIV2qI+cC6X2v0K9cnHcQhX8jhEtTvrpffsKhu/LhZrLLG2wCFqXJG+hpRDcrH2OJBZH7nWo2eTK5TVtEDMPbd+habafOvFNZeqef6vx/v9+//c3P6v+cwtZvLDWXJplySxdCzd9VxibL7PrTSfYicpuaRwTVZptYTcEmHsORpkTq3mUFvLvQ0oSXGh82GywJIjYXC+uzyAUcFOlTT0YqAVNvnmiutphUKMUAlHKW2FBhdbJvip+ZEzoE0Rd56jmlVDKOSVX6SY+oCG3kogYzGkaqCRTfUKl0n8gDqe76ODgd5baHDd95pK7mPV2npKxdfOyhZKQHMMLeVayoDWXNhRqqnm7QYaR41QbC6avHcu8VmwVIxQOWb+n4hft8o2U87VU0axmMpLHgpGqquPTEHjTqV0H8VIs2ijRhRbB35AYXYlsNl1t4F2H+B+rC6HCUUGOrwoNQQD7WIQXyWKYUKJVIZsDWKYrZK8QrJcdnOrrRE6KpvSSfZQgTQ3dhv7ulVqUwEpmzV9LCWzA5iaJtL5Vp2v8N0uCnmIcyTTeYVW6Y20xpv4pwCzEbiYUppbVVhUsD1aJKGn/GCVqwMZyS8B8ahTt2sSAJjJKUapoAQQhV122GLCnx0ErLlJTEb4I8Xge4Fl0fAfKNnvRC8MIapUPUSHQBwpWaQnVxEGsfKEEmTqLEgvLJQdkBb2VQb9IqEiJjwJzTHyynEKJdVhTBlQSgWVJnWlmVWLl1pRE451B7RlVLT4ligXA1VTcMg0JTj32pfKJQ2uZbtqRU+QEU69Qqln+lD2FMxm1UXPQ0lpbCBR+r4V0lg3Yc2QnHMV7+u618qWOBaZrBtW1xTgYe4mWBRfJngu26ruhJuYeE/cJwMq54K/CJa3BUi0eA71sZ6KLJGAQmhitdAQtHJAIfxKAS/+qNnaWqV2UWqSmGZZwSvCRb3x32wVqEMAssUm5l4hK52CHGRbVyIRe6O71zw3AHOaBJjTWUfBjqi1RsnUsSpboa4LDdVbDmIO6DQBUZ09ACg4FJDHW2FDqapqPUuKr1CsAOGgK1BwdtUkSmVV96QAXEdEVbE0UgulC7EpiqvVCUX7Jd+uFBMBDlWldUj2SBblz5Ggd6s2VgG1ddIwtH0giVGQ4lZvyRqkdeQpKpkDSqxoyJ4TextV+BMrJAA9oVJ09pu1B7tT8kJ/kuz5uSoMIlbQdbMqFS/T5VobHgsoFU1rQfBtDwh0JMqnOT89jjYgrSB/5NtCUTU4VRw5m1DKFNtEcqxg4bsollQ9zB7axumRFfoC9WU24LAlVKEXl4YKsSEYyRIx2A2QvEJqsEjVTyT9r8hZIsNru8aC0q+IYUkT2sRxNKRhZUxnxzsudKVB5BErarfKTnp9s0LxkdQ2lHduKgsOlVIPXZypFkpYqECi2OeqlZNT8llO3GwgYMBU7Y4Gsa6KEGMN1XcslP3ALSo7z0UDrkIxdNEumuBQlmfDOU4oSrlEZFr2CxTJJfyhumHZtWrmb2K2dUEdnYSoyHWIad0qdUW++NhCSQnSxMlg84QqsyhI2+5VdUR7lXnPK5RcJbidrWVE2FA76hCTVSeUdpNVxpvCxpo5CsOrPc8N0AXYQ5H1M8pCd+UrZbzFda8qAH6QrGmGgigmKhLDmoGy9DGVcDMdA/1CBtqyxJpWwofHoGqchSKtfrFj1axaC7liBsF32OklQWp1efywiRUuVo3YznWUIOHDDrH2GiuNNJWeSXHZGqSu6Jr4mekv4AiRpRVSH3bSgqXMByhzNrGSE6BBUC4mVuSuyjkRgWgioEjraMVoG7nmAFVOomyOJXHmxHbVkGVl8Ew1rcGCDk3Kmrq3UDwvhRgQt3XViBGUQDVrcAigV8iTSL5CSSyStxUsuQXsfC40+VlayBAtM6q+bbBoTJAgBEI2I0BQSAmuJbnNrOlhZdbQtpY27hQXSR6NbZWroFwZPgjrVCHUkuJgmOndTI3ylxJHCDZ7FgYJviKCqKldVX5RXZB4X0ubYTRL3CgPhNhCETv2RQqHGQTaFxugplM2UK2r24NSB5Q+hq5JtVI2UHyPvKsa7NwAEuLEilyb3Sv9jaTI5Y72jtTE6CUYZMauGjASJBvvVeKEBvVNrLPbQH0a036aUMnoZdoPpr3Q8LwEG4aOwRFb0uQiiWCtthEwI8oiqEEOZFFOGbXJro2V6lIFT3HnCUU9I4aI39hG5GSnNX+HQeym6RK703RekywRWP0saQYdUNoA37ioQWmF4hCyBpWqeF+hDLIOv4HlS9FMzjBI7ULkGsYVb0DHx1vgXe3oXqiVplEDhRuxyqIFXY/4BrMq6kxfYUlZxQHVxYwaDgOohbJPt/j5Ohcl1dEvum+mnCbF5ciMZWZR+XaS0HTlZU8FpZe8hiGufKbbCFqRDLGFhqUVcerhhjkk5pJNRe/thQQIvFUOfjU4SzyoSrhetlD8ElqhET5OKFJXkBoE2m7A6VqOOiYEc1UOTvxR2L5JK/yjD9I1ZrniDBQ7WkY28xBWSgOOxpUwmjaxYudRIzHTuoF6lWwkftmEtWig5qCbEqCDqLAxE3S6uVXiFHUBYr0Yv9XlT2F6zCuSQpF3JwYbqGwyGtmHv+Lxtaik6TutWaQuaDRApZV/usAMuv8KWyRDMf6GsXA9ksbGBoetWGV1K+ZktprWQClZGGwa7AaKrPAYfh/jeiY1DLW3bmo166Zs2S/9bU0/uYsUTLFigevGr4jseeUfH3VdvrZt/mvRrW/QSF8nlIPSh7Im6M0GUCavoajPso5uOZiPyJ2FRlZAnNwcyAHpjlKuhfqxUBU2vExmVQ5JG9EIvCUAFoZ6I2JtxoreWTQo1bYJqxiJUJCAsIaVUZCWH7exglS6Y1suRSaUTF0cnlWAzBDEwSLqUFboEjzpV7XJQpOpS92ghLyymkIlgNkabGRV9gTBX3UV6qUqe04Fe5srfAHpcxp/J7Tq5p6ardY15yZfgTjArYFECkQKnm9be9adGPOnDOoKhcIIDU48pg1U9iBroEoTKrWNqm27qDquLtnl0gYSAdXJslzzJqiaZNRv6lxUtykkWqO7jZRf9so0FgxyuThAxu184Zf7IKmCr9fnaz7EqaWoDKxblVmN7vLi4GpCODWPUf/VjdpKFQ1RRZSXGwxXKM1qidRizye06Drmikgw4eocDO80K43HebW0C8LcVWp2JTHUTB9jKsynBikf3S+bx2V5O914YWXmqwLMAkWYVFfVIH/1rcL/9daCEaETeRol2j8EVU2r64Iasq50ShHuMBno1cW4i29BnqEs6m+uWNNyQ4f5hWuz8ih5zHqR1jm7Kk0LfmjEHc/XPXyoeqFB+g0S1Wryvppshv+Nul6Dq9qTgbIEMsuoUZodgaiHpClmTQXdRJcQanzzxQmCm8QCpMob8Rc06NpUXW3cQyBlCC9YscFAqRsShFct84qdnClraFGOdgP4eqggnQxjstNM4BQWVLkYKIFNmqxowGME0tU1WUFVKRgDDXKfXQ5uXsdTEDyocS5rlDDO0i5N8ev9Gtpe5cj5TbJ7dTI5mi3rjACFn5cXaYwQzUDpntJ/ze5jWtK9MZRgs8kSC41AwYrmsHkbrNkSousMNqzqUHqbsr6NSMx5gQFGhtAgUSS33JDrvdAVSkoJB5xhrlpLjBZLoS+9DnG6Qgl+jF3uywgK/hCBYu9YutH94RfHWV4dZKNo2AYZN5SKPjvfMen6RKMRx1ojtbyMY4iqi7e8QmXmyFZf7rhW6DIZ8zQ/b5g1feCeVKkuWTFCX3WnLL9yDVXWZR3SpBe95oKXqvS6n6f/uzGuy50REyYawrtGNXNU3ZZ0FHt6GnhNS0xJftFENblpenXJePkTbY38uvRcpO39N68eDufd71cB+/nL+Yenx4/H8+f7w9e702H/cLt72J83f78/vNydjs/no97gv5xPx8eP9gW+QG8u4Uj+5tqBPIXz1V+enw+n3d8OL+fdn4/3h69uf4In1Vc8VQz+29Ph8Pjj8e773V+PDw/7jz/7RcMV3Mzi5Rd/2H/7ec/R9rvfHU/PT6fzV/PMnz4/nI/Xf3jAoc9PL3f7h/3pzbLi+KcKy1/+vXs+Pf39cHfeHR/vj/843n/eP3xYf/m8v/vhw/502n8Z/47hrWkIN9clXj5/+rQ/Hf952Dz4w90m8p/2Pxw+PBxfzm9+/qSbn+zlJ/v/bv/xg3by5tKg6Ep/FOAXutTtL+7i5uabV4YOr/69+/H7w+mw+3h4YifHx/OH4+PY0kqNlRTblW/+C0aGcjj4IQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Polygons = \r datatable(polygon:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.991460000000131,40.731738000000206],[-73.992854491775518,40.730082566051351],[-73.996772,40.725432000000154],[-73.997634685522883,40.725786309886963],[-74.002855946639244,40.728346630056791],[-74.001413,40.731065000000207],[-73.996796995070824,40.73736378205173],[-73.991724524037934,40.735245208931886],[-73.990703782359589,40.734781896080477],[-73.991460000000131,40.731738000000206]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.958357552055688,40.800369095633819],[-73.98143901556422,40.768762584141953],[-73.981548752788598,40.7685590292784],[-73.981565335901905,40.768307084720796],[-73.981754418060945,40.768399727738668],[-73.982038573548124,40.768387823012056],[-73.982268248204349,40.768298621883247],[-73.982384797518051,40.768097213086911],[-73.982320919746599,40.767894461792181],[-73.982155532845766,40.767756204474757],[-73.98238873834039,40.767411004834273],[-73.993650353659021,40.772145571634361],[-73.99415893763998,40.772493009137818],[-73.993831082030937,40.772931787850908],[-73.993891252437052,40.772955194876722],[-73.993962585514595,40.772944653908901],[-73.99401262480508,40.772882846631894],[-73.994122058082397,40.77292405902601],[-73.994136652588594,40.772901870174394],[-73.994301342391154,40.772970028663913],[-73.994281535134448,40.77299380206933],[-73.994376552751078,40.77303955110149],[-73.994294029824005,40.773156243992048],[-73.995023275860802,40.773481196576356],[-73.99508939189289,40.773388475039134],[-73.995013963716758,40.773358035426909],[-73.995050284699261,40.773297153189958],[-73.996240651898916,40.773789791397689],[-73.996195837470992,40.773852356184044],[-73.996098807369748,40.773951805299085],[-73.996179459973888,40.773986954351571],[-73.996095245226442,40.774086186437756],[-73.995572265161172,40.773870731394297],[-73.994017424135961,40.77321375261053],[-73.993935876811335,40.773179512586211],[-73.993861942928888,40.773269531698837],[-73.993822393527211,40.773381758622882],[-73.993767019318497,40.773483981224835],[-73.993698463744295,40.773562141052594],[-73.993358326468751,40.773926888327956],[-73.992622663865575,40.774974056037109],[-73.992577842766124,40.774956016359418],[-73.992527743951555,40.775002110439829],[-73.992469745815342,40.775024159551755],[-73.992403837191887,40.775018140390664],[-73.99226708903538,40.775116033858794],[-73.99217809026365,40.775279293897171],[-73.992059084937338,40.775497598192516],[-73.992125372394938,40.775509075053385],[-73.992226867797001,40.775482211026116],[-73.992329346608813,40.775468900958522],[-73.992361756801131,40.775501899766638],[-73.992386042960277,40.775557180424634],[-73.992087684712729,40.775983970821372],[-73.990927174149746,40.777566878763238],[-73.99039616003671,40.777585065679204],[-73.989461267506471,40.778875124584417],[-73.989175778438053,40.779287524015778],[-73.988868617400072,40.779692922911607],[-73.988871874499793,40.779713738253008],[-73.989219022880576,40.779697895209402],[-73.98927785904425,40.779723439271038],[-73.989409054180143,40.779737706471963],[-73.989498614927044,40.779725044389757],[-73.989596493388234,40.779698146683387],[-73.989679812902509,40.779677568658038],[-73.989752702937935,40.779671244211556],[-73.989842247806507,40.779680752670664],[-73.990040102120489,40.779707677698219],[-73.990137977524839,40.779699769704784],[-73.99033584033225,40.779661794394983],[-73.990430598697046,40.779664973055503],[-73.990622199396725,40.779676064914298],[-73.990745069505479,40.779671328184051],[-73.990872114282197,40.779646007643876],[-73.990961672224358,40.779639683751753],[-73.991057472829539,40.779652352625774],[-73.991157429497036,40.779669775606465],[-73.991242817404469,40.779671367084504],[-73.991255318289745,40.779650782516491],[-73.991294887120119,40.779630209208889],[-73.991321967649895,40.779631796041372],[-73.991359455569423,40.779585883337383],[-73.991551059227476,40.779574821437407],[-73.99141982585985,40.779755280287233],[-73.988886144117032,40.779878898532999],[-73.988939656706265,40.779956178440393],[-73.988926103530844,40.780059292013632],[-73.988911680264692,40.780096037146606],[-73.988919261468567,40.780226094343945],[-73.988381050202634,40.780981074045783],[-73.988232413846987,40.781233144215555],[-73.988210420831663,40.781225482542055],[-73.988140000000143,40.781409000000224],[-73.988041288067166,40.781585961353777],[-73.98810029382463,40.781602878305286],[-73.988076449145055,40.781650935001608],[-73.988018059972219,40.781634188810422],[-73.987960792842145,40.781770987031535],[-73.985465811970457,40.785360700575431],[-73.986172704965611,40.786068452258647],[-73.986455862401996,40.785919219081421],[-73.987072345615601,40.785189638820121],[-73.98711901394276,40.785210319004058],[-73.986497781023601,40.785951202887254],[-73.986164628806279,40.786121882448327],[-73.986128422486075,40.786239001331111],[-73.986071135219746,40.786240706026611],[-73.986027274789123,40.786228964236727],[-73.986097637849426,40.78605822569795],[-73.985429321269592,40.785413942184597],[-73.985081137732209,40.785921935110366],[-73.985198833254501,40.785966552197777],[-73.985170502389906,40.78601333415817],[-73.985216218673656,40.786030501816427],[-73.98525509797993,40.785976205511588],[-73.98524273937646,40.785972572653328],[-73.98524962933017,40.785963139855845],[-73.985281779186749,40.785978620950075],[-73.985240032884533,40.786035858136792],[-73.985683885242182,40.786222123919686],[-73.985717529004575,40.786175994668795],[-73.985765660297687,40.786196274858618],[-73.985682871922691,40.786309786213067],[-73.985636270930442,40.786290150649279],[-73.985670722564691,40.786242911993817],[-73.98520511880038,40.786047669212785],[-73.985211035607492,40.786039554883686],[-73.985162639946992,40.786020999769754],[-73.985131636312062,40.786060297019972],[-73.985016964065125,40.78601423719563],[-73.984655078830457,40.786534741807841],[-73.985743787901043,40.786570082854738],[-73.98589227228328,40.786426529019593],[-73.985942854994988,40.786452847880334],[-73.985949561556794,40.78648711396653],[-73.985812373526713,40.786616865357047],[-73.985135209703174,40.78658761889551],[-73.984619428584324,40.786586016349787],[-73.981952458164173,40.790393724337193],[-73.972823037363767,40.803428052816756],[-73.971036786332192,40.805918478839672],[-73.966701,40.804169000000186],[-73.959647,40.801156000000113],[-73.958508540159471,40.800682279767472],[-73.95853274080838,40.800491362464697],[-73.958357552055688,40.800369095633819]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.943592454622546,40.782747908206574],[-73.943648235390199,40.782656161333449],[-73.943870759887162,40.781273026571704],[-73.94345932494096,40.780048275653243],[-73.943213862652243,40.779317588660199],[-73.943004239504688,40.779639495474292],[-73.942716005450905,40.779544169476175],[-73.942712374762181,40.779214856940001],[-73.942535563208608,40.779090956062532],[-73.942893408188027,40.778614093246276],[-73.942438481745029,40.777315235766039],[-73.942244919522594,40.777104088947254],[-73.942074188038887,40.776917846977142],[-73.942002667222781,40.776185317382648],[-73.942620205199006,40.775180871576474],[-73.94285645694552,40.774796600349191],[-73.94293043781397,40.774676268036011],[-73.945870899588215,40.771692257932997],[-73.946618690150586,40.77093339256956],[-73.948664164778933,40.768857624399587],[-73.950069793030679,40.767025088383498],[-73.954418260786071,40.762184104951245],[-73.95650786241211,40.760285256574043],[-73.958787773424007,40.758213471309809],[-73.973015157270069,40.764278692864671],[-73.955760332998182,40.787906554459667],[-73.944023,40.782960000000301],[-73.943592454622546,40.782747908206574]]]}),\r ];\r let Coordinates = \r datatable(longitude:real, latitude:real, description:string)\r [\r real(-73.9741), 40.7914, 'Upper West Side',\r real(-73.9950), 40.7340, 'Greenwich Village',\r real(-73.8743), 40.7773, 'LaGuardia Airport',\r ];\r let multipolygon = toscalar(\r Polygons\r | project individual_polygon = pack_array(polygon.coordinates)\r | summarize multipolygon_coordinates = make_list(individual_polygon)\r | project multipolygon = bag_pack("type","MultiPolygon", "coordinates", multipolygon_coordinates));\r Coordinates\r | where geo_point_in_polygon(longitude, latitude, multipolygon)\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|\r |---|---|---|\r |-73.9741|40.7914|Upper West Side|\r |-73.995|40.734|Greenwich Village|\r \r The following example will return a null result because of the invalid coordinate input.\r \r \`\`\`\r print in_polygon = geo_point_in_polygon(200,1,dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,1],[0,0]]]}))\r \`\`\`\r \r **Output**\r \r | in_polygon |\r |------------|\r | |\r \r The following example will return a null result because of the invalid polygon input.\r \r \`\`\`\r print in_polygon = geo_point_in_polygon(1,1,dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,10],[0,0]]]}))\r \`\`\`\r \r **Output**\r \r | in_polygon |\r |------------|\r | |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-point-in-polygon-function","geo-point-in-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_point_to_geohash","Calculates the geohash string value of a geographic location.",`Read more about [geohash](https://en.wikipedia.org/wiki/Geohash). \r \r ## Syntax\r \r \`geo_point_to_geohash(\`*longitude*\`,\` *latitude*\`,\`[ *accuracy* ]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *longitude* | real | ✓ | Geospatial coordinate, longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *latitude* | real | ✓ | Geospatial coordinate, latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *accuracy* | int | | Defines the requested accuracy. Supported values are in the range [1, 18]. If unspecified, the default value \`5\` is used.|\r \r ## Returns\r \r The geohash string value of a given geographic location with requested accuracy length. If the coordinate or accuracy is invalid, the query will produce an empty result.\r \r > [!NOTE]\r >\r > * Geohash can be a useful geospatial clustering tool.\r > * Geohash has 18 accuracy levels with area coverage ranging from 25 Million km\xB2 at the highest level 1 to 0.6 \u03BC\xB2 at the lowest level 18.\r > * Common prefixes of geohash indicate proximity of points to each other. The longer a shared prefix is, the closer the two places are. Accuracy value translates to geohash length.\r > * Geohash is a rectangular area on a plane surface.\r > * Invoking the [geo_geohash_to_central_point()](geo-geohash-to-central-point-function.md) function on a geohash string that was calculated on longitude x and latitude y won't necessarily return x and y.\r > * Due to the geohash definition, it's possible that two geographic locations are very close to each other but have different geohash codes.\r \r **Geohash rectangular area coverage per accuracy value:**\r \r | Accuracy | Width | Height |\r |----------|-----------|-----------|\r | 1 | 5000 km | 5000 km |\r | 2 | 1250 km | 625 km |\r | 3 | 156.25 km | 156.25 km |\r | 4 | 39.06 km | 19.53 km |\r | 5 | 4.88 km | 4.88 km |\r | 6 | 1.22 km | 0.61 km |\r | 7 | 152.59 m | 152.59 m |\r | 8 | 38.15 m | 19.07 m |\r | 9 | 4.77 m | 4.77 m |\r | 10 | 1.19 m | 0.59 m |\r | 11 | 149.01 mm | 149.01 mm |\r | 12 | 37.25 mm | 18.63 mm |\r | 13 | 4.66 mm | 4.66 mm |\r | 14 | 1.16 mm | 0.58 mm |\r | 15 | 145.52 \u03BC | 145.52 \u03BC |\r | 16 | 36.28 \u03BC | 18.19 \u03BC |\r | 17 | 4.55 \u03BC | 4.55 \u03BC |\r | 18 | 1.14 \u03BC | 0.57 \u03BC |\r \r See also [geo_point_to_s2cell()](geo-point-to-s2cell-function.md), [geo_point_to_h3cell()](geo-point-to-h3cell-function.md).\r \r For comparison with other available grid systems, see [geospatial clustering with Kusto Query Language](geospatial-grid-systems.md).`,`US storm events aggregated by geohash.\r \r \r \r \`\`\`\r StormEvents\r | project BeginLon, BeginLat\r | summarize by hash=geo_point_to_geohash(BeginLon, BeginLat, 3)\r | project geo_geohash_to_central_point(hash)\r | render scatterchart with (kind=map)\r \`\`\`\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzc9ILM5QsAWx4gvygWLxJfnxUGENQ2NLPQsDM0NDUx0FY1M9U1MTQyMLHQVDI00Aj1DetD8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print geohash = geo_point_to_geohash(139.806115, 35.554128, 12) \r \`\`\`\r \r **Output**\r \r | geohash |\r |--------------|\r | xn76m27ty9g4 |\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzc9ILM5QsAWx4gvygWLxJfnxUGENXQsDPUNLUwsjSx0FI1M9CwMjI0NTHQULTQB7u14ZPgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print geohash = geo_point_to_geohash(-80.195829, 25.802215, 8)\r \`\`\`\r \r **Output**\r \r |geohash|\r |---|\r |dhwfz15h|\r \r The following example finds groups of coordinates. Every pair of coordinates in the group resides in a rectangular area of 4.88 km by 4.88 km.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42Qy07DMBBF9/mKUVeJZNo0ceJSqYvCZyBkuY2bWDieyI8FiI/H5EEQLGBmMfbozFncRvjYFy1TjVfhFRqumiM4b5VpCWg0rfKhkUewUui4iMz6z5KnBGJtzhsCDYZPz92+KLZlXtKcZgQo21Ysp4eCTODDL5AyWs1gzfJqAR9/gAU77Kt6Aev7sibJc/IOLvS9sOpNjmdXDMbDaZpppP9dux0oL3sHg7TQWgzDJBm1SzYuqnvxIrlWzn9PLPtTqwz4Tk7m0Xl5hVZiJ1wXpfHFB1TGc498Xqdf4a+xZ7NzucTbav0AhjDhi8sBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(location_id:string, longitude:real, latitude:real)\r [\r "A", double(-122.303404), 47.570482,\r "B", double(-122.304745), 47.567052,\r "C", double(-122.278156), 47.566936,\r ]\r | summarize count = count(), // items per group count\r locations = make_list(location_id) // items in the group\r by geohash = geo_point_to_geohash(longitude, latitude) // geohash of the group\r \`\`\`\r \r **Output**\r \r | geohash | count | locations |\r |---------|-------|------------|\r | c23n8 | 2 | ["A", "B"] |\r | c23n9 | 1 | ["C"] |\r \r The following example produces an empty result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzc9ILM5QsAWx4gvygWLxJfnxUGENIwMDHUMdC00AvfV/vi0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print geohash = geo_point_to_geohash(200,1,8)\r \`\`\`\r \r **Output**\r \r | geohash |\r |---------|\r | |\r \r The following example produces an empty result because of the invalid accuracy input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhPzc9ILM5QsAWx4gvygWLxJfnxUGENQx1DHaCQRl5pTo6mJgCmJkAVMwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print geohash = geo_point_to_geohash(1,1,int(null))\r \`\`\`\r \r **Output**\r \r | geohash |\r |---------|\r | |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-point-to-geohash-function","geo-point-to-geohash-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_point_to_h3cell","Calculates the H3 Cell token string value of a geographic location.",`Read more about [H3 Cell](https://eng.uber.com/h3/).\r \r ## Syntax\r \r \`geo_point_to_h3cell(\`*longitude*\`,\` *latitude*\`,\` [ *resolution* ]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *longitude* | real | ✓ | Geospatial coordinate, longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *latitude* | real | ✓ | Geospatial coordinate, latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *resolution* | int | | Defines the requested cell resolution. Supported values are in the range [0, 15]. If unspecified, the default value \`6\` is used.|\r \r ## Returns\r \r The H3 Cell token string value of a given geographic location. If the coordinates or levels are invalid, the query will produce an empty result.\r \r > [!NOTE]\r >\r > * H3 Cell can be a useful geospatial clustering tool.\r > * H3 Cell has 16 levels of hierarchy with area coverage ranging from 4,250,547km\xB2 at the highest level 0 to 0.9m\xB2 at the lowest level 15.\r > * H3 Cell has a unique hexagon shape and this leads some unique properties:\r > * Hexagons have 6 neighbors\r > * Hexagons allow us to approximate radiuses easily and all neighbors are equidistant\r > * Hexagons are visually pleasant\r > * In some rare cases the shape is pentagon.\r > * H3 Cell has a rectangular area on a plane surface.\r > * Invoking the [geo_h3cell_to_central_point()](geo-h3cell-to-central-point-function.md) function on an H3 Cell token string that was calculated on longitude x and latitude y won't necessarily return x and y.\r > * It's possible that two geographic locations are very close to each other but have different H3 Cell tokens.\r \r **H3 Cell approximate area coverage per resolution value**\r \r |Level|Average Hexagon Edge Length|\r |--|--|\r |0|1108 km|\r |1|419 km|\r |2|158 km|\r |3|60 km|\r |4|23 km|\r |5|8 km|\r |6|3 km|\r |7|1 km|\r |8|460 m|\r |9|174 m|\r |10|66 m|\r |11|25 m|\r |12|9 m|\r |13|3 m|\r |14|1 m|\r |15|0.5 m|\r \r The table source can be found [in this H3 Cell statistical resource](https://h3geo.org/docs/core-library/restable/).\r \r See also [geo_point_to_s2cell()](geo-point-to-s2cell-function.md), [geo_point_to_geohash()](geo-point-to-geohash-function.md).\r \r For comparison with other available grid systems. see [geospatial clustering with Kusto Query Language](geospatial-grid-systems.md).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgwTk7NyVGwVUhPzY8vyAcKxZfkx0NENXTNTfQMTExMgdjMwNjSwtxER8HEQM/MwtLI1MDC1NLY0MQSJGamCQB924YeTQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print h3cell = geo_point_to_h3cell(-74.04450446039874, 40.689250859314974, 6)\r \`\`\`\r \r **Output**\r \r |h3cell|\r |---|\r |862a1072fffffff|\r \r The following example finds groups of coordinates. Every pair of coordinates in the group resides in the H3 Cell with average hexagon area of 253 km\xB2.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42QsU7DMBCGdz/FqVMimTbBaexUYoAu8AwIWWlypBaOHdnOAOLhMTVpywTnwTp/5++kv29DPAeNmbZdG5Q1UvU7H5wyAwVtzaDC3OPOYatjHyfObU6eCcRa3a8o3HC2brZ1LRiFqliLgjcFp4k/LLysRd0kXgpWVj98v3DRlJU4cV6xW84oeSGf4OdxbJ36QOjsbALcpTvLKfy3Nht4Cjh6mNDB4Ow8JQe5HloC8HHD2L6h1MqH61jyv+zKQDhiWvBLfXiHI+tQ66ge0MrJKhNksDK9ZuecLxFT2OYn9SOD/fdP+3qRfwFmTm29tgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(location_id:string, longitude:real, latitude:real)\r [\r "A", -73.956683, 40.807907,\r "B", -73.916869, 40.818314,\r "C", -73.989148, 40.743273,\r ]\r | summarize count = count(), // Items per group count\r locations = make_list(location_id) // Items in the group\r by h3cell = geo_point_to_h3cell(longitude, latitude, 5) // H3 Cell of the group\r \`\`\`\r \r **Output**\r \r |h3cell|count|locations|\r |---|---|---|\r |852a100bfffffff|2|[<br> "A",<br> "B"<br>]|\r |852a1073fffffff|1|[<br> "C"<br>]|\r \r The following example produces an empty result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgwTk7NyVGwVUhPzY8vyAcKxZfkx0NENYwNDHQMdSw0Ab7tXHErAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print h3cell = geo_point_to_h3cell(300,1,8)\r \`\`\`\r \r **Output**\r \r |h3cell|\r |---|\r ||\r \r The following example produces an empty result because of the invalid level input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgwTk7NyVGwVUhPzY8vyAcKxZfkx0NENQx1gNBMEwAbZ3TmKgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print h3cell = geo_point_to_h3cell(1,1,16)\r \`\`\`\r \r **Output**\r \r |h3cell|\r |---|\r ||\r \r The following example produces an empty result because of the invalid level input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgwTk7NyVGwVUhPzY8vyAcKxZfkx0NENQx1DHWAIhp5pTk5mpoAkLg/djEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print h3cell = geo_point_to_h3cell(1,1,int(null))\r \`\`\`\r \r **Output**\r \r |h3cell|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-point-to-h3cell-function","geo-point-to-h3cell-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_point_to_s2cell","Calculates the S2 cell token string value of a geographic location.",`S2 Cell can be a useful geospatial clustering tool. The S2 Cell is a cell on a spherical surface and its edges are geodesics. S2 Cell has 31 levels of hierarchy with area coverage ranging from 85,011,012.19km\xB2 at the highest level of 0 to 0.44 cm\xB2 at the lowest level of 30. S2 Cell preserves the cell center well during level increase from 0 to 30. Two geographic locations can be very close to each other but have different S2 cell tokens.\r \r >[!NOTE]\r > If you invoke the [geo_s2cell_to_central_point()](geo-s2cell-to-central-point-function.md) function on an S2 cell token string that was calculated on longitude x and latitude y, the function won't necessarily return x and y.\r \r Read more about [S2 cell hierarchy](https://s2geometry.io/devguide/s2cell_hierarchy).\r \r ## Syntax\r \r \`geo_point_to_s2cell(\`*longitude*\`,\` *latitude*\`,\` [ *level* ]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *longitude* | real | ✓ | Geospatial coordinate, longitude value in degrees. Valid value is a real number and in the range [-180, +180].|\r | *latitude* | real | ✓ | Geospatial coordinate, latitude value in degrees. Valid value is a real number and in the range [-90, +90].|\r | *level* | int | | Defines the requested cell level. Supported values are in the range [0, 30]. If unspecified, the default value \`11\` is used.|\r \r ## Returns\r \r The S2 cell token string value of a given geographic location. If the coordinates or levels are invalid, the query will produce an empty result.\r \r ## S2 Cell approximate area coverage per level value\r \r For every level, the size of the S2 Cell is similar but not exactly equal. Nearby cell sizes tend to be more equal.\r \r |Level|Minimum random cell edge length (UK)|Maximum random cell edge length (US)|\r |--|--|--|\r |0|7842 km|7842 km|\r |1|3921 km|5004 km|\r |2|1825 km|2489 km|\r |3|840 km|1310 km|\r |4|432 km|636 km|\r |5|210 km|315 km|\r |6|108 km|156 km|\r |7|54 km|78 km|\r |8|27 km|39 km|\r |9|14 km|20 km|\r |10|7 km|10 km|\r |11|3 km|5 km|\r |12|1699 m|2 km|\r |13|850 m|1225 m|\r |14|425 m|613 m|\r |15|212 m|306 m|\r |16|106 m|153 m|\r |17|53 m|77 m|\r |18|27 m|38 m|\r |19|13 m|19 m|\r |20|7 m|10 m|\r |21|3 m|5 m|\r |22|166 cm|2 m|\r |23|83 cm|120 cm|\r |24|41 cm|60 cm|\r |25|21 cm|30 cm|\r |26|10 cm|15 cm|\r |27|5 cm|7 cm|\r |28|2 cm|4 cm|\r |29|12 mm|18 mm|\r |30|6 mm|9 mm|\r \r The table source can be found [in this S2 Cell statistical resource](https://s2geometry.io/resources/s2cell_statistics).\r \r For comparison with other available grid systems, see [geospatial clustering with Kusto Query Language](geospatial-grid-systems.md).`,`### US storm events aggregated by S2 Cell\r \r \r \r \`\`\`\r StormEvents\r | project BeginLon, BeginLat\r | summarize by hash=geo_point_to_s2cell(BeginLon, BeginLat, 5)\r | project geo_s2cell_to_central_point(hash)\r | render scatterchart with (kind=map)\r \`\`\`\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2Sk7NyVGwVUhPzY8vyAcKxZfkx0NENXQtDPQMLU0tjCx1FIxM9SwMjIwMTXUULDQBug9pJTwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s2cell = geo_point_to_s2cell(-80.195829, 25.802215, 8)\r \`\`\`\r \r **Output**\r \r | s2cell |\r |--------|\r | 88d9b |\r \r ### Find a group of coordinates\r \r The following example finds groups of coordinates. Every pair of coordinates in the group resides in the S2 cell with a maximum area of 1632.45 km\xB2.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42QzWrDMAyA73kK0VMCpj9J/1boYdtjlGLcRE3FHCvYymFjD1+3Zml32qyD0Yf0CakxEuNkMbdcGyF2mppdEE+uVWDZtSRDgzuPxsY8VoxpkR0ygMnrRMFiPl2U1VLBqlI39pZYtdq8jOw9sfV2WSZ2zL4hDF1nPH0h1Dw4gX3680LBP99sBiTYBejRQ+t56JMiey762S3EAZ35QG0pyPPGxR9yciAXTP5f5tMnhLJGa6O5RdY9kxMtrBPNxws+jqdgW9zMoYR7I58f7itUpqIvjwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(location_id:string, longitude:real, latitude:real)\r [\r "A", 10.1234, 53,\r "B", 10.3579, 53,\r "C", 10.6842, 53,\r ]\r | summarize count = count(), // items per group count\r locations = make_list(location_id) // items in the group\r by s2cell = geo_point_to_s2cell(longitude, latitude, 8) // s2 cell of the group\r \`\`\`\r \r **Output**\r \r | s2cell | count | locations |\r |--------|-------|-----------|\r | 47b1d | 2 | ["A","B"] |\r | 47ae3 | 1 | ["C"] |\r \r ### Empty results\r \r The following example produces an empty result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2Sk7NyVGwVUhPzY8vyAcKxZfkx0NENYwNDHQMdSw0AU8vTgcrAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print s2cell = geo_point_to_s2cell(300,1,8)\r \`\`\`\r \r **Output**\r \r | s2cell |\r |--------|\r | |\r \r The following example produces an empty result because of the invalid level input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2Sk7NyVGwVUhPzY8vyAcKxZfkx0NENQx1DHWMTTUB9oFeACoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s2cell = geo_point_to_s2cell(1,1,35)\r \`\`\`\r \r **Output**\r \r | s2cell |\r |--------|\r | |\r \r The following example produces an empty result because of the invalid level input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2Sk7NyVGwVUhPzY8vyAcKxZfkx0NENQx1DHWAIhp5pTk5mpoAYUJIkTEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s2cell = geo_point_to_s2cell(1,1,int(null))\r \`\`\`\r \r **Output**\r \r | s2cell |\r |--------|\r | |\r \r ## See also\r \r * [geo_point_to_geohash()](geo-point-to-geohash-function.md)\r * [geo_point_to_h3cell()](geo-point-to-h3cell-function.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-point-to-s2cell-function","geo-point-to-s2cell-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_area","Calculates the area of a polygon or a multipolygon on Earth.",`## Syntax\r \r \`geo_polygon_area(\`*polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The area of a polygon or a multipolygon, in square meters, on Earth. If the polygon or the multipolygon is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r > * If input is a multipolygon and contains more than one polygon, the result will be the area of polygons union.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.`,`The following example calculates NYC Central Park area.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02Py2rDMBBF9/0Ko1UCbpA0modS+g/dG2OEI4KpKxlVG1P6741rDFkN3Dlc7pljbcaYagnzsITy2bw3tzWFr2k8/ai6LlFd1Uee13tOqlVjzuU2pVDjt7p2XffKcPHOY+v0hT35vt0jFM2WyAIC2u0pWpOQBiTjrTkwsdp4Z50DcfLfQWKR2IJGZj4wBsMi9KhC8DvmEA0Q6u0c2POOvv89v70sZUq1CSWGh9Y95mHZTYYtOj1rn/8Au8DFaggBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r print area = geo_polygon_area(central_park)\r \`\`\`\r \r **Output**\r \r |area|\r |---|\r |3475207.28346606|\r \r The following example performs union of polygons in multipolygon and calculates area on the unified polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WRzWrDMAyA73uKklMLXZFl669jjzDYfZQS2lACWRLS9BDG3n1qvbS7TReD9Fn+ZDXVuOi7Zjp17XnxujhObflZH5ZfxTj1VbEt3i7NWL9noFgXh64bjnVbjtW52H54PEvcWDJaJ9iIse3WOUUKgswYKRJeiwrAyhCJg2GYMUUIljClqElvPViRWDACiciMSQyiyt6KomUsEYXIBNdjxv567Dw566F7BH8BReINEDILComYSOkuE0AI1TUJM+dQskCUWNjunDGAmzMzBM79wGdSvxvsIc3B7VRNDSnPRgzmADFHvn/Bv3Ye36uXp36o28eu9pe27tp9OVSlr+1Udfvfyi21nLHVD9mabgXgAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let polygons = dynamic({"type":"MultiPolygon","coordinates":[[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]],[[[-73.94262313842773,40.775991804565585],[-73.98107528686523,40.791849155467695],[-73.99600982666016,40.77092185281977],[-73.96150588989258,40.75609977566361],[-73.94262313842773,40.775991804565585]]]]});\r print polygons_union_area = geo_polygon_area(polygons)\r \`\`\`\r \r **Output**\r \r |polygons_union_area|\r |---|\r |10889971.5343487|\r \r The following example calculates top 5 biggest US states by area.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsNjg8uSSxJLeaqUSgoys9KTS5RyEvMTVWwVUhLTSwpLUot1gOKF6QWlWQCmX6Ovq46CgX5OZXp+XlANemp+fFQXnxKal5xZlqlBlwfUDI3taSoUhPNbB2FxKLURDTdICENKAekoSS/QMFUIakSojYltTgZAArmjpSrAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r US_States\r | project name = features.properties.NAME, polygon = geo_polygon_densify(features.geometry)\r | project name, area = geo_polygon_area(polygon)\r | top 5 by area desc\r \`\`\`\r \r **Output**\r \r |name|area|\r |---|---|\r |Alaska|1550934810070.61|\r |Texas|693231378868.483|\r |California|410339536449.521|\r |Montana|379583933973.436|\r |New Mexico|314979912310.579|\r \r The following example returns True because of the invalid polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcgszivNydFIT82PL8jPqUzPz4tPLEpN1EipzEvMzUzWqFYqqSxIVbJSUAqASCvpKCXn5xelZOYllqQWAyWio6MNdAxidaINDXQMkWmQaGxsraamJgCVD2IfawAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print isnull(geo_polygon_area(dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,10],[0,0]]]})))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-area-function","geo-polygon-area-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_buffer","Calculates polygon or multipolygon that contains all points within the given radius of the input polygon or multipolygon on Earth.",`## Syntax\r \r \`geo_polygon_buffer(\`*polygon*\`,\` *radius*\`,\` *tolerance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *radius* | real | ✓ | Buffer radius in meters. Valid value must be positive.|\r | *tolerance* | real || Defines the tolerance in meters that determines how much a polygon can deviate from the ideal radius. If unspecified, the default value \`10\` is used. Tolerance should be no lower than 0.0001% of the radius. Specifying tolerance bigger than radius will lower the tolerance to biggest possible value below the radius.|\r \r ## Returns\r \r Polygon or MultiPolygon around the input Polygon or multipolygon. If the coordinates or radius or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1], ..., [lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.\r * Polygon contains its vertices.`,`The following query calculates polygon around input polygon, with radius of 10km.\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});\r print buffer = geo_polygon_buffer(polygon, 10000)\r \`\`\`\r \r |buffer|\r |---|\r |{"type": "Polygon","coordinates": [ ... ]}|\r \r The following query calculates buffer around each polygon and unifies result\r \r \`\`\`\r datatable(polygon:dynamic, radius:real )\r [\r dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,\r dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20\r ]\r | project buffer = geo_polygon_buffer(polygon, radius)\r | summarize polygons = make_list(buffer)\r | project result = geo_union_polygons_array(polygons)\r \`\`\`\r \r |result|\r |---|\r |{"type": "Polygon","coordinates": [ ... ]}|\r \r The following example will return true, due to invalid polygon.\r \r \`\`\`\r print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))\r \`\`\`\r \r |buffer|\r |---|\r |True|\r \r The following example will return true, due to invalid radius.\r \r \`\`\`\r print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))\r \`\`\`\r \r |buffer|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-buffer-function","geo-polygon-buffer-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_centroid","Calculates the centroid of a polygon or a multipolygon on Earth.",`## Syntax\r \r \`geo_polygon_centroid(\`*polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The centroid coordinate values in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If polygon or multipolygon are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r > * If input is a multipolygon and contains more than one polygon, the result will be the centroid of polygons union.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.`,`The following example calculates NYC Central Park centroid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02PzYqDMBSF9/MUklUFpyS5uT9p6TvMXkREQ5HaRKwbKX33seMIXV049+NwviHMWRviPDVDPTbTLbtk3RKbe98enmpexqBO6icNyzVFVag2panrYzOHhzqVZfnNcPTOY+H0kT35qtgiFM2WyAIC2vdTtCYhDUjGW7NjYrXxzjoH4uSvg8QisQWNzLxjDIZFaK1C8BvmEA0Q6vfZsc8dVfXKz1/j1Md/vdR3q9o1pHrcbOo9Pnzq578zKeEgEAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r print centroid = geo_polygon_centroid(central_park)\r \`\`\`\r \r **Output**\r \r |centroid|\r |---|\r |{"type": "Point", "coordinates": [-73.965735689907618, 40.782550538057812]}|\r \r The following example calculates NYC Central Park centroid longitude.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02P3WqEMBBG732KkKtdsJK/mSS79B16LyKiQWxtEtLcyLbvXncl4NXAN2c+5qwuk9H5nIa1j0P6Iu9k2vzwvYyXB81bdPRGP8K6zcHTmo4hpGnxQ3Y/9Na27ZuWjVUWasUabdF29RGBYVogCgkSxHNpGEODTAJyK3jBjGDcKqGUNMq8OtAIQC0kA611wbTk2hjcq0DaA1MAXCKw5yjY+Y+u+7veq5gWn0n18gvLtLvNLvTx0OlLfDn7X6tfElP4dGMmq5/3k4I1J/mWdf/IA8G+OQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r print \r centroid = geo_polygon_centroid(central_park)\r | project lng = centroid.coordinates[0]\r \`\`\`\r \r **Output**\r \r |lng|\r |---|\r |-73.9657356899076|\r \r The following example performs union of polygons in multipolygon and calculates centroid of the unified polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WRzWoCQQyA732KZU8KW8lkJn+WPkKh9yIiusiCnRFdD1L67o1ud+2tuQwk32S+TA5tXx3L4bov+Vy9Vrtr3nx229lX3V+Pbb2s3y6HvnsfgLqpt6Wcdl3e9O25Xn54PEtcWDJqEizE2FbNkCIFQWaMFAlvRQVgZYjEwTCMmCIES5hS1KT3HqxILBiBRGTEJAZRZW9F0QYsEYXIBLdjxP56rDw56qF7BH8BReIdEDILComYSGmSCSCE6pqEA+dQskCUWNgmzhjAzZkZAg/9wGdSvxvsIc3B7VRNDWmYjRjMAWKOPH3Bv3Ye3/OXp+Opy49drS+5K3m9bXN/Kt3OV7dvy/q3OqVnIz7/AcPyFDroAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let polygons = dynamic({"type":"MultiPolygon","coordinates":[[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]],[[[-73.94262313842773,40.775991804565585],[-73.98107528686523,40.791849155467695],[-73.99600982666016,40.77092185281977],[-73.96150588989258,40.75609977566361],[-73.94262313842773,40.775991804565585]]]]});\r print polygons_union_centroid = geo_polygon_centroid(polygons)\r \`\`\`\r \r **Output**\r \r |polygons_union_centroid|\r |---|\r |"type": "Point", "coordinates": [-73.968569587829577, 40.776310752555119]}|\r \r The following example visualizes NYC Central Park centroid on a map\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02PzYrDIBSF93kKcZVAphj1+tMy7zD7EIIYaaWpihWG0M67T9MQ6OrCuR+H882uIOtCyWYek8lX9I2mJZibt/UDlyU5fMQ/cV7OMeAW2xjz5IMp7o6Pfd9/SXbQXEPLyUFqoYd2i0ARSYWgDBjQ9akIEUoQBqLTtNsxRUmnOeWcKa7eHUJREJIyAlLKHZOsk0qJVxUwvWEcoGMCyHp27HPHMPw1pyplHwqq3n7RTy+3s4tj2nTGPa4//ZvqibILk8vobk0pLtuLyQX9+nJB9dWHteVmUvMPRtRI5jkBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r print \r centroid = geo_polygon_centroid(central_park)\r | render scatterchart with (kind = map)\r \`\`\`\r \r \r The following example returns True because of the invalid polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02KQQqAIBAAvyJ7UvCg117RXSRCJRZsV9QOEv29okungZkpFakLbHTkLLfES+E8NqYlJOqVMco4aN0xyBP6KAkmAfO3gIbAXCPS2lN7gnPOaOO1s0bbP1/r/aWUugEuNYE7bwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print isnull(geo_polygon_centroid(dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,10],[0,0]]]})))\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-centroid-function","geo-polygon-centroid-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_densify","Converts polygon or multipolygon planar edges to geodesics by adding intermediate points.",`## Syntax\r \r \`geo_polygon_densify(\`*polygon*\`,\` *tolerance*\`,\` [ *preserve_crossing* ]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *tolerance* | int, long, or real | | Defines maximum distance in meters between the original planar edge and the converted geodesic edge chain. Supported values are in the range [0.1, 10000]. If unspecified, the default value is \`10\`.|\r | *preserve_crossing* | bool | | If \`true\`, preserves edge crossing over antimeridian. If unspecified, the default value \`false\` is used.|\r \r ### Polygon definition\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * \`LinearRingShell\` is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * \`LinearRingHole\` is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * \`LinearRing\` vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * \`LinearRingShell\` encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * \`LinearRing\` edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r \r ### Constraints\r \r * The maximum number of points in the densified polygon is limited to 10485760.\r * Storing polygons in [dynamic](./scalar-data-types/dynamic.md) format has size limits.\r * Densifying a valid polygon may invalidate the polygon. The algorithm adds points in a non-uniform manner, and as such may cause edges to intertwine with each other.\r \r ### Motivation\r \r * [GeoJSON format](https://tools.ietf.org/html/rfc7946) defines an edge between two points as a straight cartesian line while \`geo_polygon_densify()\` uses [geodesic](https://en.wikipedia.org/wiki/Geodesic).\r * The decision to use geodesic or planar edges might depend on the dataset and is especially relevant in long edges.\r \r ## Returns\r \r Densified polygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If either the polygon or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r > The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.`,`The following example densifies Manhattan Central Park polygon. The edges are short and the distance between planar edges and their geodesic counterparts is less than the distance specified by tolerance. As such, the result remains unchanged.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA13MSwrDIABF0a2IIwNpMGr8BLqHziWEEG0QWpXoREr33o+kg07Pe9y4O5+BsT65q7NmjuFWtuDBGeSQ8nvc0GbDwXM9FmSKX+5uRQ+YS7RwhJd6gC1cQ9iN80u2CY5a65OgnRokYaxluJMYi15NbWWmesY/LBRXw6GCYkW/yhkh/GBJMCeVZT/8Gv/paXo2TfMCwhc/8NgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))\r \`\`\`\r \r **Output**\r \r |densified_polygon|\r |---|\r |{"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]}|\r \r The following example densifies two edges of the polygon. Densified edges length is ~110 km\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XKQQrDIBCF4avIrBRcONtA7tC9SAjRykA6I3E2Unr3tISS1Qfv/e0gVpMLd3pSyUuTfVRhMxuVrt+z2lrkPy9XOGwevL5os2/Q0QpM8LgC8LCJHJl41dJhijFi8BiSj4i3+DPchpTSxzl3AtyuS1uOAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))\r \`\`\`\r \r **Output**\r \r |densified_polygon|\r |---|\r |{"type":"Polygon","coordinates":[[[10,10],[10.25,10],[10.5,10],[10.75,10],[11,10],[11,11],[10.75,11],[10.5,11],[10.25,11],[10,11],[10,10]]]}|\r \r The following example returns a null result because of the invalid coordinate input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJzSvOTMtMTYkvyM+pTM/PU7BVSE/Nh/HiIfKVGimVeYm5mcka1UollQWpSlZKARAFSjpKyfn5RSmZeYklqcVKVtHR0YYGOpYGBrE60YaGOoYw2hBEGyBog9jY2FpNTQDqeX/DhQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))\r \`\`\`\r \r **Output**\r \r |densified_polygon|\r |---|\r ||\r \r The following example returns a null result because of the invalid tolerance input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJzSvOTMtMTYkvyM+pTM/PU7BVSE/Nh/HiIfKVGimVeYm5mcka1UollQWpSlZKARAFSjpKyfn5RSmZeYklqcVKVtHR0YYGOoYGsTrRhoYI2hBEGyBog9jY2FpNHQUDTQCMm+c8hwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)\r \`\`\`\r \r **Output**\r \r |densified_polygon|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-densify-function","geo-polygon-densify-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_perimeter","Calculates the length of the boundary of a polygon or a multipolygon on Earth.",`## Syntax\r \r \`geo_polygon_perimeter(\`*polygon*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r The length of the boundary of polygon or a multipolygon, in meters, on Earth. If polygon or multipolygon are invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r > * If input is a multipolygon and contains more than one polygon, the result will be the length of the boundary of polygons union.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.`,`The following example calculates the NYC Central Park perimeter, in meters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02QzWrDMBCE730Ko1MCbpC02h+l9B16N8YYRwRTRxKqLqb03ZvUuOQ0MPMx7OwSajOFWMu4DHksn817c1njeJunw7eqaw7qrD7Ssl5TVK2aUiqXOY41fKlz13WvDCfvPLZOn9iT79vNQtFsiSwgoH2EojUJaUAy3podE6uNd9Y5ECd/HSQWiS1oZOYdYzAsQvcqBL9hDtEAoX7Ijj3f0fc/x7eXXOZYmxzKfAs1lPu2a0hD3uYM//7h+QHHX4p2a4cSAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let central_park = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});\r print perimeter = geo_polygon_perimeter(central_park)\r \`\`\`\r \r **Output**\r \r |perimeter|\r |---|\r |9930.30149604938|\r \r The following example performs union of polygons in multipolygon and calculates perimeter of the unified polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WRTWrDMBBG9z2F8SoBN4xGmr+UHqHQfQkhJCIYHDs4ziKU3r2TuHa7qzaC0dPojb4mD8W5a27Hrr0Ur8Xh1u5O9X7xWQ63cy7X5du1Ger3ESirct91/aFud0O+lOsPX88SV5aMqgQrMbZNNZZIQZAZI0XC+6ECsDJE4mAYJkwRgiVMKWrSRw9WJBaMQCIyYRKDqLK3omgjlohCZIL7NmF/PTZenPTQPYK/gCLxAQiZBYVETKQ0ywQQQnVNwpFzKFkgSixsM2cM4ObMDIHHfuAzqd8N9ivNwe1UTQ1pnI0YzAFijjx/wb92vr6WL0/nvm49q9zXpzzk3sM65m77k912ri+mNJff9ugUsNsBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygons = dynamic({"type":"MultiPolygon","coordinates":[[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]],[[[-73.94262313842773,40.775991804565585],[-73.98107528686523,40.791849155467695],[-73.99600982666016,40.77092185281977],[-73.96150588989258,40.75609977566361],[-73.94262313842773,40.775991804565585]]]]});\r print perimeter = geo_polygon_perimeter(polygons)\r \`\`\`\r \r **Output**\r \r |perimeter|\r |---|\r |15943.5384578745|\r \r The following example returns True because of the invalid polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02KQQrDIBBFryKzUnBhtoXeoXsRkTiEATMjxgYk5O61dNPV5733ayPuio5IfKZCWT0n8LsUvaHEKmVswrFiox07Np0Hp51WfUEfFeGh4PX7gIVVpGXi1PGYwXvvrAvWL84u//u1IdzGmA8jsUSgfQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print is_invalid = isnull(geo_polygon_perimeter(dynamic({"type": "Polygon","coordinates": [[[0,0],[10,10],[10,10],[0,0]]]})))\r \`\`\`\r \r **Output**\r \r |is_invalid|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-perimeter-function","geo-polygon-perimeter-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_simplify","Simplifies a polygon or a multipolygon by replacing nearly straight chains of short edges with a single long edge on Earth.",`## Syntax\r \r \`geo_polygon_simplify(\`*polygon*\`,\` *tolerance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *tolerance* | int, long, or real | | Defines maximum distance in meters between the original planar edge and the converted geodesic edge chain. Supported values are in the range [0.1, 10000]. If unspecified, the default value is \`10\`.|\r \r ## Returns\r \r Simplified polygon or a multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type, with no two vertices with distance less than tolerance. If either the polygon or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * If input has more than one polygon, with mutual borders, please see [geo_simplify_polygons_array()](geo-simplify-polygons-array-function.md).\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r > * If input is a multipolygon and contains more than one polygon, the result will be the area of polygons union.\r > * High tolerance may cause small polygon to disappear.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.`,`The following example simplifies polygons by removing vertices that are within a 10-meter distance from each other.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA33Ry2rCUBAG4H2fImSlkMqcuZyZsfQdupcgYlIJaBI0m1D67j3FaLJyO/PBP5dzPWR9dx5PXZt9ZtXYHi7NcfWTD2Nf59v8697Ki/zYddeqaQ9Dfcu3u93uXWnjbCYBUTUChYJhox6VWCOJRNGymJmjMplSnJgjikW0pBdMnRxc2PXJQERUgXjBUggGCMwP9Z/pFMFpoSwlqhgCvmbEgTGaPJR4SPODB5CZOYBxGljBn46AyRXNn8whUjoIKrLdmQZIS6MGNZsZUgzIKuSPVFMwsKC+3PPlccvyd/3x1l+bdshuzaU/N99NXaUvnupuP/10PzXG1VRY/wEdFq3Y8QEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.94885122776031,40.79673476355657],[-73.94885927438736,40.79692258628347],[-73.94887939095497,40.79692055577034],[-73.9488673210144,40.79693476936093],[-73.94888743758202,40.79693476936093],[-73.9488834142685,40.796959135509105],[-73.94890084862709,40.79695304397289],[-73.94906312227248,40.79710736271788],[-73.94923612475395,40.7968708081794],[-73.94885122776031,40.79673476355657]]]});\r print simplified = geo_polygon_simplify(polygon)\r \`\`\`\r \r **Output**\r \r |simplified|\r |---|\r |{"type": "Polygon", "coordinates": [[[-73.948851227760315, 40.796734763556572],[-73.949063122272477, 40.797107362717881],[-73.949236124753952, 40.7968708081794],[-73.948851227760315, 40.796734763556572]]]}|\r \r The following example simplifies polygons and combines results into GeoJSON geometry collection.\r \r \`\`\`\r Polygons\r | project polygon = features.geometry\r | project simplified = geo_polygon_simplify(polygon, 1000)\r | summarize lst = make_list(simplified)\r | project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", lst), "properties", bag_pack("name", "polygons"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "polygons"}}|\r \r The following example simplifies polygons and unifies result\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WOQQoCMQxF954iyxZExgN4isF1KZoZou20JOmig4c3i4qC2///e8l1DrNGRTm8oHJ54E2hltTXssEFFozaGOW0Ysmo3H9WQrkmWgjvNrQ+DCyMorsRHOE8TZM3VFrOkWlHSKJG5fjEkEjUfWX+/xEZB9pGpv+EITLH7szk3/JsgkXFAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r US_States\r | project polygon = features.geometry\r | project simplified = geo_polygon_simplify(polygon, 1000)\r | summarize lst = make_list(simplified)\r | project polygons = geo_union_polygons_array(lst)\r \`\`\`\r \r **Output**\r \r |polygons|\r |---|\r |{"type": "MultiPolygon", "coordinates": [ ... ]}|\r \r The following example returns True because of the invalid polygon.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WMQQrDIBAA732F7EnBYwslIX/IXUQkmrCw2ZVoC1L69x7S0tPADAzlpopQ34TVpFLnuOOiX9B6yTDAfCawsIgcCTm2XGFwzt3s9e7tCe/fZryUA7kprAH5GQlT+H+x8oNIb1l+MlTcC+Ha9VcY8wFgUlqniwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[5,48]]]});\r print is_invalid_polygon = isnull(geo_polygon_simplify(polygon))\r \`\`\`\r \r **Output**\r \r |is_invalid_polygon|\r |---|\r |1|\r \r The following example returns True because of the invalid tolerance.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WNwQoCIRQA732FeFKwMHApdukfuouIrLY8cJ+yWiDRvxe7RaeBmcPEUElOsU0JyYX4hm6GkT1pbTnQnl63RAUdU1o8oKuh0F5r3Ql1NkJL0ckV6vSB2rA2Y1582OUFsBIoFvDhInj7n0HBe4xsCuknbYE5R7g19hWC7OXhyPkbMhZUVaYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[0,50],[0,47],[4,47],[5,48]]]});\r print is_invalid_polygon = isnull(geo_polygon_simplify(polygon, -0.1))\r \`\`\`\r \r **Output**\r \r |is_invalid_polygon|\r |---|\r |1|\r \r The following example returns True because high tolerance causes polygon to disappear.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WNwQoCIRRF932FvJWCCwOHYqJ/mL2IyGjDA0dltECify+cors5cM7iBl9JTqEtKZIrcS3aFWf6hNqyhxGmPQGHOaXNYbTVFxiVUgOXZ82V4IPokKcP5I7etH6xyyFvGCvBYjA+bEBn/mdY4j0Euvj0k6bgmgPeGv0KTo6ij7E3IUIHfKkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[0,50],[0,47],[4,47],[5,48]]]});\r print is_invalid_polygon = isnull(geo_polygon_simplify(polygon, 1000000))\r \`\`\`\r \r **Output**\r \r |is_invalid_polygon|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-simplify-function","geo-polygon-simplify-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_polygon_to_s2cells","Calculates S2 cell tokens that cover a polygon or multipolygon on Earth. This function is a useful geospatial join tool.",`Read more about [S2 cell hierarchy](https://s2geometry.io/devguide/s2cell_hierarchy).\r \r ## Syntax\r \r \`geo_polygon_to_s2cells(\`*polygon*\`,\` *level*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *level* | int | | Defines the requested cell level. Supported values are in the range [0, 30]. If unspecified, the default value \`11\` is used.|\r \r ## Returns\r \r Array of S2 cell token strings that cover a polygon or a multipolygon. If either the polygon or level is invalid, or the cell count exceeds the limit, the query will produce a null result.\r \r > [!NOTE]\r >\r > * Covering the polygon with S2 cell tokens can be useful in matching coordinates to polygons that might include these coordinates and matching polygons to polygons.\r > * The polygon covering tokens are of the same S2 cell level.\r > * The maximum count of tokens per polygon is 65536.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [Geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) in order to convert planar edges to geodesics.\r \r **Motivation for covering polygons with S2 cell tokens**\r \r Without this function, here's one approach we could take in order to classify coordinates into polygons containing these coordinates.\r \r \`\`\`\r let Polygons = \r datatable(description:string, polygon:dynamic)\r [ \r "New York", dynamic({"type":"Polygon","coordinates":[[[-73.85009765625,40.85744791303121],[-74.16046142578125,40.84290487729676],[-74.190673828125,40.59935608796518],[-73.83087158203125,40.61812224225511],[-73.85009765625,40.85744791303121]]]}),\r "Seattle", dynamic({"type":"Polygon","coordinates":[[[-122.200927734375,47.68573021131587],[-122.4591064453125,47.68573021131587],[-122.4755859375,47.468949677672484],[-122.17620849609374,47.47266286861342],[-122.200927734375,47.68573021131587]]]}),\r "Las Vegas", dynamic({"type":"Polygon","coordinates":[[[-114.9,36.36],[-115.4498291015625,36.33282808737917],[-115.4498291015625,35.84453450421662],[-114.949951171875,35.902399875143615],[-114.9,36.36]]]}),\r ];\r let Coordinates = \r datatable(longitude:real, latitude:real)\r [\r real(-73.95), real(40.75), // New York\r real(-122.3), real(47.6), // Seattle\r real(-115.18), real(36.16) // Las Vegas\r ];\r Polygons | extend dummy=1\r | join kind=inner (Coordinates | extend dummy=1) on dummy\r | where geo_point_in_polygon(longitude, latitude, polygon)\r | project longitude, latitude, description\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|\r |---|---|---|\r |-73.95|40.75|New York city|\r |-122.3|47.6|Seattle|\r |-115.18|36.16|Las Vegas|\r \r While this method works in some cases, it's inefficient. This method does a cross-join, meaning that it tries to match every polygon to every point. This process consumes a large amount of memory and compute resources.\r Instead, we would like to match every polygon to a point with a high probability of containment success, and filter out other points.\r \r This match can be achieved by the following process:\r \r 1. Converting polygons to S2 cells of level k,\r 1. Converting points to the same S2 cells level k,\r 1. Joining on S2 cells,\r 1. Filtering by [geo_point_in_polygon()](geo-point-in-polygon-function.md). This phase can be omitted if some amount of false positives is ok. The maximum error will be the area of s2 cells at level k beyond the boundary of the polygon.\r \r **Choosing the S2 cell level**\r \r * Ideally we would want to cover every polygon with one or just a few unique cells such that no two polygons share the same cell.\r * If the polygons are close to each other, choose the [S2 cell level](geo-point-to-s2cell-function.md) such that its cell edge will be smaller (4, 8, 12 times smaller) than the edge of the average polygon.\r * If the polygons are far from each other, choose the [S2 cell level](geo-point-to-s2cell-function.md) such that its cell edge will be similar or bigger than the edge of the average polygon.\r * In practice, covering a polygon with more than 10,000 cells might not yield good performance.\r * Sample use cases:\r * S2 cell level 5 might prove to be good for covering countries/regions.\r * S2 cell level 16 can cover dense and relatively small Manhattan (New York) neighborhoods.\r * S2 cell level 11 can be used for covering suburbs of Australia.\r * Query run time and memory consumption might differ greatly because of different S2 cell level values.\r \r > [!WARNING]\r > Covering a large-area polygon with small-area cells can lead to a huge amount of covering cells. As a result, the query might return null.\r \r > [!NOTE]\r > Performance improvement suggestions:\r > * If possible, reduce coordinates table size before join, by grouping coordinates that are very close to each other by using [geospatial clustering](geospatial-grid-systems.md) or by filtering out unnesessary coordinates due to nature of the data or business needs.\r > * If possible, reduce polygons count due to nature of the data or business needs. Filter out unnecessary polygons before join, scope to the area of interest or unify polygons.\r > * In case of very big polygons, reduce their size using [geo_polygon_simplify()](geo-polygon-simplify-function.md).\r > * Changing S2 cell level may improve performance and memory consumption.\r > * Changing [join kind and hint](joinoperator.md) may improve performance and memory consumption.`,`The following example classifies coordinates into polygons.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA6WaXY8dR9WF7/0rWr7BloZQ3x9GuUKvXiFxgYSAiyiKJjNt+8D4nNHMcYIF/Hee1V3VVSZGEWIiOZ5zVlft2h9rr13th/W6/P7y8Ond5fy8fL28WPi5v73y3/cP66v79fnu6fR4PV3Ob56vT6fzu5vlcUe/uf90vv1wunu9PfLN9qd+fvH/T+t6/vF093750+nh4fbd+oubpWFf/f3l9dPj+vLNy7bly5uXd5fL0/3pfHtdn1+++eabb36Z/Ve12pDM/mO9vQnmq+xt9mX/yJn07U0DuhJDqDbnGG3ZgcYUF1My0fpoD2DK2W3fuxi8a2vHcHyfkw+pxOhcKb4Bc0ne1FJSTX4Dhq/YHVANKfnqQtiBxet3Y2LK1R5AG6xvppsUu+l5sqimWqPJ2Lsv5LNPPheH6dkfOJtdiC4Yn6tvuKhPTKneYtwBZCU97WONpe7AkIstNZliQh47/6x3v/32n69vRkj/+Pi4Pi1/Xp+vyx9O9wro8l+HNBYfCRJni6lskWI/n6qpMXlfbO3WFRt8JTQxBbdHLJWcXCwBh9boBy6GkqPLpcRaGpDQGFf5LEywFD0+Mbaa2GBeTg+ZaNQ0gJlUssUkU8MBJDFcxjcplQPojC+RIIRiW+AAFnneWM43VnQuEVrwwYfagK6W5AibdyEPoMeamklhQt+Ahp2tNySftRPQmWprDinWtmIuNYRkc2XVCYgDo3clxJxSA+aYMCXkkONnWxfO58mvvmCw1pjAR27KQk8K+8ifOHg3EfNCjNlSOD6NQguW7POUU21RIX0rxVGtVzKOBQt1IV8a0A1IQmccGU01M7BaR8b7bKLrQMq9Ev6UnRvAqjThm0AFdCC+ieRTIf7DROKUCIyJpptYCr6iiKmWMB3FEc+Clb4eJlKJ8kGa17M+pcjeZGLoOGNLNjaTzNOCZAhu9YQ0HsAsThGf2OHt4Mhb6MuHELqJ8oSqs/oJh6MpKjLH5IbzBBIfWPinTutxaFIP41sRUPKkA9ZVcmI4OxpSLMciymjO9uS5rYlE8iO3ARLlirtc45pMFZPFZAkHCRPOEhdPmrBqB+JTysep+icgexMDDEotwTzOwQ1sAn0M3uQQiVKp5EVqQIoA6iVKqYwVkxXrkO6GNRuwRPgx2RIohAEUyRvIl8LqNtatGHG6KXFaMcMNcAJHPYBUKC0lWkphXnHjaJdCaFsHStmWRMTy7MZIBnOaZG0+bMzYwmEIWp5zNgdHpsU63ENJRbxl4lSnFe/iBmtxc4905jSkJ8Rjp7LCP2xB6h9nISK4O+ENnyegc1rVUfD2CLVVkqhZTvVHOcKyxCv0ciF3cBBlxP/jxCWVQBMZtu82kozwOx6PU70oUzCKxpxj35r0KKJPzjTJAEyhhArFkNuK2EClJlqinbKMpk5zcJBi526AoGAxNp7oCcbJKt4oIt2B9HA8AJlTR9OKQWkTVa891CQyLKgqpONNQPoG1lA0JXcgnC3mNSmNU3OULMKCbltgKGcOQvKWPHnHQZZGVAQrNxxecSLMbKdkdCIsYuIVtwbEO3RNyzHt5EWSxGeCDbYDxcXYGbX7ZCFBoKGIu2xfkTTBO6TjvCIlLHFkSmliCCA1SjuAqSfudrQQ6qIY2yWJtlblEyoCOwHhJvImGeLTgZQeCodITMSDPqIMQrbkbWMoTgxFQOfUzdjaoBeoLauEaXyCJaQcz3s3bU2cEnFAtWTbcfSqJNkHiR4tFXVIf8FpKXRgUQJDCAWFMXov0m5LR3g9Nu9Qjlliz+qLA4jKo1rJZ2M6S6AdqV1XlRl5AuIJ6gq31b5i5rTUcJQwHls75JDK18Drx4rQKApNrWICYgj5Q63GvqCj48tpxk8LBhIlSj+h3zoQrtuc0PXzDoQxcbbLpulnrRj5RXk7KZMK05GIUK3z4TCReiE2fDoB8T8cw3lI1g5UDKGD8pmNKhDaoJR0PIDEJZC5cRJu0BOURXUhenIH0iGiKnMuVXSSIeetemjfGvZm9yQNNliCLsg3Cm3xh41KbuBhkqskGZwHJXh3+DttbUdVWQbPQ0OUddmePwKIv+j/1IOZgFCj3cRRHivmRFyYA5AE0/gQSFn1YbTo8A4iUu1yGqUoLPyFRGHdwzsaKTLdjaKZKot6ob8hM3rvJxPwJG2L1J9GHLIQOQ6txuEddWp4nUIY3iFMWVqGU/txajlWB0qDoQgqdme1+TQfRszKMacVXZTCQMXkcLiHqBcxY6h2AiI4KS8HRR0regSZmKZMsgOPWXk4KIUPICGEtz4jHvVyFHRMtOFeMhAKzc2rYif30EkItnM4qZ8aP+B/1EQw82BnSbuogegoVuQhUo6QDdmojk8JovNxY+cT+I68Z2aodcxi0njiN5Ko9xg0C/kIkUGH04pSbepYuHcvVsa7KIoi86HRCQhjYRDRaqIMYN3atPpEmoFaU0N5yg1I24GdxD4hDiBiRNpRjbBvDR8YBZ8RfrKRbkQEpDFbA4Y1vLcqf8Iwrejo8kQVKZR8Bzp1OESrmYE29EE6dKB4cB+k3WgJdCcrsiUF2ziGXiiScrgs54nAGb3UwdXLGi4peoysxHHyjopNFUy5xg6E/jwihSem1mGkYzXGupa2RRMbGqTokCMwyk+1n6CxrgGhb74wXrPIAaSBR00EWe7dgcyFTNQUMUJ4zKCkiUheCdSEI62blkzfRztO42+iCopkPTzVvBMVfVoU/nRjRaiVXsByUmwNqPsN9QhmugmIfWaT0LkvSEy93Qh7zBJFhMk5GXrGgtLKuLzopmg6Cwm7RdA1cuQjzfE0D4nRCei25sFRmxLlZAg8rPHWTqM836N1orOH7NhcQKmRyOkzIAqGytcY7DsQvkqwBuw6bW10i0Vpcuy+IofF2zBknQNIhtGz4PpegjRuOQuij2PmQNtojNBc4FpjxTsY7DVeMvIOoFUZehwWhxuTJlNON6c3tK9SpdPTl7qJeMbr1mBSRjyoW5LETBYPHCUgvcy5Z6AUKjRXm95h45xUpLSKUiacbjM0ooQjw3TD53Q55D7DMWCiOhi3joNoGCuk6EQ6Ud2FkRMTw+EaBQZhSyOcgVAEO/Cw98dJRPNqRnXUX9Ql0mYn3egIM2FinqZlTs5GrTKYGpVfzzA+qbqULJ/FOSfdgzpNxbkDOR2dI2oWnbeGYqwGj9oL1ZvtONbDWRPQ8zgsY/pYC0SXdVITFMYEVKmSeGGsyMngfs2TnwUaZUEZ4aPSvUOTS5pFcpndqJSj7HG3O9zIiEVP9p95h8TR3dN2kdCBRGXXWlNFRwYNjuMp9nQAN2+JhvIUGAiVYtOdg4tHzlJ8eCxOwhZalG6AqQ9eJLlCliamKO0UF9o2kTKaJTsw69qaOsyTXo1FPZ9aJ38ajspW7Nl5ar5R90WMdFKIB5AMhTPQvz7MQHXvqIkldKDI0qtapwXVGHXNLMnUcDCgzhOlV2cnamBQi8h9QV0/EFGNv5Nv7GYjs44buG3shoEnLW+3exMVuc37zhq7UE3By9+HiRKL3uwX5rs84KTsoC6pq6YjITSlJOWzVJnbgTSXzTebJu7ApMuL/ftAwFtbH5mlaaRtZNV/9u/HnZ1GQYJAMdQ29pHUFBZloTvVsVGUyNJ1EAKjX4TTyamsoHLJA/dzN+ZfvKb/v9v/5ZoepV4JAL0OMm9MqeZTdVVLlh65FDyZg0LXXX27ii5OnT5tdD7uHsN2n4UiJc96oVHbKOckJjPTijQf0kOTZOrKkD2yLvCJ/8DBSkWCVINFE6Ve91EkqYwZQJ6HPpH7qUzzBzUQNEUcEaE1aK5X9+rvCODRoDSAi+xgcwGdbhTVnGyf2C18ClLpMIBUCmFCRKZ+x0zgFDrYJvppayQ2uSAKdG2YkjY38gRcmwYQRwaNNPTPNn/oDpcQQJfUyAA6CcMqldVvoykC9mD0njUNUlbcpAn5uJCCrbP0MU+EyUYjSaJBLvdTU+Fxe2mEkC8DSP8ToWswTv3qijzPjG1Uz7Q1HgtyWuxX+kGDHPkt0yc3qtXovcFxAR+YrBwDhATbwME5Zrsl1ouPHUjw8ACZwUBz1BQtkpLeOhb0swNxtfdVImmwBvINBsJkVFdr26QQh9huzOMgLJq9xBVURJ/sL1B0EaGxhMMcvtneLTG+5E347UDpLSJTt6uhA7hNn2xk+3WrBgB0jqrPhIlv4E3dsEpg7M6JutmCfPTSctx5UmpWt9M0btNmYUko3MBAgTsPL0bOp4uHCg13CULW0tZCkJwbXgymK1FdxO0/fsr+nyWRwVzf/vrFw3pdfjPI6KevoR8u53en68f79c3TevtwszzcXsev//4CWp+92g8e7OubZeshNtwsv/rV8m8vMr/wDAFtz1CV2zM/eZ/9hafoa+0pEc3Y6eDi+ai/W39YHzikTb9+0V+9v/jHsv7tup7vl7vLD6tetAN4t16+a2/bv7tevnt2d+vDw/Or9tHNvtBr7bY9tPDr06f+fn758XR9vzy7RQ8t18tf1/Ny+/R0+4mtPvzwy/Vvj7fzbtfLogZxeftqf8//evnSD1v1B2XKvuDy/BHnXN/fXpsFT5cf2Z1d39/+sC6X87rb8OEWn9xrp9P1uZuJNX+5nM7LX0/n+69P5zPHeH86X7/CCnLh3aevv3+63N7fyY9fsub2+fnjh3Xf/PhnDHeXj+frcnpenj/csu+r356X5wuo58f17vT2dLew3Pr6xastKFPibb//50Bg1gjDyMmRjj+NyPbQHgk99OI13hgLA9vOzmfX97uTbvgbhr89PVzXp+fl8vEqb/KXt20t+f6xH/TH9+vTuj27f3m/vj2dT9f14dNyf6GQzpfr8v0qS7f4brju9f3ZcbLTuefal4/WvnzNo49Pl7+sd9fli7jpn4z8C1wWFbVcIgAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Polygons = \r datatable(description:string, polygon:dynamic)\r [\r 'Greenwich Village', dynamic({"type":"Polygon","coordinates":[[[-73.991460000000131,40.731738000000206],[-73.992854491775518,40.730082566051351],[-73.996772,40.725432000000154],[-73.997634685522883,40.725786309886963],[-74.002855946639244,40.728346630056791],[-74.001413,40.731065000000207],[-73.996796995070824,40.73736378205173],[-73.991724524037934,40.735245208931886],[-73.990703782359589,40.734781896080477],[-73.991460000000131,40.731738000000206]]]}),\r 'Upper West Side', dynamic({"type":"Polygon","coordinates":[[[-73.958357552055688,40.800369095633819],[-73.98143901556422,40.768762584141953],[-73.981548752788598,40.7685590292784],[-73.981565335901905,40.768307084720796],[-73.981754418060945,40.768399727738668],[-73.982038573548124,40.768387823012056],[-73.982268248204349,40.768298621883247],[-73.982384797518051,40.768097213086911],[-73.982320919746599,40.767894461792181],[-73.982155532845766,40.767756204474757],[-73.98238873834039,40.767411004834273],[-73.993650353659021,40.772145571634361],[-73.99415893763998,40.772493009137818],[-73.993831082030937,40.772931787850908],[-73.993891252437052,40.772955194876722],[-73.993962585514595,40.772944653908901],[-73.99401262480508,40.772882846631894],[-73.994122058082397,40.77292405902601],[-73.994136652588594,40.772901870174394],[-73.994301342391154,40.772970028663913],[-73.994281535134448,40.77299380206933],[-73.994376552751078,40.77303955110149],[-73.994294029824005,40.773156243992048],[-73.995023275860802,40.773481196576356],[-73.99508939189289,40.773388475039134],[-73.995013963716758,40.773358035426909],[-73.995050284699261,40.773297153189958],[-73.996240651898916,40.773789791397689],[-73.996195837470992,40.773852356184044],[-73.996098807369748,40.773951805299085],[-73.996179459973888,40.773986954351571],[-73.996095245226442,40.774086186437756],[-73.995572265161172,40.773870731394297],[-73.994017424135961,40.77321375261053],[-73.993935876811335,40.773179512586211],[-73.993861942928888,40.773269531698837],[-73.993822393527211,40.773381758622882],[-73.993767019318497,40.773483981224835],[-73.993698463744295,40.773562141052594],[-73.993358326468751,40.773926888327956],[-73.992622663865575,40.774974056037109],[-73.992577842766124,40.774956016359418],[-73.992527743951555,40.775002110439829],[-73.992469745815342,40.775024159551755],[-73.992403837191887,40.775018140390664],[-73.99226708903538,40.775116033858794],[-73.99217809026365,40.775279293897171],[-73.992059084937338,40.775497598192516],[-73.992125372394938,40.775509075053385],[-73.992226867797001,40.775482211026116],[-73.992329346608813,40.775468900958522],[-73.992361756801131,40.775501899766638],[-73.992386042960277,40.775557180424634],[-73.992087684712729,40.775983970821372],[-73.990927174149746,40.777566878763238],[-73.99039616003671,40.777585065679204],[-73.989461267506471,40.778875124584417],[-73.989175778438053,40.779287524015778],[-73.988868617400072,40.779692922911607],[-73.988871874499793,40.779713738253008],[-73.989219022880576,40.779697895209402],[-73.98927785904425,40.779723439271038],[-73.989409054180143,40.779737706471963],[-73.989498614927044,40.779725044389757],[-73.989596493388234,40.779698146683387],[-73.989679812902509,40.779677568658038],[-73.989752702937935,40.779671244211556],[-73.989842247806507,40.779680752670664],[-73.990040102120489,40.779707677698219],[-73.990137977524839,40.779699769704784],[-73.99033584033225,40.779661794394983],[-73.990430598697046,40.779664973055503],[-73.990622199396725,40.779676064914298],[-73.990745069505479,40.779671328184051],[-73.990872114282197,40.779646007643876],[-73.990961672224358,40.779639683751753],[-73.991057472829539,40.779652352625774],[-73.991157429497036,40.779669775606465],[-73.991242817404469,40.779671367084504],[-73.991255318289745,40.779650782516491],[-73.991294887120119,40.779630209208889],[-73.991321967649895,40.779631796041372],[-73.991359455569423,40.779585883337383],[-73.991551059227476,40.779574821437407],[-73.99141982585985,40.779755280287233],[-73.988886144117032,40.779878898532999],[-73.988939656706265,40.779956178440393],[-73.988926103530844,40.780059292013632],[-73.988911680264692,40.780096037146606],[-73.988919261468567,40.780226094343945],[-73.988381050202634,40.780981074045783],[-73.988232413846987,40.781233144215555],[-73.988210420831663,40.781225482542055],[-73.988140000000143,40.781409000000224],[-73.988041288067166,40.781585961353777],[-73.98810029382463,40.781602878305286],[-73.988076449145055,40.781650935001608],[-73.988018059972219,40.781634188810422],[-73.987960792842145,40.781770987031535],[-73.985465811970457,40.785360700575431],[-73.986172704965611,40.786068452258647],[-73.986455862401996,40.785919219081421],[-73.987072345615601,40.785189638820121],[-73.98711901394276,40.785210319004058],[-73.986497781023601,40.785951202887254],[-73.986164628806279,40.786121882448327],[-73.986128422486075,40.786239001331111],[-73.986071135219746,40.786240706026611],[-73.986027274789123,40.786228964236727],[-73.986097637849426,40.78605822569795],[-73.985429321269592,40.785413942184597],[-73.985081137732209,40.785921935110366],[-73.985198833254501,40.785966552197777],[-73.985170502389906,40.78601333415817],[-73.985216218673656,40.786030501816427],[-73.98525509797993,40.785976205511588],[-73.98524273937646,40.785972572653328],[-73.98524962933017,40.785963139855845],[-73.985281779186749,40.785978620950075],[-73.985240032884533,40.786035858136792],[-73.985683885242182,40.786222123919686],[-73.985717529004575,40.786175994668795],[-73.985765660297687,40.786196274858618],[-73.985682871922691,40.786309786213067],[-73.985636270930442,40.786290150649279],[-73.985670722564691,40.786242911993817],[-73.98520511880038,40.786047669212785],[-73.985211035607492,40.786039554883686],[-73.985162639946992,40.786020999769754],[-73.985131636312062,40.786060297019972],[-73.985016964065125,40.78601423719563],[-73.984655078830457,40.786534741807841],[-73.985743787901043,40.786570082854738],[-73.98589227228328,40.786426529019593],[-73.985942854994988,40.786452847880334],[-73.985949561556794,40.78648711396653],[-73.985812373526713,40.786616865357047],[-73.985135209703174,40.78658761889551],[-73.984619428584324,40.786586016349787],[-73.981952458164173,40.790393724337193],[-73.972823037363767,40.803428052816756],[-73.971036786332192,40.805918478839672],[-73.966701,40.804169000000186],[-73.959647,40.801156000000113],[-73.958508540159471,40.800682279767472],[-73.95853274080838,40.800491362464697],[-73.958357552055688,40.800369095633819]]]}),\r 'Upper East Side', dynamic({"type":"Polygon","coordinates":[[[-73.943592454622546,40.782747908206574],[-73.943648235390199,40.782656161333449],[-73.943870759887162,40.781273026571704],[-73.94345932494096,40.780048275653243],[-73.943213862652243,40.779317588660199],[-73.943004239504688,40.779639495474292],[-73.942716005450905,40.779544169476175],[-73.942712374762181,40.779214856940001],[-73.942535563208608,40.779090956062532],[-73.942893408188027,40.778614093246276],[-73.942438481745029,40.777315235766039],[-73.942244919522594,40.777104088947254],[-73.942074188038887,40.776917846977142],[-73.942002667222781,40.776185317382648],[-73.942620205199006,40.775180871576474],[-73.94285645694552,40.774796600349191],[-73.94293043781397,40.774676268036011],[-73.945870899588215,40.771692257932997],[-73.946618690150586,40.77093339256956],[-73.948664164778933,40.768857624399587],[-73.950069793030679,40.767025088383498],[-73.954418260786071,40.762184104951245],[-73.95650786241211,40.760285256574043],[-73.958787773424007,40.758213471309809],[-73.973015157270069,40.764278692864671],[-73.955760332998182,40.787906554459667],[-73.944023,40.782960000000301],[-73.943592454622546,40.782747908206574]]]}),\r ];\r let Coordinates = \r datatable(longitude:real, latitude:real)\r [\r real(-73.9741), 40.7914, // Upper West Side\r real(-73.9950), 40.7340, // Greenwich Village\r real(-73.9584), 40.7688, // Upper East Side\r ];\r let Level = 16;\r Polygons\r | extend covering = geo_polygon_to_s2cells(polygon, Level) // cover every polygon with s2 cell token array\r | mv-expand covering to typeof(string) // expand cells array such that every row will have one cell mapped to its polygon\r | join kind=inner hint.strategy=broadcast // assume that Polygons count is small (In some specific case)\r (\r Coordinates\r | extend covering = geo_point_to_s2cell(longitude, latitude, Level) // cover point with cell\r ) on covering // join on the cell, this filters out rows of point and polygons where the point definitely does not belong to the polygon\r | where geo_point_in_polygon(longitude, latitude, polygon) // final filtering for exact result\r | project longitude, latitude, description\r \`\`\`\r \r **Output**\r \r |longitude|latitude|description|\r |---|---|---|\r |-73.9741|40.7914|Upper West Side|\r |-73.995|40.734|Greenwich Village|\r |-73.9584|40.7688|Upper East Side|\r \r Here is even more improvement on the above query. Count storm events per US state. The below query performs a very efficient join because it doesn't carry polygons through the join and uses [lookup operator](lookupoperator.md)\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA31SPW/CMBDd8ys82lKo1A5dEEOp2CgL6hyZ5AgGf0T2JTQVP74XJyFAq97ke3539+5DA7I1NKDZgr3OE01u5XRbOhsIMRLBK6nVN/CEkX1usy0SGKJ3YZV3R8iRRXAjDVAQuoBe2ZLvQWLtITwRqwKPip6bt4+VSMcaxL6SSnAG0LcpUwXhFs5ZWauCC9HLQlMRHOuOCh9EqCJluWugK05USpgNzAxdFl5y0DrwAUr7tgUbkphmBl+VtMWUAh3DtgK3531DYqAenbLspGyxUNaCZwdl8YkoNIKyXey8k0UuA0b2aPzO62yLzptVAxbDr7+pJx1bWUKp7LoTrSVefYn/B0b2HyMhudNA+ETsB3KXUzBa0pjgftwzeZbt9W8q8zxPulVdmHbuVFfTOVEmVSQP8RE5H8DDjThlx8XdqBsQQfxQGyM9HeXtEN9dbXHZxkukVvPO5YLt2uk4fwDWrd0X7QIAAA==\r " target="_blank">Run the query</a>\r \r \`\`\`\r let Level = 6;\r let polygons = materialize(\r US_States\r | project StateName = tostring(features.properties.NAME), polygon = features.geometry, id = new_guid());\r let tmp = \r polygons\r | project id, covering = geo_polygon_to_s2cells(polygon, Level) \r | mv-expand covering to typeof(string)\r | join kind=inner hint.strategy=broadcast\r (\r StormEvents\r | project lng = BeginLon, lat = BeginLat\r | project lng, lat, covering = geo_point_to_s2cell(lng, lat, Level)\r ) on covering\r | project-away covering, covering1;\r tmp | lookup polygons on id\r | project-away id\r | where geo_point_in_polygon(lng, lat, polygon)\r | summarize StormEventsCountByState = count() by StateName\r \`\`\`\r \r **Output**\r \r |StateName|StormEventsCountByState|\r |---|---|\r |Florida|960|\r |Georgia|1085|\r |...|...|\r \r The following example filters out polygons that don't intersect with the area of the polygon of interest. The maximum error is diagonal of s2cell length. This example is based on a polygonized earth at night raster file.\r \r \`\`\`\r let intersection_level_hint = 7;\r let area_of_interest = dynamic({"type": "Polygon","coordinates": [[[-73.94966125488281,40.79698248639272],[-73.95841598510742,40.800426144169315],[-73.98124694824219,40.76806170936614],[-73.97283554077148,40.7645513650551],[-73.94966125488281,40.79698248639272]]]});\r let area_of_interest_covering = geo_polygon_to_s2cells(area_of_interest, intersection_level_hint);\r EarthAtNight\r | project value = features.properties.DN, polygon = features.geometry\r | extend covering = geo_polygon_to_s2cells(polygon, intersection_level_hint)\r | mv-apply c = covering to typeof(string) on\r (\r summarize is_intersects = take_anyif(1, array_index_of(area_of_interest_covering, c) != -1)\r )\r | where is_intersects == 1\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |83|\r \r Count of cells that will be needed in order to cover some polygon with S2 cells of level 5.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2OwQrDIBBE7/0K8ZSABxvIJSH/0LuIiFlSqd0VNQcp/fcqzWVmeLMLE6CwSKEehGxje0X79m748FIj8IU//hUX3BGl3aMtkPmilJJCatF07naXV+hU6++43mLyWFiejIMQTKEXoHF0NrYxm5KtJgAe5TkcQOZa0M5MnvpDHi4k2DyO6w+pbpZDpgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[0,0],[0,50],[100,50],[0,0]]]});\r print s2_cell_token_count = array_length(geo_polygon_to_s2cells(polygon, 5));\r \`\`\`\r \r **Output**\r \r |s2_cell_token_count|\r |---|\r |286|\r \r Covering a large-area polygon with small-area cells returns null.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoyM+pTM/PU7BVSKnMS8zNTNaoViqpLEhVslIKgEgp6Sgl5+cXpWTmJZakFitZRUdHG+gYxOoASVMQZWgAZYBEY2NrNa25Cooy80oU0lPz46HGx5fkxxcbJafm5BRrQIV0FIwNNK0BZqBOaoMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[0,0],[0,50],[100,50],[0,0]]]});\r print geo_polygon_to_s2cells(polygon, 30);\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r ||\r \r Covering a large-area polygon with small-area cells returns null.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoyM+pTM/PU7BVSKnMS8zNTNaoViqpLEhVslIKgEgp6Sgl5+cXpWTmJZakFitZRUdHG+gYxOoASVMQZWgAZYBEY2NrNa25Cooy80oUMovzSnNyNNJT8+OhtsSX5McXGyWn5uQUa0CFdBSMDTQ1rQE1TEGniwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let polygon = dynamic({"type":"Polygon","coordinates":[[[0,0],[0,50],[100,50],[0,0]]]});\r print isnull(geo_polygon_to_s2cells(polygon, 30));\r \`\`\`\r \r **Output**\r \r |print_0|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-polygon-to-s2cells-function","geo-polygon-to-s2cells-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_s2cell_neighbors","Calculates S2 cell neighbors.",`Read more about [S2 cell hierarchy](https://s2geometry.io/devguide/s2cell_hierarchy).\r \r ## Syntax\r \r \`geo_s2cell_neighbors(\`*s2cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *s2cell* | string | ✓ | S2 cell token value as it was calculated by [geo_point_to_s2cell()](geo-point-to-s2cell-function.md). The S2 cell token maximum string length is 16 characters.|\r \r ## Returns\r \r An array of S2 cell neighbors. If the S2 Cell is invalid, the query will produce a null result.\r \r > [!NOTE]\r > S2 Cell edges are spherical geodesics.`,`The following example calculates S2 cell neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUchLzUzPSMovKlawVUhPzY8vNkpOzcmJhwtrqFtYJhuZWqprAgC1Bx0UMAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print neighbors = geo_s2cell_neighbors('89c259')\r \`\`\`\r \r **Output**\r \r |neighbors|\r |---|\r |["89c25d","89c2f9","89c251","89c257","89c25f","89c25b","89c2f7","89c2f5"]|\r \r The following example calculates an array of input S2 cell with its neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoNkpOzclRsFVQt7BMNjK1VLfmKijKzCtRAAkXA8UTi4oSK+OT8/OSE0s0ChKTs+PBIhoQjZo6Cump+fEQTnxeamZ6RlJ+UTFMVhMAzd7c0mMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let s2cell = '89c259';\r print cells = array_concat(pack_array(s2cell), geo_s2cell_neighbors(s2cell))\r \`\`\`\r \r **Output**\r \r |cells|\r |---|\r |["89c259","89c25d","89c2f9","89c251","89c257","89c25f","89c25b","89c2f7","89c2f5"]|\r \r The following example calculates S2 cells polygons GeoJSON geometry collection.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WQ0UpDMQyG7/cUpTfrgXkzEBzilaCPUbIaa7e2KW0mHvHhTc/pcOBd8+fPlz+NyKrtHcaontT24eD294ft46bUkFl1uYkOtcJsHWUHbAq4s10Usw5OO+WR7FrYjMF/HKm2a3fa/Kj0eYdfBfLbQDIpngvSu2ksm3z3lEondKwKxdlT7ntvsEx2NMyC6BPtkhLU8I09oNgTnNHG0CTjYNxyBXZqlMV3BG/7FUb3EHqn9AsCX6o8tbgScp1F/W97Hc1nilGQgXJXx0jAJpUkkf/QsrRg5VX7A2VIC+iaT0/TL+9ZgYaBAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let s2cell = '89c259';\r print cells = array_concat(pack_array(s2cell), geo_s2cell_neighbors(s2cell))\r | mv-expand cells to typeof(string)\r | project polygons = geo_s2cell_to_polygon(cells)\r | summarize arr = make_list(polygons)\r | project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", arr), "properties", bag_pack("name", "polygons"))\r \`\`\`\r \r **Output**\r \r |geojson|\r |---|\r |{"type": "Feature","geometry": {"type": "GeometryCollection","geometries": [<br> {"type": "Polygon","coordinates": [[[ -74.030012249838478, 40.8012684339439],[ -74.030012249838478, 40.7222262918358],[ -73.935982114337421, 40.708880489804564],[ -73.935982114337421, 40.787917134506841],[ -74.030012249838478, 40.8012684339439]]]},<br> {"type": "Polygon","coordinates": [[[ -73.935982114337421, 40.708880489804564],[ -73.935982114337421, 40.629736433321796],[ -73.841906340776248, 40.616308079144915],[ -73.841906340776248, 40.695446474556284],[ -73.935982114337421, 40.708880489804564]]]},<br> {"type": "Polygon","coordinates": [[[ -74.1239959854733, 40.893471289549765],[ -74.1239959854733, 40.814531536204242],[ -74.030012249838478, 40.8012684339439],[ -74.030012249838478, 40.880202851376716],[ -74.1239959854733, 40.893471289549765]]]},<br> {"type": "Polygon","coordinates": [[[ -74.1239959854733, 40.735483949993387],[ -74.1239959854733, 40.656328734184143],[ -74.030012249838478, 40.643076628676461],[ -74.030012249838478, 40.7222262918358],[ -74.1239959854733, 40.735483949993387]]]},<br> {"type": "Polygon","coordinates": [[[ -74.1239959854733, 40.814531536204242],[ -74.1239959854733, 40.735483949993387],[ -74.030012249838478, 40.7222262918358],[ -74.030012249838478, 40.8012684339439],[ -74.1239959854733, 40.814531536204242]]]},<br> {"type": "Polygon","coordinates": [[[ -73.935982114337421, 40.787917134506841],[ -73.935982114337421, 40.708880489804564],[ -73.841906340776248, 40.695446474556284],[ -73.841906340776248, 40.774477568182071],[ -73.935982114337421, 40.787917134506841]]]},<br> {"type": "Polygon","coordinates": [[[ -74.030012249838478, 40.7222262918358],[ -74.030012249838478, 40.643076628676461],[ -73.935982114337421, 40.629736433321796],[ -73.935982114337421, 40.708880489804564],[ -74.030012249838478, 40.7222262918358]]]},<br> {"type": "Polygon","coordinates": [[[ -74.030012249838478, 40.880202851376716],[ -74.030012249838478, 40.8012684339439],[ -73.935982114337421, 40.787917134506841],[ -73.935982114337421, 40.866846163445771],[ -74.030012249838478, 40.880202851376716]]]},<br> {"type": "Polygon","coordinates": [[[ -73.935982114337421, 40.866846163445771],[ -73.935982114337421, 40.787917134506841],[ -73.841906340776248, 40.774477568182071],[ -73.841906340776248, 40.853401155678846],[ -73.935982114337421, 40.866846163445771]]]}]},<br> "properties": {"name": "polygons"}}|\r \r The following example calculates polygon unions that represent S2 cell and its neighbors.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PwQrCMAyG73uK3taBXgaCQ3yWUmusdW1T2kyc+PC2WwcevATyJ//3JxaIpV6BtezM2uOg+sPQnpoQjSdW5JR1GaOchUKvJPEg1SgWha/Gbsc0oFgb4cHo+wVj2qZd82HuuYdXkP5akYSM5gB444lyki47IeIDFLGAdtboS+4PllDUAV8QxZEm52Q0bygH5nUnRxDWpHxjZfzhVuzkDfoNmeo/uXZfEaCuxhEBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let s2cell = '89c259';\r print cells = array_concat(pack_array(s2cell), geo_s2cell_neighbors(s2cell))\r | mv-expand cells to typeof(string)\r | project polygons = geo_s2cell_to_polygon(cells)\r | summarize arr = make_list(polygons)\r | project polygon = geo_union_polygons_array(arr)\r \`\`\`\r \r **Output**\r \r |polygon|\r |---|\r |{"type": "Polygon","coordinates": [[[-73.841906340776248,40.695446474556284],[-73.841906340776248,40.774477568182071],[-73.841906340776248,40.853401155678846],[-73.935982114337421,40.866846163445771],[-74.030012249838478,40.880202851376716],[-74.1239959854733,40.893471289549758],[-74.1239959854733,40.814531536204242],[-74.1239959854733,40.735483949993387],[-74.1239959854733,40.656328734184143],[-74.030012249838478,40.643076628676461],[-73.935982114337421,40.629736433321796],[-73.841906340776248,40.616308079144915],[-73.841906340776248,40.695446474556284]]]}|\r \r The following example returns true because of the invalid S2 Cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjMK0vMyUxRsFXILM4rzcnRSE/Njy82Sk7NyYnPS81Mz0jKLyrWUE9U19QEAB3YxNYxAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print invalid = isnull(geo_s2cell_neighbors('a'))\r \`\`\`\r \r **Output**\r \r |invalid|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-s2cell-neighbors-function","geo-s2cell-neighbors-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_s2cell_to_central_point","Calculates the geospatial coordinates that represent the center of an S2 cell.",`Read more about [S2 cell hierarchy](https://s2geometry.io/devguide/s2cell_hierarchy).\r \r ## Syntax\r \r \`geo_s2cell_to_central_point(\`*s2cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *s2cell* | string | ✓ | S2 cell token value as it was calculated by [geo_point_to_s2cell()](geo-point-to-s2cell-function.md). The S2 cell token maximum string length is 16 characters.|\r \r ## Returns\r \r The geospatial coordinate values in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the S2 cell token is invalid, the query will produce a null result.\r \r > [!NOTE]\r > The GeoJSON format specifies longitude first and latitude second.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjIB5G2Cump+fHFRsmpOTnxJfnxyal5JUWJOfFgWQ0lQyNjE1MzcyVNrhqF1IqS1LwUheT8/KKUzLzEktRioG6wOj0kMYTCnPy89MyS0pRUoDIkBdEGsToKOYkl2KQMYwEypEkCnAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print point = geo_s2cell_to_central_point("1234567")\r | extend coordinates = point.coordinates\r | extend longitude = coordinates[0], latitude = coordinates[1]\r \`\`\`\r \r **Output**\r \r |point|coordinates|longitude|latitude|\r |---|---|---|---|\r |{<br> "type": "Point",<br> "coordinates": [<br> 9.86830731850408,<br> 27.468392925827604<br> ]<br>}|[<br> 9.86830731850408,<br> 27.468392925827604<br>]|9.86830731850408|27.4683929258276|\r \r The following example returns a null result because of the invalid S2 cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjIB5G2Cump+fHFRsmpOTnxJfnxyal5JUWJOfFgWQ2lRCVNADb75CkuAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print point = geo_s2cell_to_central_point("a")\r \`\`\`\r \r **Output**\r \r |point|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-s2cell-to-central-point-function","geo-s2cell-to-central-point-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_s2cell_to_polygon","Calculates the polygon that represents the S2 Cell rectangular area.",`Read more about [S2 Cells](https://s2geometry.io/devguide/s2cell_hierarchy).\r \r ## Syntax\r \r \`geo_s2cell_to_polygon(\`*s2cell*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *s2cell* | string | ✓ | S2 cell token value as it was calculated by [geo_point_to_s2cell()](geo-point-to-s2cell-function.md). The S2 cell token maximum string length is 16 characters.|\r \r ## Returns\r \r Polygon in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If the s2cell is invalid, the query will produce a null result.\r \r > [!NOTE]\r > S2 Cell edges are spherical geodesics.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2Sk7NyQnIz6lMz89TsFVIT82Ph4jFl+THF0DENZQsLJONTC2VNAF6g4+NNQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print s2cellPolygon = geo_s2cell_to_polygon("89c259")\r \`\`\`\r \r **Output**\r \r |s2cellPolygon|\r |---|\r |{<br>"type": "Polygon",<br>"coordinates": [[[-74.030012249838478, 40.8012684339439], [-74.030012249838478, 40.7222262918358], [-73.935982114337421, 40.708880489804564], [-73.935982114337421, 40.787917134506841], [-74.030012249838478, 40.8012684339439]]]<br>}|\r \r The following example assembles GeoJSON geometry collection of S2 Cell polygons.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22QTW6DMBCF95xixAokN+KvYCplFSk9QJdVZTl0RGgMRrazoOrhO4AVorT2xp4335tnf0pH+6QwUkP7YlAqBkq65RQH7wHQeqryXf1cljxnUCQ7nlR1UrFNSkte1quU8jwt7iRepwVfpKrIsypnwUfwA6PRX9g4sJk4S3uGPbSoxai7wQmnhc0aVGoOtGRhkCbxX4r61dTqwdMrNOO+Hvm+GbXXvpem+8ZHWCjryKCXFxSqsy560O/nnmQrRtlcouV5oZtGDBmER5Tuaui4lilLj85MJN2AW++rFw9aKbLs9DBXPdKhpds/AWNvTUFGNG7t28wH2S/mbxkc6AvAkxaabUoc/wKv/5OK6QEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(lng:real, lat:real)\r [\r -73.956683, 40.807907,\r -73.916869, 40.818314,\r -73.989148, 40.743273,\r ]\r | project s2_hash = geo_point_to_s2cell(lng, lat, 10)\r | project s2_hash_polygon = geo_s2cell_to_polygon(s2_hash)\r | summarize s2_hash_polygon_lst = make_list(s2_hash_polygon)\r | project bag_pack(\r "type", "Feature",\r "geometry", bag_pack("type", "GeometryCollection", "geometries", s2_hash_polygon_lst),\r "properties", bag_pack("name", "S2 Cell polygons collection"))\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |{<br>"type": "Feature",<br>"geometry": {"type": "GeometryCollection", "geometries": [<br>{"type": "Polygon", "coordinates": [[[-74.030012249838478, 40.880202851376716], [-74.030012249838478, 40.8012684339439], [-73.935982114337421, 40.787917134506841], [-73.935982114337421, 40.866846163445771], [-74.030012249838478, 40.880202851376716]]]},<br>{"type": "Polygon", "coordinates": [[[-73.935982114337421, 40.866846163445771], [-73.935982114337421, 40.787917134506841], [-73.841906340776248, 40.774477568182071], [-73.841906340776248, 40.853401155678846], [-73.935982114337421, 40.866846163445771]]]},<br>{"type": "Polygon", "coordinates": [[[-74.030012249838478, 40.8012684339439], [-74.030012249838478, 40.7222262918358], [-73.935982114337421, 40.708880489804564], [-73.935982114337421, 40.787917134506841], [-74.030012249838478, 40.8012684339439]]]}]<br>},<br> "properties": {"name": "S2 Cell polygons collection"}<br>}|\r \r The following example returns a null result because of the invalid s2cell token input.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2Sk7NyQnIz6lMz89TsFVIT82Ph4jFl+THF0DENZQSlTQByV78WTAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s2cellPolygon = geo_s2cell_to_polygon("a")\r \`\`\`\r \r **Output**\r \r |s2cellPolygon|\r |---|\r ||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-s2cell-to-polygon-function","geo-s2cell-to-polygon-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_simplify_polygons_array","Simplifies polygons by replacing nearly straight chains of short edges with a single long edge on Earth.",`## Syntax\r \r \`geo_simplify_polygons_array(\`*polygons*\`,\` *tolerance*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygon* | dynamic | ✓ | Polygon or multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r | *tolerance* | int, long, or real | | Defines minimum distance in meters between any two vertices. Supported values are in the range [0, ~7,800,000 meters]. If unspecified, the default value \`10\` is used.|\r \r ## Returns\r \r Simplified polygon or a multipolygon in the [GeoJSON format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type, with no two vertices with distance less than tolerance. If either the polygon or tolerance is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * If input is a single polygon, please see [geo_polygon_simplify()](geo-polygon-simplify-function.md).\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r > * If input is a multipolygon and contains more than one polygon, the result will be the area of polygons union.\r > * High tolerance may cause small polygon to disappear.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.`,`The following example simplifies polygons with mutual borders (USA states), by removing vertices that are within a 100-meter distance from each other.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2XMMQ6DMAyF4b2n8AgSQnCAngJ1tqzKoNC4iWwzpOLw9dBOrE/f+x8LLk7Odjuhatn56VBLblt5wx1WJj+Ubdy4CLu2UHaIkKYPQzYPI/RizMm8+/36a8rCRQItSc1pbfjfkVSpdVEaYJ6m/gsta1dmjwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r US_States\r | project polygon = features.geometry\r | summarize lst = make_list(polygon)\r | project polygons = geo_simplify_polygons_array(lst, 100)\r \`\`\`\r \r **Output**\r \r |polygons|\r |---|\r |{ "type": "MultiPolygon", "coordinates": [ ... ]]}|\r \r The following example returns True because one of the polygons is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA6WR3WqEMBCF732KkCsFu8T8qrDvsPcikmq6pI1GTLZgf9692WYVr9sEAvPNzOEcMkgf7rNR6WzNerWTq4d1kqPus6RJQDiPMv2Efp0VrOElDsIc9tYug56kVw7WTdM8CXKqaMVyik6i4lWbR8RKJO6sRIiXGywxKn4HeYnZBgUpRISU7fCo2LbfWf43XxzjKIPpf3QEIdGOwIJuFivCo21O0J6lEDEg4+wQ8Lh9d5G0yRdwt3GUi/5QQC4LOINRvqnOaOf3b8nC1LzYV9V7oF2np3dp9NA92mFFu+lmTHpVtnN6nI1+Wbeu64KqXNPwZtkPN6O8sPIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(polygons:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})\r ]\r | summarize arr = make_list(polygons)\r | project is_invalid_polygon = isnull(geo_simplify_polygons_array(arr))\r \`\`\`\r \r **Output**\r \r |is_invalid_polygon|\r |---|\r |1|\r \r The following example returns True because of the invalid tolerance.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52RzW6EIBSF9z4FYaWJM0GQH036Dt0bY6jSCVMUI87C/rx7sYxkuh1ICHw59+TcyyBXv9+MSmdrtoudXD1skxx1nyVNAvy6P9MvuG6zgjV8DUKYw97aZdCTXJWDddM0J07OVVnRvERnXrGqzQOiAvGdCYSYOKDAqPgTMoHpATkpeIAljfDRsW1/svy5XAzjYIPLmIwJIe5Q4BiXhwxcRN3/4udDcEJCLxzz8jCvCAs9M4LiIAoepkMZfZjOY/WeImmTb+Bu4ygX/amAXBbwAkb5oTqj3Rr/NPOqebFX1a9Au266GeN12u2X9KJs5/Q4G/2+dUdF563klvozB6ciy34BttDM2igCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(polygons:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249],[-73.96888,40.79282],[-73.9577,40.7789],[-73.94622,40.79249]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})\r ]\r | summarize arr = make_list(polygons)\r | project is_null = isnull(geo_simplify_polygons_array(arr, -1))\r \`\`\`\r \r **Output**\r \r |is_null|\r |---|\r |1|\r \r The following example returns True because high tolerance causes polygon to disappear.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52RzW6EIBSF9z4FYaWJnSDIjyZ9h+6NMVTphBbFiLOwP+9eLCOx24GEwJdzT869DHL1+9WodLZmu9rJ1cM2yVH3WdIkwK/7M/2C6zYrWMOXIIQ57K1dBj3JVTlYN03zxMmlKiual+jCK1a1eUBUIL4zgRATBxQYFX9CJjA9ICcFD7CkEZ4d2/Ynyx/LxTAONriMyZgQ4g4FjnF5yMBF1P0vfjwEJyT0wjEvD/OKsNAzIygOouBhOpTR03TO1XuKpE2+gbuNo1z0pwJyWcAzGOWH6ox2a/zTzKvmxb6rfgXaddPNGK/Tbr+kV2U7p8fZ6LetOyo6byW31J85KJBfWfYLADokJCsCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(polygons:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249],[-73.96888,40.79282],[-73.9577,40.7789],[-73.94622,40.79249]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})\r ]\r | summarize arr = make_list(polygons)\r | project is_null = isnull(geo_simplify_polygons_array(arr, 10000))\r \`\`\`\r \r **Output**\r \r |is_null|\r |---|\r |1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-simplify-polygons-array-function","geo-simplify-polygons-array-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_union_lines_array","Calculates the union of lines or multilines on Earth.",`## Syntax\r \r \`geo_union_lines_array(\`*lineStrings*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *lineStrings* | dynamic | ✓ | An array of lines or multilines in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r A line or a multiline in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If any of the provided lines or multilines is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input line edges are straight cartesian lines, consider using [geo_line_densify()](geo-line-densify-function.md) in order to convert planar edges to geodesics.\r \r **LineString definition and constraints**\r \r dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})\r \r dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})\r \r * LineString coordinates array must contain at least two entries.\r * Coordinates [longitude, latitude] must be valid where longitude is a real number in the range [-180, +180] and latitude is a real number in the range [-90, +90].\r * Edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.`,`The following example performs geospatial union on line rows.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8WSSWrEMBBF9z6F0coGp1FpbkNukF2WxhjFFo06ttTI6oUz3D1KPBwgBFK1KX3eLz6oBh1Tv4ymGK0zcz0sTk+2L7Mmy1Ntz+IdxeVmUI2eEvUcg3UXVKHe+zBYp6OZUd00D5KezlwoqhQTBAvBK4ZPCnNM1BmYwklvqx2jVBJJgSR1wyR8N4CUB8WSkQvCBKh9GWCCMaNAAdr2s6x+nfMvAuwYp5JRgbFinK4YY5A0SFYO/P+DpgBZm33k832adLBvJv/5706HkD/mk3413WjnuF5BmcBb8FfTxw27O+tdAi/Gr3N32PVSHHP5BY0haIxPAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(lines:dynamic)\r [\r dynamic({"type":"LineString","coordinates":[[-73.95683884620665,40.80502891480884],[-73.95633727312088,40.8057171711177],[-73.95489156246185,40.80510200431311]]}),\r dynamic({"type":"LineString","coordinates":[[-73.95633727312088,40.8057171711177],[-73.95489156246185,40.80510200431311],[-73.95537436008453,40.804413741624515]]}),\r dynamic({"type":"LineString","coordinates":[[-73.95633727312088,40.8057171711177],[-73.95489156246185,40.80510200431311]]})\r ]\r | summarize lines_arr = make_list(lines)\r | project lines_union = geo_union_lines_array(lines_arr)\r \`\`\`\r \r **Output**\r \r |lines_union|\r |---|\r |{"type": "LineString", "coordinates": [[-73.956838846206651, 40.805028914808844], [-73.95633727312088, 40.8057171711177], [ -73.954891562461853, 40.80510200431312], [-73.955374360084534, 40.804413741624522]]}|\r \r The following example performs geospatial union on line columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA62Rz2rDMAzG73kK41MDXrH8v4G9QW87hlC8xBRvnR1c9xC2vfucJulltzHrok/8PklYg80lXi9ud/HBQTNMwX74nqBZsk3WVVuh8la5+8R5Gh1u8LFQLzn5cMYE9zGmwQeb3RU3bfuk+f4gleHGCMWoUpIIujdUUmYOIAwt9Y5sGOeaaQ6sVFdMwxwAWj8oUYxSMaHAbM2AMkoFBw7Qdd81+dOO/zF8wyTXgitKjZB8wYSAUoNilSDnJauu+kJjim+uz/ePvp5sSugZjbZ/n1M7LedYz1D/wm/Bx1AMZxeX/PRos3rvef0DcJZ9Yt8BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(line1:dynamic, line2:dynamic)\r [\r dynamic({"type":"LineString","coordinates":[[-73.95683884620665,40.80502891480884],[-73.95633727312088,40.8057171711177],[-73.95489156246185,40.80510200431311]]}), dynamic({"type":"LineString","coordinates":[[-73.95633727312088,40.8057171711177],[-73.95489156246185,40.80510200431311],[-73.95537436008453,40.804413741624515]]})\r ]\r | project lines_arr = pack_array(line1, line2)\r | project lines_union = geo_union_lines_array(lines_arr)\r \`\`\`\r \r **Output**\r \r |lines_union|\r |---|\r |{"type": "LineString", "coordinates":[[-73.956838846206651, 40.805028914808844], [-73.95633727312088, 40.8057171711177], [-73.954891562461853, 40.80510200431312], [-73.955374360084534, 40.804413741624522]]}|\r \r The following example returns True because one of the lines is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5WQzWrFIBCF93kKcZVAenHUqDfQN+iuyxCCTeTirdGLMYX0591r70/2ndnMHL5zGGbSKfebM6Wz3izttHk927EqugLluq/lF07bxeAWv2TqNUXrT7jGYwhxsl4ns+C2654kOxwboZhSXFAiRFNzclCkIVQdgSuS9b5+YIxJKhnQrN4xCX8NIOVO8WxsBOUC1CMMCCWEM2AAff9T1f+/E2p0tRZ98Y2WdZ51tJ8GXR8w6BjRM5r1uxmcXdLtLVUGLzGczZiQ9R/a2WlYvQ0+o3bxq3PlyYSbNOw5eiv3uap+AQk/yOdqAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(lines:dynamic)\r [\r dynamic({"type":"LineString","coordinates":[[-73.95683884620665,40.80502891480884],[-73.95633727312088,40.8057171711177],[-73.95489156246185,40.80510200431311]]}),\r dynamic({"type":"LineString","coordinates":[[1, 1]]})\r ]\r | summarize lines_arr = make_list(lines)\r | project invalid_union = isnull(geo_union_lines_array(lines_arr))\r \`\`\`\r \r **Output**\r \r |invalid_union|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-union-lines-array-function","geo-union-lines-array-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"geo_union_polygons_array","Calculates the union of polygons or multipolygons on Earth.",`## Syntax\r \r \`geo_union_polygons_array(\`*polygons*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *polygons* | dynamic | ✓ | An array of polygons or multipolygons in the [GeoJSON format](https://tools.ietf.org/html/rfc7946).|\r \r ## Returns\r \r A polygon or a multipolygon in [GeoJSON Format](https://tools.ietf.org/html/rfc7946) and of a [dynamic](./scalar-data-types/dynamic.md) data type. If any of the provided polygons or multipolygons is invalid, the query will produce a null result.\r \r > [!NOTE]\r >\r > * The geospatial coordinates are interpreted as represented by the [WGS-84](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) coordinate reference system.\r > * The [geodetic datum](https://en.wikipedia.org/wiki/Geodetic_datum) used for measurements on Earth is a sphere. Polygon edges are [geodesics](https://en.wikipedia.org/wiki/Geodesic) on the sphere.\r > * If input polygon edges are straight cartesian lines, consider using [geo_polygon_densify()](geo-polygon-densify-function.md) to convert planar edges to geodesics.\r \r **Polygon definition and constraints**\r \r dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})\r \r dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})\r \r * LinearRingShell is required and defined as a \`counterclockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be only one shell.\r * LinearRingHole is optional and defined as a \`clockwise\` ordered array of coordinates [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. There can be any number of interior rings and holes.\r * LinearRing vertices must be distinct with at least three coordinates. The first coordinate must be equal to the last. At least four entries are required.\r * Coordinates [longitude, latitude] must be valid. Longitude must be a real number in the range [-180, +180] and latitude must be a real number in the range [-90, +90].\r * LinearRingShell encloses at most half of the sphere. LinearRing divides the sphere into two regions. The smaller of the two regions will be chosen.\r * LinearRing edge length must be less than 180 degrees. The shortest edge between the two vertices will be chosen.\r * LinearRings must not cross and must not share edges. LinearRings may share vertices.`,`The following example performs geospatial union on polygon rows.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52Ry26DMBBF93yF5RVINDJ+jUHKP2SPEHLBimjBRkAW9PHvJXVw6Tb2xnN0fXVnptXLdl97E4+uX6/OzkW7Wj10TRKVEdrOo4w/8bKOBhf44oU4xY1zU9tZvZgZF2VZvgA75TwXKScnyGVepR4JReDOFCFS7VBRkv0KpaJih8Ay8JCLAI+OVfWdpM/lkpR6G8pDMqmUekBFQ1zwGUAF3f/Pz4cAxnwvQIHv5jmTvmfJSBhEBn46QorDdI6/7ymiKvpC820Y9NR9GLTvsNbThM5o0O+m7rt5CctNNvk4uTfTLH/im+2c3eRX4/y7PvroNT6WyQ/35ucGMgIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(polygons:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249],[-73.96888,40.79282],[-73.9577,40.7789],[-73.94622,40.79249]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})\r ]\r | summarize polygons_arr = make_list(polygons)\r | project polygons_union = geo_union_polygons_array(polygons_arr)\r \`\`\`\r \r **Output**\r \r |polygons_union|\r |---|\r |{"type":"Polygon","coordinates":[[[-73.972599326729608,40.765330371902991],[-73.960302383706178,40.782140794645024],[-73.9577,40.7789],[-73.94622,40.79249],[-73.9526593223173,40.792584227716468],[-73.9495,40.7969],[-73.95807,40.80068],[-73.9639277517478,40.792748258673875],[-73.96888,40.792819999999992],[-73.9662719791645,40.7895734224338],[-73.9803360309571,40.770518810606404],[-73.9936,40.7663],[-73.97171,40.756550000000004],[-73.972599326729608,40.765330371902991]]]}|\r \r The following example performs geospatial union on polygon columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5WQTQ6CMBCF95yi6QqSakqFdiDxDu4JIRUagz8tAVwQ9e6ChaqJG9vNzJeZNy+vkv3492flN+Y8HIwO02rQ8lKXBM2ELSTwMg+Nb279G+6HRuEU7+wgJrg0pq1qLXvV4TTLspXYrJMoiUlE1yLhSU4sioGKiQGlHBYIjIavQQ4sXqDYhMLCKHbwUzHPHwH53xNnzEqwyLniADBDYM6qsPcFuLnv5cmAl3t31LTmqMp+ya0rZNuiLWpkeZpKObiM39kGv/auujZ63DwoY+viU/Kt82qDJ6h5+jHDAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(polygon1:dynamic, polygon2:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}), dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249],[-73.96888,40.79282],[-73.9577,40.7789],[-73.94622,40.79249]]]})\r ]\r | project polygons_arr = pack_array(polygon1, polygon2)\r | project polygons_union = geo_union_polygons_array(polygons_arr)\r \`\`\`\r \r **Output**\r \r |polygons_union|\r |---|\r |{"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.9639277517478,40.792748258673875],[-73.96888,40.792819999999992],[-73.9662719791645,40.7895734224338],[-73.98201,40.76825],[-73.97317,40.76455],[-73.960302383706178,40.782140794645024],[-73.9577,40.7789],[-73.94622,40.79249],[-73.9526593223173,40.792584227716468],[-73.9495,40.7969]]]}|\r \r The following example returns True because one of the polygons is invalid.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52QzYqDMBRG9z5FyMqALTH+JAp9h+5FJKOhZCYmksSCbefdxzZjcd17V/dw+Lh8A/frfikRT0YtF6NdPSyaj7JHUROBdf7P+A79MglYw3MQYQJ7Y+wgNffCwbppmgPNjlVeFUmOj7QqqzYJqGCYPhnDuGQbZASnL7FkpNggzVIaYF684T6xbX9R8tlfJSEhhuQhJ2qjB3DzOHIrbwJsBXTcWnACI/8RnZLOv5tBqz5Z8y16D6S+ciWHbtbS6NWWTs9KxRdhAur2aXyJ9ydCf8U93vV2AQAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(polygons:dynamic)\r [\r dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),\r dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249]]]})\r ]\r | summarize polygons_arr = make_list(polygons)\r | project invalid_union = isnull(geo_union_polygons_array(polygons_arr))\r \`\`\`\r \r **Output**\r \r |invalid_union|\r |---|\r |True|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/geo-union-polygons-array-function","geo-union-polygons-array-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"getschema","Produce a table that represents a tabular schema of the input.","## Syntax\r\n\r\n*T* `|` `getschema`",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRSE8tKU7OSM1NBADhHoKkFwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | getschema\r \`\`\`\r \r **Output**\r \r |ColumnName|ColumnOrdinal|DataType|ColumnType|\r |---|---|---|---|\r |StartTime|0|System.DateTime|datetime|\r |EndTime|1|System.DateTime|datetime|\r |EpisodeId|2|System.Int32|int|\r |EventId|3|System.Int32|int|\r |State|4|System.String|string|\r |EventType|5|System.String|string|\r |InjuriesDirect|6|System.Int32|int|\r |InjuriesIndirect|7|System.Int32|int|\r |DeathsDirect|8|System.Int32|int|\r |DeathsIndirect|9|System.Int32|int|\r |DamageProperty|10|System.Int32|int|\r |DamageCrops|11|System.Int32|int|\r |Source|12|System.String|string|\r |BeginLocation|13|System.String|string|\r |EndLocation|14|System.String|string|\r |BeginLat|15|System.Double|real|\r |BeginLon|16|System.Double|real|\r |EndLat|17|System.Double|real|\r |EndLon|18|System.Double|real|\r |EpisodeNarrative|19|System.String|string|\r |EventNarrative|20|System.String|string|\r |StormSummary|21|System.Object|dynamic|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/getschemaoperator","getschemaoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"gettype","Returns the runtime type of its single argument.",`The runtime type may be different than the nominal (static) type for expressions whose nominal type is \`dynamic\`; in such cases \`gettype()\` can be useful to reveal the type of the actual value (how the value is encoded in memory).\r \r ## Syntax\r \r \`gettype(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value for which to find the type. |\r \r ## Returns\r \r A string representing the runtime type of *value*.`,"|Expression |Returns |\r\n|------------------------------------|-------------|\r\n|`gettype(\"a\")` |`string` |\r\n|`gettype(111)` |`long` |\r\n|`gettype(1==1)` |`bool` |\r\n|`gettype(now())` |`datetime` |\r\n|`gettype(1s)` |`timespan` |\r\n|`gettype(parse_json('1'))` |`int` |\r\n|`gettype(parse_json(' \"abc\" '))` |`string` |\r\n|`gettype(parse_json(' {\"abc\":1} '))` |`dictionary` |\r\n|`gettype(parse_json(' [1, 2, 3] '))` |`array` |\r\n|`gettype(123.45)` |`real` |\r\n|`gettype(guid(12e8b78d-55b4-46ae-b068-26d7a0080254))`|`guid`|\r\n|`gettype(parse_json(''))` |`null`|","https://docs.microsoft.com/azure/data-explorer/kusto/query/gettypefunction","gettypefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"getyear","Returns the year part of the `datetime` argument.",`## Syntax\r \r \`getyear(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to get the year. |\r \r ## Returns\r \r The year that contains the given *date*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUahMTSxSsFVITy0BsTRSEktSSzJzUzWMDAxNdQ0NdA2NNDUB6MDMlCoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print year = getyear(datetime(2015-10-12))\r \`\`\`\r \r |year|\r |--|\r |2015|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/getyearfunction","getyearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"has","Filters a record set for data with a case-insensitive string. `has` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`[!INCLUDE [has-operator-comparison](../../includes/has-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [has_cs](has-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *Column* \`has\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered.|\r | *Column* | string | ✓ | The column used to filter the records.|\r | *Expression* | scalar or tabular | ✓ | An expression for which to search. If the value is a tabular expression and has multiple columns, the first column is used.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxWEHJL7VcCS6OpFnBTsHQAChRUJSflZpcAtGig6wCANR4w8uCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State has "New"\r | where event_count > 10\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |NEW YORK|1,750|\r |NEW JERSEY|1,044|\r |NEW MEXICO|527|\r |NEW HAMPSHIRE|394|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-operator","has-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"has_all","Filters a record set for data with one or more case-insensitive search strings. `has_all` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`For more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`has_all\` \`(\`*expression*\`,\` ... \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar or tabular | ✓ |An expression that specifies the values for which to search. Each expression can be a [scalar value](scalar-data-types/index.md) or a [tabular expression](tabularexpressionstatements.md) that produces a set of values. If a tabular expression has multiple columns, the first column is used. The search will consider up to 256 distinct values.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`### Set of scalars\r \r The following query shows how to use \`has_all\` with a comma-separated set of scalar values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx2NsQ7CMAxEd77CytRKbMxMqCsL7Mi0hkRK7Mh2i4r4eJoup7vT093NRcuwELvB4QefSEow1GQy0RVV0dNCENEemDN0YZQ8hSMEcxV+N4cvJ2URbiFiyqHfhmwuBTV9CS4ys5/Hpl0PzxX2t/taacNcKpxauVN/jkW/jI0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where EpisodeNarrative has_all ("cold", "strong", "afternoon", "hail")\r | summarize Count=count() by EventType\r | top 3 by Count\r \`\`\`\r \r **Output**\r \r |EventType|Count|\r |---|---|\r |Thunderstorm Wind|517|\r |Hail|392|\r |Flash Flood|24|\r \r ### Dynamic array\r \r The same result can be achieved using a dynamic array notation.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx2NsQoCMRBEe8F/WFJdwM7aSq610U4OWXOrF0h2j83eScSPl1wzzAyPmauJ5n4ltgL73Q8+EylBP8ciI11QFS2uBBOWB6YE3VgZcwzd3QVJozuAK6bC7+bwZaQswi1MGJMbvG+jZckZNX4JzrKwnULTzsOzwnZ9qzM1zmSGY2s37A8IXzPSmwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where EpisodeNarrative has_all (dynamic(["cold", "strong", "afternoon", "hail"]))\r | summarize Count=count() by EventType\r | top 3 by Count\r \`\`\`\r \r **Output**\r \r |EventType|Count|\r |---|---|\r |Thunderstorm Wind|517|\r |Hail|392|\r |Flash Flood|24|\r \r The same query can also be written with a [let statement](letstatement.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzWNsQrCQBBE+3zFclUCdpaSStLaaCci62U1C3e3YW8Tifjx5gI2w8zwmAlk4JWNlBFa6JeEkX19dV5C73bgsqmkV3H4XKkkkkoYkIO7NYfqbKKxmylZhuoL74GUoBs5S08nVEXjmWDAfMcQoP5/NSubpxhR+UNwlClZ64vWDTwW2AYvy0grZjLCvpQb9QMQPEgrsQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let criteria = dynamic(["cold", "strong", "afternoon", "hail"]);\r StormEvents \r | where EpisodeNarrative has_all (criteria)\r | summarize Count=count() by EventType\r | top 3 by Count\r \`\`\`\r \r |EventType|Count|\r |---|---|\r |Thunderstorm Wind|517|\r |Hail|392|\r |Flash Flood|24|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-all-operator","has-all-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"has_any","Filters a record set for data with any set of case-insensitive strings. `has_any` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`For more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`has_any\` \`(\`*expression*\`,\` ... \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar or tabular | ✓ | An expression that specifies the values for which to search. Each expression can be a [scalar](scalar-data-types/index.md) value or a [tabular expression](tabularexpressionstatements.md) that produces a set of values. If a tabular expression has multiple columns, the first column is used. The search will consider up to 10,000 distinct values.|\r \r > [!NOTE]\r > An inline tabular expression must be enclosed with double parentheses. See [example](#tabular-expression).\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`### List of scalars\r \r The following query shows how to use \`has_any\` with a comma-separated list of scalar values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoz0gtSlUILkksSVXISCyOT8yrVNBQcnYM8vfx9HNU0lFQcnH09g8Bs/xcw5U0wbqKS3NzE4syq1IVkvNL80o0NBWSKiGGAACHltT/YAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State has_any ("CAROLINA", "DAKOTA", "NEW") \r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |---|---|\r |NEW YORK|1750|\r |NORTH CAROLINA|1721|\r |SOUTH DAKOTA|1567|\r |NEW JERSEY|1044|\r |SOUTH CAROLINA|915|\r |NORTH DAKOTA|905|\r |NEW MEXICO|527|\r |NEW HAMPSHIRE|394|\r \r ### Dynamic array\r \r The following query shows how to use \`has_any\` with a dynamic array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoz0gtSlUILkksSVXISCyOT8yrVNBIqcxLzM1M1ohWL84vLclQ11FQz8svAjJiNTVBmopLc3MTizKrUhWS80vzSjQ0FZIqIWYAAIx5b2ZfAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State has_any (dynamic(['south', 'north']))\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |---|---|\r |NORTH CAROLINA|1721|\r |SOUTH DAKOTA|1567|\r |SOUTH CAROLINA|915|\r |NORTH DAKOTA|905|\r |ATLANTIC SOUTH|193|\r |ATLANTIC NORTH|188|\r \r The same query can also be written with a [let statement](letstatement.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyWMQQrCMBBF9z3F3yUBbyBdeoIuRWRsB1IwE5iZtER6eIvuHrzHe7ODlMkwYulCZZ3jPVhtnsMFQaqe8EjXYfKq5baxuGE4sGdWxuTkjEz2JOmIv1E6rbVSSNcPY65NPCa8+j/+AmgCW+9wAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let areas = dynamic(['south', 'north']);\r StormEvents \r | where State has_any (areas)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |---|---|\r |NORTH CAROLINA|1721|\r |SOUTH DAKOTA|1567|\r |SOUTH CAROLINA|915|\r |NORTH DAKOTA|905|\r |ATLANTIC SOUTH|193|\r |ATLANTIC NORTH|188|\r \r ### Tabular expression\r \r The following query shows how to use \`has_any\` with an inline tabular expression. Notice that an inline tabular expression must be enclosed with double parentheses.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoz0gtSlUILkksSVXISCyOT8yrVNDQCMgvKM1JLMnMz3NJLElUgClDCCvYKZgagAFQsqAoPys1uQRiiqYmyNji0tzcxKLMqlSF5PzSvBINTYWkSog8AMlS+PGBAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State has_any ((PopulationData | where Population > 5000000 | project State))\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |--|--|\r |TEXAS |4701|\r |ILLINOIS |2022|\r |MISSOURI |2016|\r |GEORGIA |1983|\r |MINNESOTA |1881|\r |...|...|\r \r The same query can also be written with a [let statement](letstatement.md). Notice that the double parentheses as provided in the last example aren't necessary in this case.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NsQrCQBBE+0D+Ycqks7ESrbQX8gFhDYuJ3N2G3b1IxI/XRIRMOW8eE9gRSO/cmpOz4YirjDmQD5LO5IQ3nj0rb2qcsN+t+cJR5cGdo1n0Q1k0LhovEyc3lMVfXil6spbSjGr7WC8ryzGSDi9GJzl5VeM2/6QPjBKdkqEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let large_states = PopulationData | where Population > 5000000 | project State;\r StormEvents \r | where State has_any (large_states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |--|--|\r |TEXAS |4701|\r |ILLINOIS |2022|\r |MISSOURI |2016|\r |GEORGIA |1983|\r |MINNESOTA |1881|\r |...|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-anyoperator","has-anyoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"has_any_index","Searches the string for items specified in the array and returns the position in the array of the first item found in the string. `has_any_index` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`## Syntax\r \r \`has_any_index\` \`(\`*source*\`,\` *values*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source*| string | ✓| The value to search.|\r | *values*| dynamic | ✓| An array of scalar or literal expressions to look up. |\r \r ## Returns\r \r Zero-based index position of the first item in *values* that is found in *source*.\r Returns -1 if none of the array items were found in the string or if *values* is empty.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA53RsQ6CMBDG8d2n+MICJk0IqKMjm29gDDmlYCNcm7Yk8PYWkEUXNbntkv/vmhqr2G+gqiHDEXdyJfFYKq7kkET+rhzCEEMO1JlWRgLVyNSpW3KOp3UsEL928WW7BdIUtbLOo9X60RvUuucKisOY3sP5ADYbiInMfyZZ+3cxgC195+3+9eboqrH+xtp/WsUCgPvuKi3yIFniRiaZwE4gW/KnpU3W0ghdh7aXjbTu1T38+ob1V4rO+HG9fK4/AfXYgrf8AQAA" target="_blank">Run the query</a>\r \r \`\`\`\r print\r idx1 = has_any_index("this is an example", dynamic(['this', 'example'])) // first lookup found in input string\r , idx2 = has_any_index("this is an example", dynamic(['not', 'example'])) // last lookup found in input string\r , idx3 = has_any_index("this is an example", dynamic(['not', 'found'])) // no lookup found in input string\r , idx4 = has_any_index("Example number 2", range(1, 3, 1)) // Lookup array of integers\r , idx5 = has_any_index("this is an example", dynamic([])) // Empty lookup array\r \`\`\`\r \r **Output**\r \r |idx1|idx2|idx3|idx4|idx5|\r |----|----|----|----|----|\r | 0 | 1 | -1 |1 | -1 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-any-index-function","has-any-index-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"has_any_ipv4","Returns a value indicating whether one of specified IPv4 addresses appears in a text.",`IP address entrances in a text must be properly delimited with non-alphanumeric characters. For example, properly delimited IP addresses are:\r \r * "These requests came from: 192.168.1.1, 10.1.1.115 and 10.1.1.201"\r * "05:04:54 127.0.0.1 GET /favicon.ico 404"\r \r ## Syntax\r \r \`has_any_ipv4(\`*source* \`,\` *ip_address* [\`,\` *ip_address_2*\`,\` ...] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source*| string | ✓ | The value to search.|\r | *ip_address*| string or dynamic | ✓ | An IP address, or an array of IP addresses, for which to search.|\r \r ## Returns\r \r \`true\` if one of specified IP addresses is a valid IPv4 address, and it was found in *source*. Otherwise, the function returns \`false\`.`,`### IP addresses as list of strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDPRUDcwtTIwsTI1UTA0MtczAEJDBXfXEAX9tMSyzOT8PD0goWBiYKKuo6AOV4HMMVLXBAATwSNyXgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4('05:04:54 127.0.0.1 GET /favicon.ico 404', '127.0.0.1', '127.0.0.2')\r \`\`\`\r \r |result|\r |--|\r |true|\r \r ### IP addresses as dynamic array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDPRUDcwtTIwsTI1UTA0MtczAEJDBXfXEAX9tMSyzOT8PD0goWBiYKKuo5BSmZeYm5msEa0OVwoUhXOM1GM1NQHScYQ8aQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4('05:04:54 127.0.0.1 GET /favicon.ico 404', dynamic(['127.0.0.1', '127.0.0.2']))\r \`\`\`\r \r |result|\r |--|\r |true|\r \r ### Invalid IPv4 address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDPRUDcwtTIwsTI1UTA0MtczAEIjUzMFd9cQBf20xLLM5Pw8PSChYGJgoq6jkFKZl5ibmawRrYSkWElHQcnQ0kjP0MxCz1DPUClWUxMAIDlcGW8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4('05:04:54 127.0.0.256 GET /favicon.ico 404', dynamic(["127.0.0.256", "192.168.1.1"]))\r \`\`\`\r \r |result|\r |--|\r |false|\r \r ### Improperly deliminated IP address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2NywrCMBQFf+XsYqHkUVIfBZdF3LlwX4JJ8UKahiQW+vcGFzJwYODAxEShILn88eX6NnkyYZ8obvrAZD9IPfRadScuKwq38Qkxm41ea+B1oKVmLdj/8ZNLx9XxzFXVBkJgNj67FrTEtEaX/A7rPC1UnMX9AWNtzecvfjhaaIkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4('05:04:54127.0.0.1 GET /favicon.ico 404', '127.0.0.1', '192.168.1.1') // false, improperly delimited IP address\r \`\`\`\r \r |result|\r |--|\r |false|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-any-ipv4-function","has-any-ipv4-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"has_any_ipv4_prefix","Returns a boolean value indicating whether one of specified IPv4 address prefixes appears in a text.",'IP address entrances in a text must be properly delimited with non-alphanumeric characters. For example, properly delimited IP addresses are:\r\n\r\n* "These requests came from: 192.168.1.1, 10.1.1.115 and 10.1.1.201"\r\n* "05:04:54 127.0.0.1 GET /favicon.ico 404"\r\n\r\n## Syntax\r\n\r\n`has_any_ipv4_prefix(`*source* `,` *ip_address_prefix* [`,` *ip_address_prefix_2*`,` ...] `)` \r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *source*| string | ✓ | The value to search.|\r\n| *ip_address_prefix*| string or dynamic | ✓ | An IP address prefix, or an array of IP address prefixes, for which to search. A valid IP address prefix is either a complete IPv4 address, such as `192.168.1.11`, or its prefix ending with a dot, such as `192.`, `192.168.` or `192.168.1.`.|\r\n\r\n## Returns\r\n\r\n`true` if the one of specified IP address prefixes is a valid IPv4 address prefix, and it was found in *source*. Otherwise, the function returns `false`.',`### IP addresses as list of strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDOJLyhKTcus0FA3MLUyMLEyNVEwNDLXMwBCQwV31xAF/bTEsszk/Dw9IKFgYmCirqOgDlEBZlka6RmaWeipayro6yuUFJWmAgAUwkzUaQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4_prefix('05:04:54 127.0.0.1 GET /favicon.ico 404', '127.0.', '192.168.') // true\r \r \`\`\`\r \r |result|\r |--|\r |true|\r \r ### IP addresses as dynamic array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDOJLyhKTcus0FA3MLUyMLEyNVEwNDLXMwBCQwV31xAF/bTEsszk/Dw9IKFgYmCirqOQUpmXmJuZrBGtBFGqpKOgZGhppGdoZqGnFKupCQARxDvmbAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4_prefix('05:04:54 127.0.0.1 GET /favicon.ico 404', dynamic(["127.0.", "192.168."]))\r \`\`\`\r \r |result|\r |--|\r |true|\r \r ### Invalid IPv4 prefix\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDOJLyhKTcus0FA3MLUyMLEyNVEwNDLXMwBCQwV31xAF/bTEsszk/Dw9IKFgYmCirqOgDlahrgkA7mfKHVQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4_prefix('05:04:54 127.0.0.1 GET /favicon.ico 404', '127.0')\r \`\`\`\r \r |result|\r |--|\r |false|\r \r ### Improperly deliminated IP address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOT8yrjM8sKDOJLyhKTcus0FA3MLUyMLEyNTE0MtczAEJDBXfXEAX9tMSyzOT8PD0goWBiYKKuo6AOUQFmWRrpqWsCACl5RqJcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_any_ipv4_prefix('05:04:54127.0.0.1 GET /favicon.ico 404', '127.0.', '192.')\r \`\`\`\r \r |result|\r |--|\r |false|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-any-ipv4-prefix-function","has-any-ipv4-prefix-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"has_cs","Filters a record set for data with a case-sensitive search string. `has_cs` searches for indexed terms, where an indexed [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.",`[!INCLUDE [has-operator-comparison](../../includes/has-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *Column* \`has_cs\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered.|\r | *Column* | string | ✓ | The column used to filter the records.|\r | *Expression* | scalar or tabular | ✓ | An expression for which to search. If the value is a tabular expression and has multiple columns, the first column is used.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxOD65WEHJzcc/yNPFUQkAo0dX71MAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State has_cs "FLORIDA"\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |--|--|\r |FLORIDA|1042|\r \r Since all \`State\` values are capitalized, searching for a lowercase string with the same value, such as "florida", won't yield any results.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoz0gtSlUILkksSVXISCyOT8yrVNBQcnYM8vfx9HNU0lFQcnH09g8Bs/xcw5U0wbqKS3NzE4syq1IVkvNL80o0NBWSKiGGAACHltT/YAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State has_cs "florida"\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |--|--|\r |||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-cs-operator","has-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"has_ipv4","Returns a value indicating whether a specified IPv4 address appears in a text.",`IP address entrances in a text must be properly delimited with non-alphanumeric characters. For example, properly delimited IP addresses are:\r \r * "These requests came from: 192.168.1.1, 10.1.1.115 and 10.1.1.201"\r * "05:04:54 127.0.0.1 GET /favicon.ico 404"\r \r ## Syntax\r \r \`has_ipv4(\`*source* \`,\` *ip_address* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | string | ✓ | The text to search.|\r | *ip_address* | string | ✓ | The value containing the IP address for which to search.|\r \r ## Returns\r \r \`true\` if the *ip_address* is a valid IPv4 address, and it was found in *source*. Otherwise, the function returns \`false\`.\r \r > [!TIP]\r >\r > * To search for many IPv4 addresses at once, use [has_any_ipv4()](has-any-ipv4-function.md) function.\r > * To search for IPv4 addresses prefix, use [has_ipv4_prefix()](has-ipv4-prefix-function.md) function.`,`### Properly formatted IP address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM9FQNzC1MjCxMjVRMDQy1zMAQkMFd9cQBf20xLLM5Pw8PSChYGJgoq6joA5Xoa4JAIl8hqBNAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4('05:04:54 127.0.0.1 GET /favicon.ico 404', '127.0.0.1')\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |true|\r \r ### Invalid IP address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM9FQNzC1MjCxMjVRMDQy1zMAQiNTMwV31xAF/bTEsszk/Dw9IKFgYmCirqOgjqRGXRMAk108LFEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4('05:04:54 127.0.0.256 GET /favicon.ico 404', '127.0.0.256')\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |false|\r \r ### Improperly delimited IP\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM9FQNzC1MjCxMjUxNDLXMwBCQwV31xAF/bTEsszk/Dw9IKFgYmCirqOgDlehrgkAPqxiHkwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4('05:04:54127.0.0.1 GET /favicon.ico 404', '127.0.0.1')\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |false|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-ipv4-function","has-ipv4-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"has_ipv4_prefix","Returns a value indicating whether a specified IPv4 address prefix appears in a text.",`A valid IP address prefix is either a complete IPv4 address (\`192.168.1.11\`) or its prefix ending with a dot (\`192.\`, \`192.168.\` or \`192.168.1.\`).\r \r IP address entrances in a text must be properly delimited with non-alphanumeric characters. For example, properly delimited IP addresses are:\r \r * "These requests came from: 192.168.1.1, 10.1.1.115 and 10.1.1.201"\r * "05:04:54 127.0.0.1 GET /favicon.ico 404"\r \r ## Syntax\r \r \`has_ipv4_prefix(\`*source* \`,\` *ip_address_prefix* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source*| string| ✓| The text to search.|\r | *ip_address_prefix*| string| ✓| The IP address prefix for which to search.|\r \r ## Returns\r \r \`true\` if the *ip_address_prefix* is a valid IPv4 address prefix, and it was found in *source*. Otherwise, the function returns \`false\`.\r \r > [!TIP]\r > To search for many IPv4 prefixes at once, use the [has_any_ipv4_prefix()](has-any-ipv4-prefix-function.md) function.`,`### Properly formatted IPv4 prefix\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM4kvKEpNy6zQUDcwtTIwsTI1UTA0MtczAEJDBXfXEAX9tMSyzOT8PD0goWBiYKKuo6AOUaGuCQBk8fTRUQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4_prefix('05:04:54 127.0.0.1 GET /favicon.ico 404', '127.0.')\r \`\`\`\r \r |result|\r |--|\r |true|\r \r ### Invalid IPv4 prefix\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM4kvKEpNy6zQUDcwtTIwsTI1UTA0MtczAEJDBXfXEAX9tMSyzOT8PD0goWBiYKKuo6AOVqGuCQDlc4Z2UAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4_prefix('05:04:54 127.0.0.1 GET /favicon.ico 404', '127.0')\r \`\`\`\r \r |result|\r |--|\r |false|\r \r ### Invalid IPv4 address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM4kvKEpNy6zQUDcwtTIwsTI1UTA0MtczAEIjUzMFd9cQBf20xLLM5Pw8PSChYGJgoq6joA5Ro64JAMAcwIpTAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4_prefix('05:04:54 127.0.0.256 GET /favicon.ico 404', '127.0.')\r \`\`\`\r \r |result|\r |--|\r |false|\r \r ### Improperly delimited IPv4 address\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCyOzywoM4kvKEpNy6zQUDcwtTIwsTI1MTQy1zMAQkMFd9cQBf20xLLM5Pw8PSChYGJgoq6joA5Roa4JAD4FydVQAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=has_ipv4_prefix('05:04:54127.0.0.1 GET /favicon.ico 404', '127.0.')\r \`\`\`\r \r |result|\r |--|\r |false|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/has-ipv4-prefix-function","has-ipv4-prefix-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash","Returns a hash value for the input value.",`> [!NOTE]\r >\r > * The function calculates hashes using the xxhash64 algorithm, but this may change. It's recommended to only use this function within a single query.\r > * If you need to persist a combined hash, it's recommended to use [hash_sha256()](sha256hashfunction.md), [hash_sha1()](sha1-hash-function.md), or [hash_md5()](md5hashfunction.md) and combine the hashes with a [bitwise operator](binoperators.md). These functions are more complex to calculate than \`hash()\`.\r \r ## Syntax\r \r \`hash(\`*source* [\`,\` *mod*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | scalar | ✓ | The value to be hashed.|\r | *mod* | int | | A modulo value to be applied to the hash result, so that the output value is between \`0\` and \`mod - 1\`. This parameter is useful for limiting the range of possible output values or for compressing the output of the hash function into a smaller range.|\r \r ## Returns\r \r The hash value of *source*. If *mod* is specified, the function returns the hash value modulo the value of *mod*, meaning that the output of the function will be the remainder of the hash value divided by *mod*. The output will be a value between \`0\` and \`mod - 1\`, inclusive.`,`### String input\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCzO0FAKzy/KSVHSBADZZgKmGgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=hash("World")\r \`\`\`\r \r |result|\r |--|\r |1846988464401551951|\r \r ### String input with mod\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCzO0FAKzy/KSVHSUTA0MNAEAJfnV8cfAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=hash("World", 100)\r \`\`\`\r \r |result|\r |--|\r |51|\r \r ### Datetime input\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCzO0EhJLEktycxN1VAyMjA01TUwBCIlTU0AvUZeXikAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=hash(datetime("2015-01-01"))\r \`\`\`\r \r |result|\r |--|\r |1380966698541616202|\r \r ### Use hash to check data distribution\r \r Use the \`hash()\` function for sampling data if the values in one of its columns is uniformly distributed. In the following example, *StartTime* values are uniformly distributed and the function is used to run a query on 10% of the data.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2NOw6DMBBEe04xJZYooKB0FaVOYS7gwCJTGCPvkgjE4bFBohpp3nyMhOjfP5qFURz4O4oEZ9mVRmyUbvJUoakVtEadArx6b+O0E0xuvsI6CzT6rKWq0G0LfcaLcfKHG1wHGSl8t9S0QvlNwoL2dp6tgbg/AeFM8LmVAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where hash(StartTime, 10) == 0\r | summarize StormCount = count(), TypeOfStorms = dcount(EventType) by State \r | top 5 by StormCount desc\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hashfunction","hashfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash_combine","Combines hash values of two or more hashes.",`## Syntax\r \r \`hash_combine(\`*h1* \`,\` *h2* [\`,\` *h3* ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *h1*, *h2*, ... *hN* | long | ✓ | The hash values to combine.|\r \r ## Returns\r \r The combined hash value of the given scalars.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShLzClNNVSwVVDySM3JyVfSgYgYgUTC84tyUpS4ahRSK0pS81IUMkDqMhKLMzQgujR1FDKMbBECRpoItcn5uUmZeakpUB3xUL5GhiFIkyYAFnd56X0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print value1 = "Hello", value2 = "World"\r | extend h1 = hash(value1), h2=hash(value2)\r | extend combined = hash_combine(h1, h2)\r \`\`\`\r \r **Output**\r \r |value1|value2|h1|h2|combined|\r |---|---|---|---|---|\r |Hello|World|753694413698530628|1846988464401551951|-1440138333540407281|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hash_combinefunction","hash_combinefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash_many","Returns a combined hash value of multiple values.",`## Syntax\r \r \`hash_many(\`*s1* \`,\` *s2* [\`,\` *s3* ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *s1*, *s2*, ..., *sN* | scalar | ✓ | The values to hash together.|\r \r ## Returns\r \r The [hash()](hashfunction.md) function is applied to each of the specified scalars. The resulting hashes are combined into a single hash and returned.\r \r > [!WARNING]\r > The function uses the *xxhash64* algorithm to calculate the hash for each scalar, but this may change. We therefore only recommend using this function within a single query where all invocations of the function will use the same algorithm.\r >\r > If you need to persist a combined hash, we recommend using [hash_sha256()](sha256hashfunction.md), [hash_sha1()](sha1-hash-function.md), or [hash_md5()](md5hashfunction.md) and combining the hashes into a single hash with a [bitwise operator](binoperators.md). Note that these functions are more complex to calculate than \`hash()\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShLzClNNVSwVVDySM3JyVfSgYgYgUTC84tyUpS4ahRSK0pS81IUkvNzkzLzUlOAchmJxRnxuYl5lRoQA2DaNAGiXIb7VgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print value1 = "Hello", value2 = "World"\r | extend combined = hash_many(value1, value2)\r \`\`\`\r \r **Output**\r \r |value1|value2|combined|\r |---|---|---|\r |Hello|World|-1440138333540407281|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hash_manyfunction","hash_manyfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash_md5","Returns an MD5 hash value of the input.",`## Syntax\r \r \`hash_md5(\`*source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | scalar | ✓ | The value to be hashed.|\r \r ## Returns\r \r The MD5 hash value of the given scalar, encoded as a hex string (a string\r of characters, each two of which represent a single Hex number between 0\r and 255).\r \r > [!WARNING]\r > The algorithm used by this function (MD5) is guaranteed\r > to not be modified in the future, but is very complex to calculate. Users that\r > need a "lightweight" hash function for the duration of a single query are advised\r > to use the function [hash()](./hashfunction.md) instead.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUeDKMLTNSCzOiM9NMdVQCs8vyklR0tThyjBCiKYklqSWZOamahgZGBnoGhgCkaYmADVybf0+AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print \r h1=hash_md5("World"),\r h2=hash_md5(datetime(2020-01-01))\r \`\`\`\r \r **Output**\r \r |h1|h2|\r |---|---|\r |f5a7924e621e84c9280a9a27e1bcb7f6|786c530672d1f8db31fee25ea8a9390b|\r \r The following example uses the \`hash_md5()\` function to aggregate StormEvents based on State's MD5 hash value.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVQgGiTvnl+aVKNgqJINoDU2FpEqgeGJJqg6E8kgszrDNABLxuSmmGmAhTaAhJfkFCqYQtTAzAJ9n7vdmAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize StormCount = count() by State, StateHash=hash_md5(State)\r | top 5 by StormCount\r \`\`\`\r \r **Output**\r \r |State|StateHash|StormCount|\r |---|---|---|\r |TEXAS|3b00dbe6e07e7485a1c12d36c8e9910a|4701|\r |KANSAS|e1338d0ac8be43846cf9ae967bd02e7f|3166|\r |IOWA|6d4a7c02942f093576149db764d4e2d2|2337|\r |ILLINOIS|8c00d9e0b3fcd55aed5657e42cc40cf1|2022|\r |MISSOURI|2d82f0c963c0763012b2539d469e5008|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/md5hashfunction","md5hashfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash_sha1","Returns a sha1 hash value of the source input.",`## Syntax\r \r \`hash_sha1(\`*source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | scalar | ✓ | The value to be hashed.|\r \r ## Returns\r \r The sha1 hash value of the given scalar, encoded as a hex string (a string\r of characters, each two of which represent a single Hex number between 0\r and 255).\r \r > [!WARNING]\r > The algorithm used by this function (SHA1) is guaranteed\r > to not be modified in the future, but is very complex to calculate. If you\r > need a "lightweight" hash function for the duration of a single query, consider using [hash()](./hashfunction.md).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUeBSAIIMQ9uMxOKM+OKMREMNpfD8opwUJU0diJQRklRKYklqSWZuqoaRgZGBroEhEGlqAgBM1jIESAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print \r h1=hash_sha1("World"),\r h2=hash_sha1(datetime(2020-01-01))\r \`\`\`\r \r **Output**\r \r |h1|h2|\r |---|---|\r |70c07ec18ef89c5309bbb0937f3a6342411e1fdd|e903e533f4d636b4fc0dcf3cf81e7b7f330de776|\r \r The following example uses the \`hash_sha1()\` function to aggregate StormEvents based on State's SHA1 hash value. \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSguzc1NLMqsSlUIBkk455fmlSjYKiSDaA1NhaRKoHhiSaoOhPJILM6wzQAS8cUZiYYaYDFNoCkl+QUKphDFcENSUouTAeqGdyxtAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | summarize StormCount = count() by State, StateHash=hash_sha1(State)\r | top 5 by StormCount desc\r \`\`\`\r \r **Output**\r \r |State|StateHash|StormCount|\r |---|---|---|\r |TEXAS|3128d805194d4e6141766cc846778eeacb12e3ea|4701|\r |KANSAS|ea926e17098148921e472b1a760cd5a8117e84d6|3166|\r |IOWA|cacf86ec119cfd5b574bde5b59604774de3273db|2337|\r |ILLINOIS|03740763b16dae9d799097f51623fe635d8c4852|2022|\r |MISSOURI|26d938907240121b54d9e039473dacc96e712f61|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sha1-hash-function","sha1-hash-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash_sha256","Returns a sha256 hash value of the source input.",`## Syntax\r \r \`hash_sha256(\`*source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | scalar | ✓ | The value to be hashed.|\r \r ## Returns\r \r The sha256 hash value of the given scalar, encoded as a hex string (a string\r of characters, each two of which represent a single Hex number between 0\r and 255).\r \r > [!WARNING]\r > The algorithm used by this function (SHA256) is guaranteed\r > to not be modified in the future, but is very complex to calculate. Users that\r > need a "lightweight" hash function for the duration of a single query are advised\r > to use the function [hash()](./hashfunction.md) instead.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUeBSAIIMQ9uMxOKM+OKMRCNTMw2l8PyinBQlTR2IpBGKZEpiSWpJZm6qhpGBkYGugSEQaWoCAD4yqn1MAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print \r h1=hash_sha256("World"),\r h2=hash_sha256(datetime(2020-01-01))\r \`\`\`\r \r **Output**\r \r |h1|h2|\r |---|---|\r |78ae647dc5544d227130a0682a51e30bc7777fbb6d8a8f17007463a3ecd1d524|ba666752dc1a20eb750b0eb64e780cc4c968bc9fb8813461c1d7e750f302d71d|\r \r The following example uses the \`hash_sha256()\` function to aggregate StormEvents based on State's SHA256 hash value.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSguzc1NLMqsSlUIBkk455fmlSjYKiSDaA1NhaRKoHhiSaoOhPJILM6wzQAS8cUZiUamZhpgUU2gOSX5BQqmEOVwY1JSi5MBsDX5S28AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | summarize StormCount = count() by State, StateHash=hash_sha256(State)\r | top 5 by StormCount desc\r \`\`\`\r \r **Output**\r \r |State|StateHash|StormCount|\r |---|---|---|\r |TEXAS|9087f20f23f91b5a77e8406846117049029e6798ebbd0d38aea68da73a00ca37|4701|\r |KANSAS|c80e328393541a3181b258cdb4da4d00587c5045e8cf3bb6c8fdb7016b69cc2e|3166|\r |IOWA|f85893dca466f779410f65cd904fdc4622de49e119ad4e7c7e4a291ceed1820b|2337|\r |ILLINOIS|ae3eeabfd7eba3d9a4ccbfed6a9b8cff269dc43255906476282e0184cf81b7fd|2022|\r |MISSOURI|d15dfc28abc3ee73b7d1f664a35980167ca96f6f90e034db2a6525c0b8ba61b1|2016|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sha256hashfunction","sha256hashfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hash_xxhash64","Returns an xxhash64 value for the input value.","## Syntax\r\n\r\n`hash_xxhash64(`*source* [`,` *mod*]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *source* | scalar | ✓ | The value to be hashed.|\r\n| *mod* | int | | A modulo value to be applied to the hash result, so that the output value is between `0` and `mod - 1`. This parameter is useful for limiting the range of possible output values or for compressing the output of the hash function into a smaller range.|\r\n\r\n## Returns\r\n\r\nThe hash value of *source*. If *mod* is specified, the function returns the hash value modulo the value of *mod*, meaning that the output of the function will be the remainder of the hash value divided by *mod*. The output will be a value between `0` and `mod - 1`, inclusive.",`### String input\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCzOiK+oAFFmJhpK4flFOSlKmgDB9B3HIwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=hash_xxhash64("World")\r \`\`\`\r \r |result|\r |--|\r |1846988464401551951|\r \r ### String input with mod\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCzOiK+oAFFmJhpK4flFOSlKOgqGBgaaAFCsEusoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=hash_xxhash64("World", 100)\r \`\`\`\r \r |result|\r |--|\r |51|\r \r ### Datetime input\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNSCzOiK+oAFFmJhopiSWpJZm5qRpKRgaGproGhkCkpKkJAN5RmvEyAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=hash_xxhash64(datetime("2015-01-01"))\r \`\`\`\r \r |result|\r |--|\r |1380966698541616202|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hash-xxhash64-function","hash-xxhash64-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"hasprefix","Filters a record set for data with a case-insensitive starting string.",`For best performance, use strings of three characters or more. \`hasprefix\` searches for indexed terms, where a [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.\r \r [!INCLUDE [has-prefix-operator-comparison](../../includes/has-prefix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [hasprefix_cs](hasprefix-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *Column* \`hasprefix\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered.|\r | *Column* | string | ✓ | The column used to filter.|\r | *Expression* | string | ✓ | The expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxuKAoNS2zQkEpJ1EJKFlQlJ+VmlwCkdZBNgoAsFHbIG4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State hasprefix "la"\r | project State, event_count\r \`\`\`\r \r |State|event_count|\r |-----|-----------|\r |LAKE MICHIGAN|182|\r |LAKE HURON|63|\r |LAKE SUPERIOR|34|\r |LAKE ST CLAIR|32|\r |LAKE ERIE|27|\r |LAKE ONTARIO|8|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hasprefix-operator","hasprefix-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"hasprefix_cs","Filters a record set for data with a case-sensitive starting string.",`For best performance, use strings of three characters or more. \`hasprefix_cs\` searches for indexed terms, where a [term](datatypes-string-operators.md#what-is-a-term) is three or more characters. If your term is fewer than three characters, the query scans the values in the column, which is slower than looking up the term in the term index.\r \r [!INCLUDE [has-prefix-operator-comparison](../../includes/has-prefix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *Column* \`hasprefix_cs\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered.|\r | *Column* | string | ✓ | The column used to filter.|\r | *Expression* | string | ✓ | The expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxuKAoNS2zIj65WEEpQAkoDdYBACZmycFbAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State hasprefix_cs "P"\r | count \r \`\`\`\r \r |Count|\r |-----|\r |3|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxuKAoNS2zIj65WEEpQAkoXVCUn5WaXAJRoINsGAAawoaacAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State hasprefix_cs "P"\r | project State, event_count\r \`\`\`\r \r |State|event_count|\r |-----|-----------|\r |PENNSYLVANIA|1687|\r |PUERTO RICO|192|\r |E PACIFIC|10|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hasprefix-cs-operator","hasprefix-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"hassuffix","Filters a record set for data with a case-insensitive ending string. `hassuffix` returns `true` if there is a [term](datatypes-string-operators.md#what-is-a-term) inside the filtered string column ending with the specified string expression.",`[!INCLUDE [hassuffix-operator-comparison](../../includes/hassuffix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [hassuffix_cs](hassuffix-cs-operator.md).\r \r > [!NOTE]\r > Text index cannot be fully utilized for this function, therefore the performance of this function is comparable to [endswith](endswith-operator.md) function, though the semantics is different.\r \r ## Syntax\r \r *T* \`|\` \`where\` *Column* \`hassuffix\` \`(\`*Expression*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*T*|string|The tabular input whose records are to be filtered.|\r |*Column*|string|The column by which to filter.|\r |*Expression*|scalar|The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxuLg0LS2zQkEpXwkoV1CUn5WaXAKR1UE2CQBH0LHRbQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State hassuffix "o"\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |COLORADO|1654|\r |OHIO|1233|\r |GULF OF MEXICO|577|\r |NEW MEXICO|527|\r |IDAHO|247|\r |PUERTO RICO|192|\r |LAKE ONTARIO|8|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hassuffix-operator","hassuffix-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"hassuffix_cs","Filters a record set for data with a case-insensitive ending string. `hassuffix_cs` returns `true` if there is a [term](datatypes-string-operators.md#what-is-a-term) inside the filtered string column ending with the specified string expression.",`[!INCLUDE [hassuffix-operator-comparison](../../includes/hassuffix-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r > [!NOTE]\r > Text index cannot be fully utilized for this function, therefore the performance of this function is comparable to [endswith_cs](endswith-cs-operator.md) function, though the semantics is different.\r \r ## Syntax\r \r *T* \`|\` \`where\` *column* \`hassuffix_cs\` \`(\` *expression* \`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*T* | string | ✓ | The tabular input whose records are to be filtered.|\r |*column* | string | ✓ | The column by which to filter.|\r |*expression* | scalar | ✓ | The scalar or literal expression for which to search.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPISOxuLg0LS2zIj65WEHJMVgJLo9kiIKdgpGBgQFQqqAoPys1uQSiWQdZDQCa6WLOjAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State hassuffix_cs "AS"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |TEXAS|4701|\r |KANSAS|3166|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hassuffix-cs-operator","hassuffix-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hll","The `hll()` function is a way to estimate the number of unique values in a set of values. It does this by calculating intermediate results for aggregation within the [summarize](summarizeoperator.md) operator for a group of data using the [`dcount`](dcount-aggfunction.md) function.",`Read about the [underlying algorithm (*H*yper*L*og*L*og) and the estimation accuracy](#estimation-accuracy).\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r > [!TIP]\r >\r >- Use the [hll_merge](hllmergefunction.md) function to merge the results of multiple \`hll()\` functions.\r >- Use the [dcount_hll](dcount-hllfunction.md) function to calculate the number of distinct values from the output of the \`hll()\` or \`hll_merge\` functions.\r \r > [!IMPORTANT]\r >The results of hll(), hll_if(), and hll_merge() can be stored and later retrieved. For example, you may want to create a daily unique users summary, which can then be used to calculate weekly counts.\r > However, the precise binary representation of these results may change over time. There's no guarantee that these functions will produce identical results for identical inputs, and therefore we don't advise relying on them.\r \r ## Syntax\r \r \`hll\` \`(\`*expr* [\`,\` *accuracy*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *accuracy* | int | | The value that controls the balance between speed and accuracy. If unspecified, the default value is \`1\`. For supported values, see [Estimation accuracy](#estimation-accuracy). |\r \r ## Returns\r \r Returns the intermediate results of distinct count of *expr* across the group.`,`In the following example, the \`hll()\` function is used to estimate the number of unique values of the \`DamageProperty\` column within each 10-minute time bin of the \`StartTime\` column.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVcjIydFwScxNTE8NKMovSC0qqdRUSKpUSMrM0wguSSwqCcnMTdUxNMjVBACCSG7CQQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize hll(DamageProperty) by bin(StartTime,10m)\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | StartTime | hll_DamageProperty |\r |--|--|\r | 2007-01-01T00:20:00Z | [[1024,14],["3803688792395291579"],[]] |\r | 2007-01-01T01:00:00Z | [[1024,14],["7755241107725382121","-5665157283053373866","3803688792395291579","-1003235211361077779"],[]] |\r | 2007-01-01T02:00:00Z | [[1024,14],["-1003235211361077779","-5665157283053373866","7755241107725382121"],[]] |\r | 2007-01-01T02:20:00Z | [[1024,14],["7755241107725382121"],[]] |\r | 2007-01-01T03:30:00Z | [[1024,14],["3803688792395291579"],[]] |\r | 2007-01-01T03:40:00Z | [[1024,14],["-5665157283053373866"],[]] |\r | 2007-01-01T04:30:00Z | [[1024,14],["3803688792395291579"],[]] |\r | 2007-01-01T05:30:00Z | [[1024,14],["3803688792395291579"],[]] |\r | 2007-01-01T06:30:00Z | [[1024,14],["1589522558235929902"],[]] |\r \r ## Estimation accuracy\r \r [!INCLUDE [data-explorer-estimation-accuracy](../../includes/data-explorer-estimation-accuracy.md)]`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hll-aggfunction","hll-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hll_if","Calculates the intermediate results of [`dcount`](dcount-aggfunction.md) in records for which the *predicate* evaluates to `true`.","Read about the [underlying algorithm (*H*yper*L*og*L*og) and the estimation accuracy](dcount-aggfunction.md#estimation-accuracy).\r\n\r\n[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r\n\r\n> [!IMPORTANT]\r\n> The results of hll(), hll_if(), and hll_merge() can be stored and later retrieved. For example, you may want to create a daily unique users summary, which can then be used to calculate weekly counts.\r\n> However, the precise binary representation of these results may change over time. There's no guarantee that these functions will produce identical results for identical inputs, and therefore we don't advise relying on them.\r\n\r\n## Syntax\r\n\r\n`hll_if` `(`*expr*, *predicate* [`,` *accuracy*]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *expr* | string | ✓ | The expression used for the aggregation calculation. |\r\n| *predicate* | string | ✓ | The *Expr* used to filter records to add to the intermediate result of `dcount`. |\r\n| *accuracy* | int | | The value that controls the balance between speed and accuracy. If unspecified, the default value is `1`. For supported values, see [Estimation accuracy](#estimation-accuracy). |\r\n\r\n## Returns\r\n\r\nReturns the intermediate results of distinct count of *Expr* for which *Predicate* evaluates to `true`.\r\n\r\n> [!TIP]\r\n>\r\n> - You can use the aggregation function [`hll_merge`](hll-merge-aggfunction.md) to merge more than one `hll` intermediate result. Only works with `hll` output only.\r\n> - You can use [`dcount_hll`](dcount-hllfunction.md), to calculate the distinct count from `hll`,`hll_merge`, or `hll_if` aggregation functions.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2OQQrCMBBF955imFUCuUIXXSiIYBcpuCw1ndBI2ylJqlQ8vDEBd/Ph/fdHR/bz8UlLDIcPvEbyBDr2kcAtIPDc3GpUgJf6qmuNMjFhm+feuzfBOE2dnZgHqPLtrNC8eUMKsrHdV4KqAjz9IJRw34s7WVbPDzKxZAWlFxqb0fJPsg6GtyV2SS7+Y/IL9SJmoLMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State in ("IOWA", "KANSAS")\r | summarize hll_flood = hll_if(Source, EventType == "Flood") by State\r | project State, SourcesOfFloodEvents = dcount_hll(hll_flood)\r \`\`\`\r \r |State|SourcesOfFloodEvents|\r |---|---|\r |KANSAS|11|\r |IOWA|7|\r \r ## Estimation accuracy\r \r | Accuracy | Speed | Error (%) |\r |---|---|---|---|\r | 0 | Fastest | 1.6 |\r | 1 | Balanced | 0.8 |\r | 2 | Slow | 0.4 |\r | 3 | Slow | 0.28 |\r | 4 | Slowest | 0.2 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hll-if-aggregation-function","hll-if-aggregation-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hll_merge","Merges HLL results. This is the scalar version of the aggregate version [`hll_merge()`](hll-merge-aggfunction.md).",`Read about the [underlying algorithm (*H*yper*L*og*L*og) and estimation accuracy](#estimation-accuracy).\r \r > [!IMPORTANT]\r > The results of hll(), hll_if(), and hll_merge() can be stored and later retrieved. For example, you may want to create a daily unique users summary, which can then be used to calculate weekly counts.\r > However, the precise binary representation of these results may change over time. There's no guarantee that these functions will produce identical results for identical inputs, and therefore we don't advise relying on them.\r \r ## Syntax\r \r \`hll_merge(\` *hll*\`,\` *hll2*\`,\` [ *hll3*\`,\` ... ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*hll*, *hll2*, ... |string|✓|The column names containing HLL values to merge. The function expects between 2-64 arguments.|\r \r ## Returns\r \r Returns one HLL value. The value is the result of merging the columns *hll*, *hll2*, ... *hllN*.`,`This example shows the value of the merged columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WMQQ6DMAwE75X4wx6J6KE8gLdEiLi0iCTIGCmp+vg6gUtP1uzsmscwExKeHD16SET/wC60KTS3LygJBYeMQUudyhLuh/cjvz+E17rapE5vm8y9cr44m9LdOC40CTzxTO5UtkJbx9fmr+umeASx5ck5Mz9Hg5B+pwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1 \r | extend y = x + 10\r | summarize hll_x = hll(x), hll_y = hll(y)\r | project merged = hll_merge(hll_x, hll_y)\r | project dcount_hll(merged)\r \`\`\`\r \r **Output**\r \r |\`dcount_hll_merged\`|\r |---|\r |20|\r \r ## Estimation accuracy\r \r [!INCLUDE [data-explorer-estimation-accuracy](../../includes/data-explorer-estimation-accuracy.md)]`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hllmergefunction","hllmergefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"hourofday","Returns the integer number representing the hour number of the given date.",`## Syntax\r \r \`hourofday(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*date*|datetime|✓|The date for which to return the hour number.|\r \r ## Returns\r \r An integer between 0-23 representing the hour number of the day for *date*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjILy2yBRH5aSmJlRopiSWpJZm5qRpGBoamuoZGuoYmCoYWVqYmmpoAPkfViTAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print hour=hourofday(datetime(2015-12-14 18:54))\r \`\`\`\r \r |hour|\r |--|\r |18|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/hourofdayfunction","hourofdayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"http_request","The `http_request` plugin sends an HTTP GET request and converts the response into a table.",`## Prerequisites\r \r * Run \`.enable plugin http_request\` to [enable the plugin](../management/enable-plugin.md)\r * Set the URI to access as an allowed destination for \`webapi\` in the [Callout policy](../management/calloutpolicy.md)\r \r ## Syntax\r \r \`evaluate\` \`http_request\` \`(\` *Uri* [\`,\` *RequestHeaders* [\`,\` *Options*]] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Uri* | string | ✓ | The destination URI for the HTTP or HTTPS request. |\r | *RequestHeaders* | dynamic | | A property bag containing [HTTP headers](#headers) to send with the request. |\r | *Options* | dynamic | | A property bag containing additional properties of the request. |\r \r > [!NOTE]\r >\r > * To specify an optional parameter that follows an optional parameter, make sure to provide a value for the preceding optional parameter. For more information, see [Working with optional parameters](syntax-conventions.md#working-with-optional-parameters).\r > * If you're using authentication, use the HTTPS protocol. Attempts to use HTTP with authentication results in an error.\r \r ## Authentication and authorization\r \r To authenticate, use the HTTP standard \`Authorization\` header or any custom header supported by the web service.\r \r > [!NOTE]\r > If the query includes confidential information, make sure that the relevant parts of the query text are obfuscated so that they'll be omitted from any tracing. For more information, see [obfuscated string literals](./scalar-data-types/string.md#obfuscated-string-literals).\r \r ## Returns\r \r The plugin returns a table that has a single record with the following dynamic columns:\r \r * *ResponseHeaders*: A property bag with the response header.\r * *ResponseBody*: The response body parsed as a value of type \`dynamic\`.\r \r If the HTTP response indicates (via the \`Content-Type\` response header) that the media type is \`application/json\`,\r the response body is automatically parsed as-if it's a JSON object. Otherwise, it's returned as-is.\r \r ## Headers\r \r The *RequestHeaders* argument can be used to add custom headers\r to the outgoing HTTP request. In addition to the standard HTTP request headers\r and the user-provided custom headers, the plugin also adds the following\r custom headers:\r \r | Name | Description |\r |--|--|\r | \`x-ms-client-request-id\` | A correlation ID that identifies the request. Multiple invocations of the plugin in the same query will all have the same ID. |\r | \`x-ms-readonly\` | A flag indicating that the processor of this request shouldn't make any persistent changes. |\r \r > [!WARNING]\r > The \`x-ms-readonly\` flag is set for every HTTP request sent by the plugin\r > that was triggered by a query and not a management command. Web services should\r > treat any requests with this flag as one that does not make internal\r > state changes, otherwise they should refuse the request. This protects users from being\r > sent seemingly-innocent queries that end up making unwanted changes by using\r > a Kusto query as the launchpad for such attacks.`,`The following example retrieves Azure retails prices for Azure Purview in west Europe:\r \r \`\`\`\r let Uri = "https://prices.azure.com/api/retail/prices?$filter=serviceName eq 'Azure Purview' and location eq 'EU West'";\r evaluate http_request(Uri)\r | project ResponseBody.Items\r | mv-expand ResponseBody_Items\r | evaluate bag_unpack(ResponseBody_Items)\r \`\`\`\r \r **Output**\r \r | armRegionName | armSkuName | currencyCode | effectiveStartDate | isPrimaryMeterRegion | location | meterId | meterName | productId | productName | retailPrice | serviceFamily | serviceId | serviceName | skuId | skuName | tierMinimumUnits | type | unitOfMeasure | unitPrice |\r |---------------|------------------------------------------------|--------------|----------------------|----------------------|----------|--------------------------------------|------------------------------------------------------|--------------|-----------------------------------------------------|-------------|---------------|--------------|---------------|-------------------|------------------------------------------|------------------|-------------|---------------|-----------|\r | westeurope | Data Insights | USD | 2022-06-01T00:00:00Z | false | EU West | 8ce915f7-20db-564d-8cc3-5702a7c952ab | Data Insights Report Consumption | DZH318Z08M22 | Azure Purview Data Map | 0.21 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M22/006C | Catalog Insights | 0 | Consumption | 1 API Calls | 0.21 |\r | westeurope | Data Map Enrichment - Data Insights Generation | USD | 2022-06-01T00:00:00Z | false | EU West | 7ce2db1d-59a0-5193-8a57-0431a10622b6 | Data Map Enrichment - Data Insights Generation vCore | DZH318Z08M22 | Azure Purview Data Map | 0.82 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M22/005C | Data Map Enrichment - Insight Generation | 0 | Consumption | 1 Hour | 0.82 |\r | westeurope | | USD | 2021-09-28T00:00:00Z | false | EU West | 053e2dcb-82c0-5e50-86cd-1f1c8d803705 | Power BI vCore | DZH318Z08M23 | Azure Purview Scanning Ingestion and Classification | 0 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M23/0005 | Power BI | 0 | Consumption | 1 Hour | 0 |\r | westeurope | | USD | 2021-09-28T00:00:00Z | false | EU West | a7f57f26-5f31-51e5-a5ed-ffc2b0da37b9 | Resource Set vCore | DZH318Z08M22 | Azure Purview Data Map | 0.21 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M22/000X | Resource Set | 0 | Consumption | 1 Hour | 0.21 |\r | westeurope | | USD | 2021-09-28T00:00:00Z | false | EU West | 5d157295-441c-5ea7-ba7c-5083026dc456 | SQL Server vCore | DZH318Z08M23 | Azure Purview Scanning Ingestion and Classification | 0 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M23/000F | SQL Server | 0 | Consumption | 1 Hour | 0 |\r | westeurope | | USD | 2021-09-28T00:00:00Z | false | EU West | 0745df0d-ce4f-52db-ac31-ac574d4dcfe5 | Standard Capacity Unit | DZH318Z08M22 | Azure Purview Data Map | 0.411 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M22/0002 | Standard | 0 | Consumption | 1 Hour | 0.411 |\r | westeurope | | USD | 2021-09-28T00:00:00Z | false | EU West | 811e3118-5380-5ee8-a5d9-01d48d0a0627 | Standard vCore | DZH318Z08M23 | Azure Purview Scanning Ingestion and Classification | 0.63 | Analytics | DZH318Q66D0F | Azure Purview | DZH318Z08M23/0009 | Standard | 0 | Consumption | 1 Hour | 0.63 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/http-request-plugin","http-request-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"http_request_post","The `http_request_post` plugin sends an HTTP POST request and converts the response into a table.",`## Prerequisites\r \r * Run \`.enable plugin http_request_post\` to [enable the plugin](../management/enable-plugin.md)\r * Set the URI to access as an allowed destination for \`webapi\` in the [Callout policy](../management/calloutpolicy.md)\r \r ## Syntax\r \r \`evaluate\` \`http_request_post\` \`(\` *Uri* [\`,\` *RequestHeaders* [\`,\` *Options* [\`,\` *Content*]]] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Uri* | string | ✓ | The destination URI for the HTTP or HTTPS request. |\r | *RequestHeaders* | dynamic | | A property bag containing [HTTP headers](#headers) to send with the request. |\r | *Options* | dynamic | | A property bag containing additional properties of the request. |\r | *Content* | string | | The body content to send with the request. The content is encoded in \`UTF-8\` and the media type for the \`Content-Type\` attribute is \`application/json\`. |\r \r > [!NOTE]\r >\r > * To specify an optional parameter that follows an optional parameter, make sure to provide a value for the preceding optional parameter. For more information, see [Working with optional parameters](syntax-conventions.md#working-with-optional-parameters).\r > * If you're using authentication, use the HTTPS protocol. Attempts to use HTTP with authentication results in an error.\r \r ## Authentication and authorization\r \r To authenticate, use the HTTP standard \`Authorization\` header or any custom header supported by the web service.\r \r > [!NOTE]\r > If the query includes confidential information, make sure that the relevant parts of the query text are obfuscated so that they'll be omitted from any tracing. For more information, see [obfuscated string literals](./scalar-data-types/string.md#obfuscated-string-literals).\r \r ## Returns\r \r The plugin returns a table that has a single record with the following dynamic columns:\r \r * *ResponseHeaders*: A property bag with the response header.\r * *ResponseBody*: The response body parsed as a value of type \`dynamic\`.\r \r If the HTTP response indicates (via the \`Content-Type\` response header) that the media type is \`application/json\`,\r the response body is automatically parsed as-if it's a JSON object. Otherwise, it's returned as-is.\r \r ## Headers\r \r The *RequestHeaders* argument can be used to add custom headers\r to the outgoing HTTP request. In addition to the standard HTTP request headers\r and the user-provided custom headers, the plugin also adds the following\r custom headers:\r \r | Name | Description |\r |--|--|\r | \`x-ms-client-request-id\` | A correlation ID that identifies the request. Multiple invocations of the plugin in the same query will all have the same ID. |\r | \`x-ms-readonly\` | A flag indicating that the processor of this request shouldn't make any persistent changes. |\r \r > [!WARNING]\r > The \`x-ms-readonly\` flag is set for every HTTP request sent by the plugin\r > that was triggered by a query and not a management command. Web services should\r > treat any requests with this flag as one that does not make internal\r > state changes, otherwise they should refuse the request. This protects users from being\r > sent seemingly-innocent queries that end up making unwanted changes by using\r > a Kusto query as the launchpad for such attacks.`,"The following example is for a hypothetical HTTPS web service that accepts additional request headers and must be authenticated to using Azure AD:\r\n\r\n```\r\nlet uri='https://example.com/node/js/on/eniac';\r\nlet headers=dynamic({'x-ms-correlation-vector':'abc.0.1.0', 'authorization':'bearer ...Azure-AD-bearer-token-for-target-endpoint...'});\r\nevaluate http_request_post(uri, headers)\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/http-request-post-plugin","http-request-post-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"iff","Returns the value of *then* if *if* evaluates to `true`,\r\nor the value of *else* otherwise.","> The `iff()` and `iif()` functions are equivalent\r\n\r\n## Syntax\r\n\r\n`iff(`*if*`,` *then*`,` *else*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n|*if*| string | ✓ | An expression that evaluates to a boolean value.|\r\n|*then*| scalar | ✓ | An expression that gets evaluated and its value returned from the function if *if* evaluates to `true`.|\r\n|*else*| scalar | ✓ | An expression that gets evaluated and its value returned from the function if *if* evaluates to `false`.|\r\n\r\n## Returns\r\n\r\nThis function returns the value of *then* if *if* evaluates to `true`,\r\nor the value of *else* otherwise.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRSK0oSc1LUQhKzMxTsFXITEvT0ADLhVQWpCoAxTSUPFITyyrBCpR0FJTcchKLMxTccvLzUyBcEENTE8gEG5EK0guS8MsvUShCiGgCrSooys9KTS5RCC5JLEnVUQBb45kCZYDs0wHbAgAA0TJCoAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | extend Rain = iff((EventType in ("Heavy Rain", "Flash Flood", "Flood")), "Rain event", "Not rain event")\r | project State, EventId, EventType, Rain\r \`\`\`\r \r **Output**\r \r The following table shows only the first 5 rows.\r \r |State|EventId|EventType|Rain|\r |--|--|--|--|\r |ATLANTIC SOUTH| 61032 |Waterspout |Not rain event\r |FLORIDA| 60904 |Heavy Rain |Rain event\r |FLORIDA| 60913 |Tornado |Not rain event\r |GEORGIA| 64588 |Thunderstorm Wind |Not rain event\r |MISSISSIPPI| 68796 |Thunderstorm Wind |Not rain event\r |...|...|...|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ifffunction","ifffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"in","Filters a record set for data with a case-sensitive string.",`[!INCLUDE [in-operator-comparison](../../includes/in-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`in\` \`(\`*expression*\`,\` ... \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar or tabular | ✓ | An expression that specifies the values for which to search. the values for which to search. Each expression can be a [scalar](scalar-data-types/index.md) value or a [tabular expression](tabularexpressionstatements.md) that produces a set of values. If a tabular expression has multiple columns, the first column is used. The search will consider up to 1,000,000 distinct values.|\r \r > [!NOTE]\r > An inline tabular expression must be enclosed with double parentheses. See [example](#tabular-expression).\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`### List of scalars\r \r The following query shows how to use \`in\` with a list of scalar values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVcjMU9BQcvPxD/J0cVTSUVByd/UPcvcEM/1cwxUi/YO8lTRBmpLzS/NKAJNAy9pJAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State in ("FLORIDA", "GEORGIA", "NEW YORK") \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |4775| \r \r ### Dynamic array\r \r The following query shows how to use \`in\` with a dynamic array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLkksSS1WsFVIqcxLzM1M1ohWd/PxD/J0cVTXUVB3DPFx9AvxdFYI9g8N8QCJuLv6B7l7OqrHalpzBZfkF+W6lqXmlRQrcNUolGekFqUqBIMMVMjMU9CAGK0JlEnOL80rAQDj7kmUbgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let states = dynamic(['FLORIDA', 'ATLANTIC SOUTH', 'GEORGIA']);\r StormEvents \r | where State in (states)\r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |3218|\r \r ### Tabular expression\r \r The following query shows how to use \`in\` with a tabular expression.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEIyS+IN40PLkksSS1WsFXg5VIAguCS/KJc17LUvJJiiECNQnFpbm5iUWZVqkJyfmleiYamQlKlAlgbTEVJfoGCKUgUrCDeGmgWkjlAXo1CeUZqUSpEl0JmnoIGsuWaYBVgvQBWFNNCmAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Top_5_States = \r StormEvents\r | summarize count() by State\r | top 5 by count_; \r StormEvents \r | where State in (Top_5_States) \r | count\r \`\`\`\r \r The same query can be written with an inline tabular expression statement. Notice that an inline tabular expression must be enclosed with double parentheses.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoz0gtSlUILkksSVXIzFPQ0ODlUgCCYIQyiECNQnFpbm5iUWZVqkJyfmleiYamQlIlRCNMRUl+gYIpSBSsIB4irKkJtgcsBAD4wHSifQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State in ((\r StormEvents\r | summarize count() by State\r | top 5 by count_\r )) \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |14242| \r \r ### Top with other example\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PPQuDMBCG9/yKFxcVXJ3EpdCt0EF3sfaqKZpIPEst/vhGpVZqs+Tg7nk/amKcZFmxkqrMDkOWcM6EGI39jMxr+SIvYW2a44MUdwL2jej6psmN3aFeYZoPLFroXrG8eTORDq2Vi+GuLq6Py4DZx49EbQOkus3CxXni/+QZwbpFOIE7wxGt0XcqeNGMIPYCYgQ9mdQVn37SBlxmqeBtE/jBchTAOXNFxvHFtrCdvN8M30ZvE2wmM1ABAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Lightning_By_State = materialize(StormEvents\r | summarize lightning_events = countif(EventType == 'Lightning') by State);\r let Top_5_States = Lightning_By_State | top 5 by lightning_events | project State; \r Lightning_By_State\r | extend State = iff(State in (Top_5_States), State, "Other")\r | summarize sum(lightning_events) by State \r \`\`\`\r \r **Output**\r \r | State | sum_lightning_events |\r |-----------|----------------------|\r | ALABAMA | 29 |\r | WISCONSIN | 31 |\r | TEXAS | 55 |\r | FLORIDA | 85 |\r | GEORGIA | 106 |\r | Other | 415 |\r \r ### Use a static list returned by a function\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVcjMU9DwzCsBChSXZOalgwWLNTQ1QeqS80vzSgAtnqHrPAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State in (InterestingStates()) \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |4775| \r \r The function definition.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA9MrzsgvV0grzUsuyczPU/DMK0ktSi0uycxLDy5JLEktBgBVrDk7IAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r .show function InterestingStates\r \`\`\`\r \r **Output**\r \r |Name|Parameters|Body|Folder|DocString|\r |---|---|---|---|---|\r |InterestingStates|()|{ dynamic(["WASHINGTON", "FLORIDA", "GEORGIA", "NEW YORK"]) }`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/in-cs-operator","in-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"in~","Filters a record set for data with a case-insensitive string.",`[!INCLUDE [in-operator-comparison](../../includes/in-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [in](in-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`in~\` \`(\`*expression*\`,\` ... \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar or tabular | ✓ | An expression that specifies the values for which to search. Each expression can be a [scalar](scalar-data-types/index.md) value or a [tabular expression](tabularexpressionstatements.md) that produces a set of values. If a tabular expression has multiple columns, the first column is used. The search will consider up to 1,000,000 distinct values.|\r \r > [!NOTE]\r > An inline tabular expression must be enclosed with double parentheses. See [example](#tabular-expression).\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`### List of scalars\r \r The following query shows how to use \`in~\` with a comma-separated list of scalar values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVcjMq1PQUHLz8Q/ydHFU0lFQSk/NL0rPTAQx/VzDFSL9g7yVNEG6kvNL80oAl8ORJUoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State in~ ("FLORIDA", "georgia", "NEW YORK") \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |4775| \r \r ### Dynamic array\r \r The following query shows how to use \`in~\` with a dynamic array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVcjMq1PQSKnMS8zNTNaIVnLz8Q/ydHFU0lFQSk/NL0rPTAQx/VzDFSL9g7yVYjU1QQYk55fmlQAAcLCM41UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State in~ (dynamic(["FLORIDA", "georgia", "NEW YORK"])) \r | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |4775| \r \r The same query can also be written with a [let statement](letstatement.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLkksSS1WsFVIqcxLzM1M1ohWcvPxD/J0cVTSUVBKT80vSs9MBDH9XMMVIv2DvJViNa25gkvyi3Jdy1LzSooVuGoUyjNSi1IVgkFGKWQkFscn5lUqaEBM1gRKF5fm5iYWZValKiTnl+aVaGgqJFVCVAMACG2BiYIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let states = dynamic(["FLORIDA", "georgia", "NEW YORK"]);\r StormEvents \r | where State has_any (states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |4775|\r \r ### Tabular expression\r \r The following query shows how to use \`in~\` with an inline tabular expression. Notice that an inline tabular expression must be enclosed with double parentheses.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSjPSC1KVQguSSxJVcjMq1PQ0AjILyjNSSzJzM9zSSxJVIApQQgr2CmYGoABULKgKD8rNbkEYoKmJtDE4tLc3MSizKpUheT80rwSDU2FpEqINACuenXZewAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | where State in~ ((PopulationData | where Population > 5000000 | project State))\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |--|--|\r |TEXAS |4701|\r |ILLINOIS |2022|\r |MISSOURI |2016|\r |GEORGIA |1983|\r |MINNESOTA |1881|\r |...|...|\r \r The same query can also be written with a [let statement](letstatement.md). Notice that the double parentheses as provided in the last example aren't necessary in this case.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NsQ6CQBBEe75iSuhorIxW0pvwAWYlGz1yd0v29jAaw7eDEBOmnHkv49ngSR98S0bGCSdcZciezEm8kBG+eD1ZeVfjjEO9ZhkHlZ47Q/vTj0VroqEZOVpC8VfXDS5OKPdf1QKkHAKp+zA6ydHKCvf3xs9WLYRGmgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let large_states = PopulationData | where Population > 5000000 | project State;\r StormEvents \r | where State in~ (large_states)\r | summarize count() by State\r \`\`\`\r \r **Output**\r \r |State|count_|\r |--|--|\r |TEXAS |4701|\r |ILLINOIS |2022|\r |MISSOURI |2016|\r |GEORGIA |1983|\r |MINNESOTA |1881|\r |...|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/inoperator","inoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"indexof","Reports the zero-based index of the first occurrence of a specified string within the input string.",`For more information, see [\`indexof_regex()\`](indexofregexfunction.md).\r \r ## Syntax\r \r \`indexof(\`*string*\`,\`*match*\`[,\`*start*\`[,\`*length*\`[,\`*occurrence*\`]]])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*string*| string | ✓ | The source string to search.| \r |*match*| string | ✓ | The string for which to search.|\r |*start*| int | | The search start position. A negative value will offset the starting search position from the end of the *string* by this many steps: \`abs(\`*start*\`)\`. |\r |*length*| int | | The number of character positions to examine. A value of -1 means unlimited length.|\r |*occurrence*| int | | The number of the occurrence. The default is 1.|\r \r > [!NOTE]\r > If *string* or *match* isn't of type \`string\`, the function forcibly casts their value to \`string\`.\r \r ## Returns\r \r The zero-based index position of *match*.\r \r * Returns -1 if *match* isn't found in *string*.\r * Returns \`null\` if:\r * *start* is less than 0.\r * *occurrence* is less than 0.\r * *length* is less than -1.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42STW6DMBCF9znFyJsWyVEKhCRd9DDGjIlVYqOxadLbd4LdqpUoioXFxu97b35Gsi5uwHa3Et7Aug5v3jwL1eoOTS+k4L8ogM9uB4P379MIxk+u47f8jVOEEJnRb0DeKdX/FFnKfbGEIQyoSJ+xA1KuR8isepVVzayk5AyKYgBD/pIkUEpo53B+DKBMRIIK9FlRkBA8mGkYvoNo5Z4itJgSZfP9inmdC/lrnky81hMROo3gTXbIyGYFuW2KucUOexXtByZoep7lh1/ysqr3zeEom9TUdFger1yapRBhVKQuyIkCXJHutZG27fDJ1YbInY4+Dy6AmGkCFI9DNCLbHVfSVnJbFo+uxGkB9MODBLyPq3yRUBVrmzZvR6a+Pkjd8q0zNZ6Rr6VucUpgAzgflzbyC/vZ0L4mAwAA" target="_blank">Run the query</a>\r \r \`\`\`\r print\r idx1 = indexof("abcdefg","cde") // lookup found in input string\r , idx2 = indexof("abcdefg","cde",1,4) // lookup found in researched range \r , idx3 = indexof("abcdefg","cde",1,2) // search starts from index 1, but stops after 2 chars, so full lookup can't be found\r , idx4 = indexof("abcdefg","cde",3,4) // search starts after occurrence of lookup\r , idx5 = indexof("abcdefg","cde",-5) // negative start index\r , idx6 = indexof(1234567,5,1,4) // two first parameters were forcibly casted to strings "12345" and "5"\r , idx7 = indexof("abcdefg","cde",2,-1) // lookup found in input string\r , idx8 = indexof("abcdefgabcdefg", "cde", 1, 10, 2) // lookup found in input range\r , idx9 = indexof("abcdefgabcdefg", "cde", 1, -1, 3) // the third occurrence of lookup is not in researched range\r \`\`\`\r \r **Output**\r \r |idx1|idx2|idx3|idx4|idx5|idx6|idx7|idx8|idx9|\r |----|----|----|----|----|----|----|----|----|\r |2 |2 |-1 |-1 | 2 |4 |2 |9 |-1 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/indexoffunction","indexoffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"indexof_regex","Returns the zero-based index of the first occurrence of a specified lookup regular expression within the input string.",`See [\`indexof()\`](indexoffunction.md).\r \r ## Syntax\r \r \`indexof_regex(\`*string*\`,\`*match*\`[,\`*start*\`[,\`*length*\`[,\`*occurrence*\`]]])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*string*| string | ✓ | The source string to search.| \r |*match*| string | ✓ | The regular expression lookup string.|\r |*start*| int | | The search start position. A negative value will offset the starting search position from the end of the *string* by this many steps: \`abs(\`*start*\`)\`. |\r |*length*| int | | The number of character positions to examine. A value of -1 means unlimited length.|\r |*occurrence*| int | | The number of the occurrence. The default is 1.|\r \r ## Returns\r \r The zero-based index position of *match*.\r \r * Returns -1 if *match* isn't found in *string*.\r * Returns \`null\` if:\r * *start* is less than 0.\r * *occurrence* is less than 0.\r * *length* is less than -1.\r \r > [!NOTE]\r >\r \r * Overlapping matches lookup aren't supported.\r * Regular expression strings may contain characters that require either escaping or using @'' string-literals.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42Qy07DMBBF93zFVTalkqGkwIIFEj/AN1QTe+JYGDvyo8qCj2dSatjwsmd3Nef4ek4ulAvIcWbp8QgXDC9xPCS2vFx2NGiZTuGpo2vdbRV2O/gYX+qMMdZgZEFmrgW5CMs21v4nluHRfvIUbhQeFPYC/i/59s9XKvQKV/0XtkyceJMRIjLrKOyodU2Jg+ZVI7kElPSERMFyU919p5JLZxV9FGgqMT1T0RNnmBg2BfHIydOMHDFW71s9TWs48Llns93/XuyNhm51bU+VXDiSd0b+hlI5nNZAydZXDuUd3NbxhNUBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print\r idx1 = indexof_regex("abcabc", @"a.c"), // lookup found in input string\r idx2 = indexof_regex("abcabcdefg", @"a.c", 0, 9, 2), // lookup found in input string\r idx3 = indexof_regex("abcabc", @"a.c", 1, -1, 2), // there's no second occurrence in the search range\r idx4 = indexof_regex("ababaa", @"a.a", 0, -1, 2), // Matches don't overlap so full lookup can't be found \r idx5 = indexof_regex("abcabc", @"a|ab", -1) // invalid start argument\r \`\`\`\r \r **Output**\r \r |idx1|idx2|idx3|idx4|idx5|\r |----|----|----|----|----|\r |0 |3 |-1 |-1 | |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/indexofregexfunction","indexofregexfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"infer_storage_schema","This plugin infers schema of external data, and returns it as CSL schema string. The string can be used when [creating external tables](../management/external-tables-azurestorage-azuredatalake.md). The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",`## Authentication and authorization\r \r In the [properties of the request](#properties-of-the-request), you specify storage connection strings to access. Each storage connection string specifies the authorization method to use for access to the storage. Depending on the authorization method, the principal may need to be granted permissions on the external storage to perform the schema inference.\r \r The following table lists the supported authentication methods and any required permissions by storage type.\r \r |Authentication method|Azure Blob Storage / Data Lake Storage Gen2|Data Lake Storage Gen1|\r |--|--|--|\r |[Impersonation](../api/connection-strings/storage-authentication-methods.md#impersonation)|Storage Blob Data Reader|Reader|\r |[Shared Access (SAS) token](../api/connection-strings/storage-authentication-methods.md#shared-access-sas-token)|List + Read|This authentication method isn't supported in Gen1.|\r |[Azure AD access token](../api/connection-strings/storage-authentication-methods.md#azure-ad-access-token)||\r |[Storage account access key](../api/connection-strings/storage-authentication-methods.md#storage-account-access-key)||This authentication method isn't supported in Gen1.|\r \r ## Syntax\r \r \`evaluate\` \`infer_storage_schema(\` *Options* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Options* | dynamic | ✓ |A property bag specifying the [properties of the request](#properties-of-the-request).|\r \r ### Properties of the request\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*StorageContainers*| dynamic |✓|An array of [storage connection strings](../api/connection-strings/storage-connection-strings.md) that represent prefix URI for stored data artifacts.|\r |*DataFormat*|string|✓|One of the supported [data formats](../../ingestion-supported-formats.md).|\r |*FileExtension*|string||If specified, the function will only scan files ending with this file extension. Specifying the extension may speed up the process or eliminate data reading issues.|\r |*FileNamePrefix*|string||If specified, the function will only scan files starting with this prefix. Specifying the prefix may speed up the process.|\r |*Mode*|string||The schema inference strategy. A value of: \`any\`, \`last\`, \`all\`. The function infers the data schema from the first found file, from the last written file, or from all files respectively. The default value is \`last\`.|\r \r ## Returns\r \r The \`infer_storage_schema\` plugin returns a single result table containing a single row/column holding CSL schema string.\r \r > [!NOTE]\r >\r > * Storage container URI secret keys must have the permissions for *List* in addition to *Read*.\r > * Schema inference strategy 'all' is a very "expensive" operation, as it implies reading from *all* artifacts found and merging their schema.\r > * Some returned types may not be the actual ones as a result of wrong type guess (or, as a result of schema merge process). This is why you should review the result carefully before creating an external table.`,`\`\`\`\r let options = dynamic({\r 'StorageContainers': [\r h@'https://storageaccount.blob.core.windows.net/MobileEvents;secretKey'\r ],\r 'FileExtension': '.parquet',\r 'FileNamePrefix': 'part-',\r 'DataFormat': 'parquet'\r });\r evaluate infer_storage_schema(options)\r \`\`\`\r \r **Output**\r \r |CslSchema|\r |---|\r |app_id:string, user_id:long, event_time:datetime, country:string, city:string, device_type:string, device_vendor:string, ad_network:string, campaign:string, site_id:string, event_type:string, event_name:string, organic:string, days_from_install:int, revenue:real|\r \r Use the returned schema in external table definition:\r \r \`\`\`\r .create external table MobileEvents(\r app_id:string, user_id:long, event_time:datetime, country:string, city:string, device_type:string, device_vendor:string, ad_network:string, campaign:string, site_id:string, event_type:string, event_name:string, organic:string, days_from_install:int, revenue:real\r )\r kind=blob\r partition by (dt:datetime = bin(event_time, 1d), app:string = app_id)\r pathformat = ('app=' app '/dt=' datetime_pattern('yyyyMMdd', dt))\r dataformat = parquet\r (\r h@'https://storageaccount.blob.core.windows.net/MovileEvents;secretKey'\r )\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/inferstorageschemaplugin","inferstorageschemaplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ingestion_time","Returns the approximate time at which the current record was ingested.",`This function must be used in context of a table for which the [IngestionTime policy](../management/ingestiontimepolicy.md) is enabled. Otherwise, this function produces null values.\r \r > [!NOTE]\r > The value returned by this function is only approximate, as the ingestion process may take several minutes to complete and multiple ingestion activities may take place concurrently. To process all records of a table with exactly-once guarantees, use [database cursors](../management/databasecursor.md).\r \r > [!TIP]\r > The ingestion_time() function returns values according to the service clock as measured when ingestion was completed. As a result, this value cannot be used to "order" ingestion operations, as two operations that overlap in time might have any ordering of these values. If ordering records is important for application semantics, one should ensure that the table has a timestamp column as measured by the source of the data instead of relying on the ingestion_time() value.\r \r ## Syntax\r \r \`ingestion_time()\`\r \r ## Returns\r \r A \`datetime\` value specifying the approximate time of ingestion into a table.`,"```\r\nT\r\n| extend ingestionTime = ingestion_time() | top 10 by ingestionTime\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/ingestiontimefunction","ingestiontimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"invoke","Invokes a lambda expression that receives the source of `invoke` as a tabular argument.",`> [!NOTE]\r > For more information on how to declare lambda expressions that can accept tabular arguments, see [let statements](./letstatement.md).\r \r ## Syntax\r \r *T* \`| invoke\` *function*\`(\`[*param1*\`,\` *param2*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T*| string | ✓ | The tabular source.|\r | *function*| string | ✓ | The name of the lambda \`let\` expression or stored function name to be evaluated.|\r | *param1*, *param2* ... | string || Any additional lambda arguments to pass to the function.|\r \r ## Returns\r \r Returns the result of the evaluated expression.`,`The following example shows how to use the \`invoke\` operator to call lambda \`let\` expression:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42RzU7DMBCE736KOcZSpDQHDk2BZ+ghd7QkS2LVsSPb+RGEd8cphRLKAR/s9Vrz7WicZai06nuun2hkRw0nskBFuho0Bfbo2VVsgtKx1qpTwacgUyO0bNDRKbbJ2HhzEFmGP1ZP3sNG+KpBTYEQ7HUELnMxqdBiJD1EpDJe1XwW/DAgNIffdvGApCySuYC2ppFpPKbjt6So7fCsOcXQ3zSleBPR3spsVdNGULA+2iKXlFjgh64jp143DpJ5i5Ly8MWIc/+N2Hi8MEqs+4IpRsmY8XgmrlHPuD87/Hy/QmlskllCvB+EI9OsohdnO+RrvvluBx+4Ry6WGOdoT3zz03cp9nv5AaTMZq0DAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r // clipped_average(): calculates percentiles limits, and then makes another \r // pass over the data to calculate average with values inside the percentiles\r let clipped_average = (T:(x: long), lowPercentile:double, upPercentile:double)\r {\r let high = toscalar(T | summarize percentiles(x, upPercentile));\r let low = toscalar(T | summarize percentiles(x, lowPercentile));\r T \r | where x > low and x < high\r | summarize avg(x) \r };\r range x from 1 to 100 step 1\r | invoke clipped_average(5, 99)\r \`\`\`\r \r **Output**\r \r |avg_x|\r |---|\r |52|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/invokeoperator","invokeoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_compare","Compares two IPv4 strings. The two IPv4 strings are parsed and compared while accounting for the combined IP-prefix mask calculated from argument prefixes, and the optional `PrefixMask` argument.",`## Syntax\r \r \`ipv4_compare(\`*Expr1*\`,\`*Expr2*\`[ ,\`*PrefixMask*\`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*Expr1*, *Expr2*| string | ✓ | A string expression representing an IPv4 address. IPv4 strings can be masked using [IP-prefix notation](#ip-prefix-notation).\r |*PrefixMask*| int | | An integer from 0 to 32 representing the number of most-significant bits that are taken into account.\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`0\`: If the long representation of the first IPv4 string argument is equal to the second IPv4 string argument\r * \`1\`: If the long representation of the first IPv4 string argument is greater than the second IPv4 string argument\r * \`-1\`: If the long representation of the first IPv4 string argument is less than the second IPv4 string argument\r * \`null\`: If conversion for one of the two IPv4 strings wasn't successful.\r \r ## Examples: IPv4 comparison equality cases\r \r ### Compare IPs using the IP-prefix notation specified inside the IPv4 strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA51QsQ6CMBDd+YrbkAQprWDUxNHBzd0YAlLIJUhrWwyDH+8ldYAw6d1wyct7715eXTraqpMr1LywzmDfHvyJAbWYQ1FwDSDke5Hw7S7hSRrGQLNEaBiD03MoOzhf7EzEmciINUFEnn9lJBIZVOhItdZGNjgCWhisrKFRBu7qoUuDVvVzy0UOsvRv/rZkm3SR8nfLW/AGOTrZ12CkHToHR6r1lRWeM6192nf0AaIgALOYAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string)\r [\r '192.168.1.0', '192.168.1.0', // Equal IPs\r '192.168.1.1/24', '192.168.1.255', // 24 bit IP-prefix is used for comparison\r '192.168.1.1', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r '192.168.1.1/30', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv4_compare(ip1_string, ip2_string)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|result|\r |---|---|---|\r |192.168.1.0|192.168.1.0|0|\r |192.168.1.1/24|192.168.1.255|0|\r |192.168.1.1|192.168.1.255/24|0|\r |192.168.1.1/30|192.168.1.255/24|0|\r \r ### Compare IPs using IP-prefix notation specified inside the IPv4 strings and as additional argument of the \`ipv4_compare()\` function\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52QQQrCMBBF9z3F7GqhtiamRQsewJ17kdLatAzUJCSpdOHhDUYh6kpnFh8ew2P4XWPdtiNfoCK1sRrFUPlIARX9RErzHudqlGJIomMEMdnSjJSbjGQkTsFNQFYPsiYp5LkLaNHC/rD0DkADk+Ed9FLDWV5Uo9FI8a7MKXOOgNCicOCppOwP5deXXknZT8pTdAM+Wy460NxMo4Wdq+vKan8T1hn2+CowuQNRhO/LeAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string, prefix:long)\r [\r '192.168.1.1', '192.168.1.0', 31, // 31 bit IP-prefix is used for comparison\r '192.168.1.1/24', '192.168.1.255', 31, // 24 bit IP-prefix is used for comparison\r '192.168.1.1', '192.168.1.255', 24, // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv4_compare(ip1_string, ip2_string, prefix)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|prefix|result|\r |---|---|---|---|\r |192.168.1.1|192.168.1.0|31|0|\r |192.168.1.1/24|192.168.1.255|31|0|\r |192.168.1.1|192.168.1.255|24|0|`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-comparefunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_is_in_any_range","Checks whether IPv4 string address is in any of the specified IPv4 address ranges.",`## Syntax\r \r \`ipv4_is_in_any_range(\`*Ipv4Address* \`,\` *Ipv4Range* [ \`,\` *Ipv4Range* ...] \`)\`\r \r \`ipv4_is_in_any_range(\`*Ipv4Address* \`,\` *Ipv4Ranges* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Ipv4Address*| string | ✓ | An expression representing an IPv4 address.|\r | *Ipv4Range*| string | ✓ | An IPv4 range or list of IPv4 ranges written with [IP-prefix notation](#ip-prefix-notation).|\r | *Ipv4Ranges*| dynamic | ✓ | A dynamic array containing IPv4 ranges written with [IP-prefix notation](#ip-prefix-notation).|\r \r > [!NOTE]\r > Either one or more *IPv4Range* strings or an *IPv4Ranges* dynamic array is required.\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the IPv4 address is in the range of any of the specified IPv4 networks.\r * \`false\`: Otherwise.\r * \`null\`: If conversion for one of the two IPv4 strings wasn't successful.`,`### Syntax using list of strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQhKLS7NKbHNLCgzic8sjs/Mi0/Mq4wvSsxLT9VQN7Q00jM0s9Az1DNT11FA4hrqG5mARQz0QNBQ3wLMMzIHyoG4hmbqmgA/iDq/YAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print Result=ipv4_is_in_any_range('192.168.1.6', '192.168.1.1/24', '10.0.0.1/8', '127.1.0.1/16')\r \`\`\`\r \r **Output**\r \r |Result|\r |--|\r |true|\r \r ### Syntax using dynamic array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQhKLS7NKbHNLCgzic8sjs/Mi0/Mq4wvSsxLT9VQMjQy1zMAQkMlHYWUyrzE3MxkjWgUUSVDSyM9QzMLPUMgN1ZTEwBpBE7bVQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print Result=ipv4_is_in_any_range("127.0.0.1", dynamic(["127.0.0.1", "192.168.1.1"]))\r \`\`\`\r \r **Output**\r \r |Result|\r |--|\r |true|\r \r ### Extend table with IPv4 range check\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WP0QqCMBSG7/cUwysFmR4ts8QHECK8l5ClQ0ZrhhuV0MN3lFh0/ruPc/6Po4Slx7Hj6iTsc5yupuxnzW+y8xtCcTzYJwyynAGDCDIv/NJkx2IMRLlDsSPkHBREYXNVYx+3mIsSflUfjJ2kHgLauBtgCUtdh5Ntf6Z0ceMaOMTWoKYgaCBvKl5W6J5WZn2llPfHppWmlbrlem4nrofFHv5/GnwAOfWtJ/wAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let LocalNetworks=dynamic([\r "192.168.1.1/16",\r "127.0.0.1/8",\r "10.0.0.1/8"\r ]);\r let IPs=datatable(IP:string) [\r "10.1.2.3",\r "192.168.1.5",\r "123.1.11.21",\r "1.1.1.1"\r ];\r IPs\r | extend IsLocal=ipv4_is_in_any_range(IP, LocalNetworks)\r \`\`\`\r \r **Output**\r \r |IP|IsLocal|\r |---|---|\r |10.1.2.3|true|\r |192.168.1.5|true|\r |123.1.11.21|false|\r |1.1.1.1|false|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-is-in-any-range-function","ipv4-is-in-any-range-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_is_in_range","Checks if IPv4 string address is in IPv4-prefix notation range.",`## Syntax\r \r \`ipv4_is_in_range(\`*Ipv4Address*\`,\`*Ipv4Range*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Ipv4Address*| string | ✓ | An expression representing an IPv4 address.|\r | *Ipv4Range*| string | ✓ | An IPv4 range or list of IPv4 ranges written with [IP-prefix notation](#ip-prefix-notation).|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the long representation of the first IPv4 string argument is in range of the second IPv4 string argument.\r * \`false\`: Otherwise.\r * \`null\`: If conversion for one of the two IPv4 strings wasn't successful.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WPsQrCQBBE+/uK7WIgJtwRRQVLCzt7kXDxNmEhXuLtRVL48a4oKFg40z14MONslNYdzmiorHMBmTccA/k2A0HB+hbfIFVHBYlem1wvV7nOdZKB5JdIigJ219F2sD/wH8ksFoUpn1gkU0JNUaz5ELChCYhhZHTQ9AHO/WWwgbj36qTugFNE70Amj12Ercy9lRVxRf41++vS50v6AE4amhHyAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip_address:string, ip_range:string)\r [\r '192.168.1.1', '192.168.1.1', // Equal IPs\r '192.168.1.1', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv4_is_in_range(ip_address, ip_range)\r \`\`\`\r \r **Output**\r \r |ip_address|ip_range|result|\r |---|---|---|\r |192.168.1.1|192.168.1.1|true|\r |192.168.1.1|192.168.1.255/24|true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-is-in-range-function","ipv4-is-in-range-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_is_match","Matches two IPv4 strings. The two IPv4 strings are parsed and compared while accounting for the combined IP-prefix mask calculated from argument prefixes, and the optional `prefix` argument.",`## Syntax\r \r \`ipv4_is_match(\`*ip1*\`,\`*ip2*\`[ ,\`*prefix*\`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip1*, *ip2*| string | ✓ | An expression representing an IPv4 address. IPv4 strings can be masked using [IP-prefix notation](#ip-prefix-notation).|\r | *prefix*| int | | An integer from 0 to 32 representing the number of most-significant bits that are taken into account.|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the long representation of the first IPv4 string argument is equal to the second IPv4 string argument.\r * \`false\`: Otherwise.\r * \`null\`: If conversion for one of the two IPv4 strings wasn't successful.\r \r >[!NOTE]\r > When matching against an IPv4 address that's not a range, we recommend using the [equals operator](equals-cs-operator.md) (\`==\`), for better performance.`,`### IPv4 comparison equality - IP-prefix notation specified inside the IPv4 strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA51Quw6CQBDs+YrtkAQ57gSjJpYWdvbGkAMO3YTHeXcYCj/eTbCAUOlssclkZ3YypXQ0ea1WqHlmncH2fhhXCKjFnAq8qwc+34uIb3cRj2I/BMKSITAGp2cvazhf7EzEmUjoasKINP3KSCQSyNGRaq2NqnAAtNBbVULVGSi6RkuDtmvnloscZDm++duSbeJFyt8tb94b1OBUW4JRtq8dHKnWV5KhzRrpisek92nhwQew+y1lmQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string)\r [\r '192.168.1.0', '192.168.1.0', // Equal IPs\r '192.168.1.1/24', '192.168.1.255', // 24 bit IP-prefix is used for comparison\r '192.168.1.1', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r '192.168.1.1/30', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv4_is_match(ip1_string, ip2_string)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|result|\r |---|---|---|\r |192.168.1.0|192.168.1.0|true|\r |192.168.1.1/24|192.168.1.255|true|\r |192.168.1.1|192.168.1.255/24|true|\r |192.168.1.1/30|192.168.1.255/24|true|\r \r ### IPv4 comparison equality - IP-prefix notation specified inside the IPv4 strings and an additional argument of the \`ipv4_is_match()\` function\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA52QvQrCMBCA9z7FbbVQWxNT0YIP4OYuUvqT1oM2CUkqHXx4g1WIOundcPANH8fXlNZt1fMFKlIYq1F0+XxiQEU/kdK8xSnvpeii4BRASHY0IZttQhISxuDGI6sHWZMY0tQdqNDC4bicHYAGRsMbaKWGWg6q1GikeFemlDmHR2iWOfBUUvaH8uvLWUnZT8pzcAM+WS4a0NyMvYW9y3VlBZpiKG198Xr6IV8FozvG3oupeQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string, prefix:long)\r [\r '192.168.1.1', '192.168.1.0', 31, // 31 bit IP-prefix is used for comparison\r '192.168.1.1/24', '192.168.1.255', 31, // 24 bit IP-prefix is used for comparison\r '192.168.1.1', '192.168.1.255', 24, // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv4_is_match(ip1_string, ip2_string, prefix)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|prefix|result|\r |---|---|---|---|\r |192.168.1.1|192.168.1.0|31|true|\r |192.168.1.1/24|192.168.1.255|31|true|\r |192.168.1.1|192.168.1.255|24|true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-is-matchfunction","ipv4-is-matchfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_is_private","Checks if the IPv4 string address belongs to a set of private network IPs.",`[Private network addresses](https://en.wikipedia.org/wiki/Private_network) were originally defined to assist in delaying IPv4 address exhaustion. IP packets originating from or addressed to a private IP address can't be routed through the public internet.\r \r ## Private IPv4 addresses\r \r The Internet Engineering Task Force (IETF) has directed the Internet Assigned Numbers Authority (IANA) to reserve the following IPv4 address ranges for private networks:\r \r | IP address range|Number of addresses|Largest CIDR block (subnet mask)|\r |-----------------|-------------------|--------------------------------|\r |10.0.0.0 \u2013 10.255.255.255|16777216|10.0.0.0/8 (255.0.0.0)|\r |172.16.0.0 \u2013 172.31.255.255|1048576|172.16.0.0/12 (255.240.0.0)|\r |192.168.0.0 \u2013 192.168.255.255|65536|192.168.0.0/16 (255.255.0.0)|\r \r \`\`\`\r ipv4_is_private('192.168.1.1/24') == true\r ipv4_is_private('10.1.2.3/24') == true\r ipv4_is_private('202.1.2.3') == false\r ipv4_is_private("127.0.0.1") == false\r \`\`\`\r \r ## Syntax\r \r \`ipv4_is_private(\`*ip*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*ip*| string| ✓ | An expression representing an IPv4 address. IPv4 strings can be masked using [IP-prefix notation](#ip-prefix-notation).|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the IPv4 address belongs to any of the private network ranges.\r * \`false\`: Otherwise.\r * \`null\`: If parsing of the input as IPv4 address string wasn't successful.\r \r ## Example: Check if IPv4 belongs to a private network\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcyC+OKSosy8dCsIpckVzaWgbmigZ6hnpGesrgPiWBrpGZpZAEUM9Y1MIEJG5noGQGgI5MVy1SikVpSk5qUoFKUWl+aUKNgqZBaUmcRnFscXFGWWJZYg2aIJAAFWRs16AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip_string:string)\r [\r '10.1.2.3',\r '192.168.1.1/24',\r '127.0.0.1',\r ]\r | extend result = ipv4_is_private(ip_string)\r \`\`\`\r \r **Output**\r \r |ip_string|result|\r |---|---|\r |10.1.2.3|true|\r |192.168.1.1/24|true|\r |127.0.0.1|false|`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-is-privatefunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_lookup","The `ipv4_lookup` plugin looks up an IPv4 value in a lookup table and returns rows with matched values. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*T* `|` `evaluate` `ipv4_lookup(` *LookupTable* `,` *SourceIPv4Key* `,` *IPv4LookupKey* [`,` *ExtraKey1* [.. `,` *ExtraKeyN* [`,` *return_unmatched* ]]] `)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input whose column *SourceIPv4Key* will be used for IPv4 matching.|\r\n| *LookupTable* | string | ✓ | Table or tabular expression with IPv4 lookup data, whose column *LookupKey* will be used for IPv4 matching. IPv4 values can be masked using [IP-prefix notation](#ip-prefix-notation).|\r\n| *SourceIPv4Key* | string | ✓ | The column of *T* with IPv4 string to be looked up in *LookupTable*. IPv4 values can be masked using [IP-prefix notation](#ip-prefix-notation).|\r\n| *IPv4LookupKey* | string | ✓ | The column of *LookupTable* with IPv4 string that is matched against each *SourceIPv4Key* value.|\r\n| *ExtraKey1* .. *ExtraKeyN* | string | | Additional column references that are used for lookup matches. Similar to `join` operation: records with equal values will be considered matching. Column name references must exist both is source table `T` and `LookupTable`.|\r\n| *return_unmatched* | bool | | A boolean flag that defines if the result should include all or only matching rows (default: `false` - only matching rows returned).|\r\n\r\n[!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r\n\r\n## Returns\r\n\r\nThe `ipv4_lookup` plugin returns a result of join (lookup) based on IPv4 key. The schema of the table is the union of the source table and the lookup table, similar to the result of the [`lookup` operator](lookupoperator.md).\r\n\r\nIf the *return_unmatched* argument is set to `true`, the resulting table will include both matched and unmatched rows (filled with nulls).\r\n\r\nIf the *return_unmatched* argument is set to `false`, or omitted (the default value of `false` is used), the resulting table will have as many records as matching results. This variant of lookup has better performance compared to `return_unmatched=true` execution.\r\n\r\n> [!NOTE]\r\n>\r\n> * This plugin covers the scenario of IPv4-based join, assuming a small lookup table size (100K-200K rows), with the input table optionally having a larger size.\r\n> * The performance of the plugin will depend on the sizes of the lookup and data source tables, the number of columns, and number of matching records.",`### IPv4 lookup - matching rows only\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12STU/DMAyG7/0V1i6AVJIlW8cY4sCXEOzABOKE0BTaMKK1SZWkm5D48dhtgY1D3ybOY79WYs7hbgGlc+umhqjeSj3DwPJaRZVwDgvlo1ElFLiHd++qGXzEWIcZ515t2crEj+atCdrnzkZtI8tdxQkOOga+0s7U8tjUmzGvVIjat2e7cZaHTVLq+GMK561X28mh1XHr/HoWojd2lQKZGIs2y9wVug9D+he2qtI7dGOj/1ya4Hb5v4Md+ih5SQAGQgg2mTIhp2zIxckgHVw8kQSj8He/IFG1soOU6IwhRuApxm+eSRrvao2LR9o9NqFNJFbKEZNZht8YM+T4X+mnWxJsRNXO6y5lPGGjCZPDIcsEH0kEHq5Icq1sm3Q1J8Gng7tQKluE3gpzmJiOfnz2O7u9RHm2JuoC5mhYuArTXs/6Rwh7D2Dqvfs5+C0t5EEKADgh+6UIomsRrAOgg7qboENxKpmYZFiAiRNE2gpr67aWekD/5Av0RpWNihpoQJbdbB7285FiMIV+MI6+AVer8Qy+AgAA" target="_blank">Run the query</a>\r \r \`\`\`\r // IP lookup table: IP_Data\r // Partial data from: https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv\r let IP_Data = datatable(network:string, continent_code:string ,continent_name:string, country_iso_code:string, country_name:string)\r [\r "111.68.128.0/17","AS","Asia","JP","Japan",\r "5.8.0.0/19","EU","Europe","RU","Russia",\r "223.255.254.0/24","AS","Asia","SG","Singapore",\r "46.36.200.51/32","OC","Oceania","CK","Cook Islands",\r "2.20.183.0/24","EU","Europe","GB","United Kingdom",\r ];\r let IPs = datatable(ip:string)\r [\r '2.20.183.12', // United Kingdom\r '5.8.1.2', // Russia\r '192.165.12.17', // Unknown\r ];\r IPs\r | evaluate ipv4_lookup(IP_Data, ip, network)\r \`\`\`\r \r **Output**\r \r |ip|network|continent_code|continent_name|country_iso_code|country_name|\r |---|---|---|---|---|---|\r |2.20.183.12|2.20.183.0/24|EU|Europe|GB|United Kingdom|\r |5.8.1.2|5.8.0.0/19|EU|Europe|RU|Russia|\r \r ### IPv4 lookup - return both matching and non-matching rows\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA11SwW7bMAy9+yuIXNoCnhQpcZqm6GHrhqLrYUGLnobCUG0tEWJLhkQlGLCPH2U7RVIDpq3H9/gIipzD4xoa53axA1TvjV4RUH5XqDLOYa08GtVATWf44127ggRvEbuw4tyrA9sY3Mb3GLSvnEVtkVWu5UkQNAa+0c508ovp9nPeqoDa97lTnFVhnzUaj8Zw1/v13VxajQfnd6uA3thNnjyMJZeycrUeUTiBrWpP4WjR/y1NcJ/5Q+KUfZX9zoCeiRCCLZZMyCWbcnE9ySdfX1IIRtHn5zoF1Sk7yQd+wYiYqDeU+fGaQvSu0/TznE7PMfTSgS3ljMmioHdOGjn/VP7lIQXqR3XO66NovmCzBZPTKSsEn0mi/LpPodLK9rL7pxToGuExNMrW4cOOVEwsZ0ev8/4evlF4tQZ1DU9kWruWhG+343WEs6sw3Tiq46QuPooLeZETQKtxXmygpQEJNlBgoA0zGdLiRjKxKKgIE9dE6qvsrDvY1Al1kf0DvVdNVKghLUw57OvluC85gTmMi5KD1xi9LaNtFVZb6uUO0Ed99R9LR6CF6wIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r // IP lookup table: IP_Data\r // Partial data from: \r // https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv\r let IP_Data = datatable(network:string,continent_code:string ,continent_name:string ,country_iso_code:string ,country_name:string )\r [\r "111.68.128.0/17","AS","Asia","JP","Japan",\r "5.8.0.0/19","EU","Europe","RU","Russia",\r "223.255.254.0/24","AS","Asia","SG","Singapore",\r "46.36.200.51/32","OC","Oceania","CK","Cook Islands",\r "2.20.183.0/24","EU","Europe","GB","United Kingdom",\r ];\r let IPs = datatable(ip:string)\r [\r '2.20.183.12', // United Kingdom\r '5.8.1.2', // Russia\r '192.165.12.17', // Unknown\r ];\r IPs\r | evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)\r \`\`\`\r \r **Output**\r \r |ip|network|continent_code|continent_name|country_iso_code|country_name|\r |---|---|---|---|---|---|\r |2.20.183.12|2.20.183.0/24|EU|Europe|GB|United Kingdom|\r |5.8.1.2|5.8.0.0/19|EU|Europe|RU|Russia|\r |192.165.12.17||||||\r \r ### IPv4 lookup - using source in external_data()\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12RTU/DMAyG7/0VuXWTSkrL1yjajQvigkCcJhRlrbVFS+MqcbpN4sfjfiAmcsvjR8lr2wKJlzf1rEmLtYATgXfaqobvCwd0RH+oAnnjdtkO0OkWlGkqi3yv0ZFx4EjV2MCv9UcHeaaCcXTkz8oE/KdP/ELOTFDaoTu3GIPqPJ7O1RbRDjxoAmsNwcB704AfS8tE8Nmke6IuVHnu9VHuDO3jNgbwQyQOJGts86GxABRy7sZ05ZXp+tu81YH7HmuXXNahT7+eEjvOKPB8BoP01sLCdHPaZbIZP09LWV7LYnUjizLNGOS5+HSctBGvrDXYTtqdXMlCToqYtPcYgtFTuXgsZXF/x4/I4oElLn8coQGXcBAOkXwL6LWNPAcxZFQW8RC7xbzDjGEm5sVlwgNF71R0raZ6z1HWgnyE5Q/Q4oI/9gEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)\r ['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];\r let IPs = datatable(ip:string)\r [\r '2.20.183.12', // United Kingdom\r '5.8.1.2', // Russia\r '192.165.12.17', // Sweden\r ];\r IPs\r | evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)\r \`\`\`\r \r **Output**\r \r |ip|network|geoname_id|continent_code|continent_name|country_iso_code|country_name|is_anonymous_proxy|is_satellite_provider|\r |---|---|---|---|---|---|---|---|---|\r |2.20.183.12|2.20.183.0/24|2635167|EU|Europe|GB|United Kingdom|0|0|\r |5.8.1.2|5.8.0.0/19|2017370|EU|Europe|RU|Russia|0|0|\r |192.165.12.17|192.165.8.0/21|2661886|EU|Europe|SE|Sweden|0|0|\r \r ### IPv4 lookup - using extra columns for matching\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22SS0/DMBCE7/kVe0srBYeEVynigkAIcUEgTghFbrJqLRxvZG9aKvHjWSdF5ZVDFH+eSXYmtshw91Bda9ZwCfjO6J22VSPriUPekH+bB/bGLbMlktMtVqaZW5J1TY6NQ8dVTQ1+qfY0incUBPeO/bYygX7JR/5NnJlQaUdu21Ifqs7T+3a+ILKRB81orWGMfG0a9MPWNAG5XtIVcxfmee71Ri0Nr/pFH9DHkWQgVVObx2ABOeSSxnTlgenWx3mrg+Qe9r5zVYd1+nqR2KGjIP1EBeuFxYnpvqaFfxNH/G/iafIyDJuWqjxUxexIFWWaRXDTe+pQntPbK7nnOTw7SdrAvdgaakfbiZqpQo0W+Gl7fB5tj30IRo/y4rxUxemJfEQVZ1G0lw+vEPnTBht0YAKkTzcpHEAgMAwbcinDAqHVXK+wSaQJaSH5AFxr28uPgFhSZYne+m6yO0SZwAx2J+d3N39LmX4Cz/sMXoACAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)\r ['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];\r let IPs = datatable(ip:string, continent_name:string, country_iso_code:string)\r [\r '2.20.183.12', 'Europe', 'GB', // United Kingdom\r '5.8.1.2', 'Europe', 'RU', // Russia\r '192.165.12.17', 'Europe', '', // Sweden is 'SE' - so it won't be matched\r ];\r IPs\r | evaluate ipv4_lookup(IP_Data, ip, network, continent_name, country_iso_code)\r \`\`\`\r \r **Output**\r \r |ip|continent_name|country_iso_code|network|geoname_id|continent_code|country_name|is_anonymous_proxy|is_satellite_provider|\r |---|---|---|---|---|---|---|---|---|\r |2.20.183.12|Europe|GB|2.20.183.0/24|2635167|EU|United Kingdom|0|0|\r |5.8.1.2|Europe|RU|5.8.0.0/19|2017370|EU|Russia|0|0|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-lookup-plugin","ipv4-lookup-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_netmask_suffix","Returns the value of the IPv4 netmask suffix from an IPv4 string address.",`## Syntax\r \r \`ipv4_netmask_suffix(\`*ip*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*ip*| string | ✓| An expression representing an IPv4 address. IPv4 strings can be masked using [IP-prefix notation](#ip-prefix-notation).|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * The value of the netmask suffix the IPv4 address. If the suffix isn't present in the input, a value of \`32\` (full netmask suffix) is returned.\r * \`null\`: If parsing the input as an IPv4 address string wasn't successful.\r \r ## Example: Resolve IPv4 mask suffix\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcyC+OKSosy8dCsIpckVzaWgbmigZ6hnpGesrgPiWBrpGZpZAEUM9Y1MIEJG5noGQGiob2gGFIjlqlFIrShJzUtRSM5MKYovLk1Ly6xQsFXILCgzic9LLclNLM6GiiJs1AQAK1xCiYYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip_string:string)\r [\r '10.1.2.3',\r '192.168.1.1/24',\r '127.0.0.1/16',\r ]\r | extend cidr_suffix = ipv4_netmask_suffix(ip_string)\r \`\`\`\r \r **Output**\r \r |ip_string|cidr_suffix|\r |---|---|\r |10.1.2.3|32|\r |192.168.1.1/24|24|\r |127.0.0.1/16|16|`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-netmask-suffix-function","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv4_range_to_cidr_list","Converts a IPv4 address range denoted by starting and ending IPv4 addresses to a list of IPv4 ranges in CIDR notation.",`## Syntax\r \r \`ipv4_range_to_cidr_list(\`*StartAddress* \`,\` *EndAddress* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *StartAddress*| string | ✓ | An expression representing a starting IPv4 address of the range.|\r | *EndAddress*| string | ✓ | An expression representing an ending IPv4 address of the range.|\r \r ## Returns\r \r A dynamic array object containing the list of ranges in CIDR notation.\r \r [!INCLUDE [CIDR notation](../../includes/ip-prefix-notation.md)]`,`\`\`\`\r print start_IP="1.1.128.0", end_IP="1.1.140.255"\r | project ipv4_range_list = ipv4_range_to_cidr_list(start_IP, end_IP)\r \`\`\`\r \r **Output**\r \r |ipv4_range_list|\r |--|\r |\`["1.1.128.0/21", "1.1.136.0/22","1.1.140.0/24"]\`|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv4-range-to-cidr-list-function","ipv4-range-to-cidr-list-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv6_compare","Compares two IPv6 or IPv4 network address strings. The two IPv6 strings are parsed and compared while accounting for the combined IP-prefix mask calculated from argument prefixes, and the optional `prefix` argument.",`>[!Note]\r > The function can accept and compare arguments representing both IPv6 and IPv4 network addresses. However, if the caller knows that arguments are in IPv4 format, use [ipv4_is_compare()](./ipv4-comparefunction.md) function. This function will result in better runtime performance.\r \r ## Syntax\r \r \`ipv6_compare(\`*ip1*\`,\`*ip2*\`[ ,\`*prefix*\`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip1*, *ip2*| string | ✓ | An expression representing an IPv6 or IPv4 address. IPv6 and IPv4 strings can be masked using [IP-prefix notation](#ip-prefix-notation).|\r | *prefix*| int | | An integer from 0 to 128 representing the number of most significant bits that are taken into account.|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`0\`: If the long representation of the first IPv6 string argument is equal to the second IPv6 string argument.\r * \`1\`: If the long representation of the first IPv6 string argument is greater than the second IPv6 string argument.\r * \`-1\`: If the long representation of the first IPv6 string argument is less than the second IPv6 string argument.\r * \`null\`: If conversion for one of the two IPv6 strings wasn't successful.\r \r ## Examples: IPv6/IPv4 comparison equality cases\r \r ### Compare IPs using the IP-prefix notation specified inside the IPv6/IPv4 strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA61UwU6EMBC98xVzWzdZgVbA0sSjBw8m3o3ZdKE1TRCQwoaDH+/s0igKwkIcDk1m5r2Zvg6Tihq/QyavdEn2pq50/sq7Ywe6pD9dW+fZAc+Dh6djAKKSkBRvJZ4pCHNyRiDStJLGSOPAhsTUJRFziUs2O0AbetCQ7v69ERnif4E8GmBWz0PD0MIQRAM46BpRwXVZSaVb0AYag72oorKNaVPkM40gZ1dnPad34w/6XMNplY0gEZ2ASjKfcxamXDKa8DgIIn4bx2dVJmIwruxfCI9Qf4KRfUuOifYu0aw+K3pntpN/rDZ3NxtfVg2zH3WLgdM7QaHs75Cn59cbmzecOM4VGk98wbhPfNJVnZz8AUqpDvU1UrO6jFQdm9OFnBfN/gLOF+cDZFtLVBCXR5PVcIe75xjt7Xrp7ab+Utp+Aj++uYm9BAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string)\r [\r // IPv4 are compared as IPv6 addresses\r '192.168.1.1', '192.168.1.1', // Equal IPs\r '192.168.1.1/24', '192.168.1.255', // 24 bit IP4-prefix is used for comparison\r '192.168.1.1', '192.168.1.255/24', // 24 bit IP4-prefix is used for comparison\r '192.168.1.1/30', '192.168.1.255/24', // 24 bit IP4-prefix is used for comparison\r // IPv6 cases\r 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7994', // Equal IPs\r 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998', // 120 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7998/120', // 120 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998/120', // 120 bit IP6-prefix is used for comparison\r // Mixed case of IPv4 and IPv6\r '192.168.1.1', '::ffff:c0a8:0101', // Equal IPs\r '192.168.1.1/24', '::ffff:c0a8:01ff', // 24 bit IP-prefix is used for comparison\r '::ffff:c0a8:0101', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r '::192.168.1.1/30', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv6_compare(ip1_string, ip2_string)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|result|\r |---|---|---|\r |192.168.1.1|192.168.1.1|0|\r |192.168.1.1/24|192.168.1.255|0|\r |192.168.1.1|192.168.1.255/24|0|\r |192.168.1.1/30|192.168.1.255/24|0|\r |fe80::85d:e82c:9446:7994|fe80::85d:e82c:9446:7994|0|\r |fe80::85d:e82c:9446:7994/120|fe80::85d:e82c:9446:7998|0|\r |fe80::85d:e82c:9446:7994|fe80::85d:e82c:9446:7998/120|0|\r |fe80::85d:e82c:9446:7994/120|fe80::85d:e82c:9446:7998/120|0|\r |192.168.1.1|::ffff:c0a8:0101|0|\r |192.168.1.1/24|::ffff:c0a8:01ff|0|\r |::ffff:c0a8:0101|192.168.1.255/24|0|\r |::192.168.1.1/30|192.168.1.255/24|0|\r \r ### Compare IPs using IP-prefix notation specified inside the IPv6/IPv4 strings and as additional argument of the \`ipv6_compare()\` function\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA61UTW+DMAy98yt86yp1kITwZWk/YIdJu09TRSGpInWACK162I+fC5kEa7uOauFg6Rm9Z7/YKfOOvs1OPZiGr23XmmqLQ1iBacRPqGmVNkfc1dV26b15EATw/HqQkLcKivqjoVhCbk9gDHlZtspaZcGDBc+Ez+PU5z5frIDOCGE9EvLViS/ksDEdMcjHQQ2Mhb0lXl23TsTYuppyBkISyQgRUUSA4xTyHs6zOgdOIWdygrMphiInN0hEq5QhplGJKhUFZlLGmGRZ38KVXDRUA1wkvTxFpx/f7OmaXEAkv0imlOOCOTn2H3LsplwyV47+fjFHSpzMhVq7gazK3vJLU0J3iqjpYMHyFBnXeiL9d2OnNIxfGsH+zuabiDiuO2Rn1EMv8w179z5BHTtFBtF27ncdPNGmH+K129/RSzB+Ar53f/kFFQW7YjMEAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string, prefix:long)\r [\r // IPv4 are compared as IPv6 addresses \r '192.168.1.1', '192.168.1.0', 31, // 31 bit IP4-prefix is used for comparison\r '192.168.1.1/24', '192.168.1.255', 31, // 24 bit IP4-prefix is used for comparison\r '192.168.1.1', '192.168.1.255', 24, // 24 bit IP4-prefix is used for comparison\r // IPv6 cases\r 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7995', 127, // 127 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994/127', 'fe80::85d:e82c:9446:7998', 120, // 120 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998', 127, // 120 bit IP6-prefix is used for comparison\r // Mixed case of IPv4 and IPv6\r '192.168.1.1/24', '::ffff:c0a8:01ff', 127, // 127 bit IP6-prefix is used for comparison\r '::ffff:c0a8:0101', '192.168.1.255', 120, // 120 bit IP6-prefix is used for comparison\r '::192.168.1.1/30', '192.168.1.255/24', 127, // 120 bit IP6-prefix is used for comparison\r ]\r | extend result = ipv6_compare(ip1_string, ip2_string, prefix)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|prefix|result|\r |---|---|---|---|\r |192.168.1.1|192.168.1.0|31|0|\r |192.168.1.1/24|192.168.1.255|31|0|\r |192.168.1.1|192.168.1.255|24|0|\r |fe80::85d:e82c:9446:7994|fe80::85d:e82c:9446:7995|127|0|\r |fe80::85d:e82c:9446:7994/127|fe80::85d:e82c:9446:7998|120|0|\r |fe80::85d:e82c:9446:7994/120|fe80::85d:e82c:9446:7998|127|0|\r |192.168.1.1/24|::ffff:c0a8:01ff|127|0|\r |::ffff:c0a8:0101|192.168.1.255|120|0|\r |::192.168.1.1/30|192.168.1.255/24|127|0|`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv6-comparefunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv6_is_in_any_range","Checks whether an IPv6 string address is in any of the specified IPv6 address ranges.",`## Syntax\r \r \`ipv6_is_in_any_range(\`*Ipv6Address* \`,\` *Ipv6Range* [ \`,\` *Ipv6Range* ...] \`)\`\r \r \`ipv6_is_in_any_range(\`*Ipv6Address* \`,\` *Ipv6Ranges* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Ipv6Address* | string | ✓ | An expression representing an IPv6 address.|\r | *Ipv6Range* | string | ✓ | An expression representing an IPv6 range using [IP-prefix notation](#ip-prefix-notation).|\r | *Ipv6Ranges* | dynamic | ✓ | An array containing IPv6 ranges using [IP-prefix notation](#ip-prefix-notation).|\r \r > [!NOTE]\r > Either one or more *IPv6Range* strings or an *IPv6Ranges* dynamic array is required.\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the IPv6 address is in the range of any of the specified IPv6 networks.\r * \`false\`: Otherwise.\r * \`null\`: If conversion for one of the two IPv6 strings wasn't successful.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA5WQzQqCQBSF9/MUg6sEQcdyshs+gBDRPkSu8yNDNoYO/UAP31S4aGfnbL/Lx7mdcnTXC+z2yt364TQW8mHxbMTiSKhPgJkCzdI15LiRwFZcgmJJCk0mlyDWWQaaCxkzlgbR9yKBqdoHRII5oIh5EpAq3JLOG8uD96DzbTq1KA8wusHYNqSzpdgIOQln0eovWs+luacl83S1JX4VeVJ1d8pKWo6ftxbmcuW1GWtja7SPekDbvhdHv18PX7mD2cSIAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let LocalNetworks=dynamic([\r "a5e:f127:8a9d:146d:e102:b5d3:c755:f6cd/112",\r "0:0:0:0:0:ffff:c0a8:ac/60"\r ]);\r let IPs=datatable(IP:string) [\r "a5e:f127:8a9d:146d:e102:b5d3:c755:abcd",\r "a5e:f127:8a9d:146d:e102:b5d3:c755:abce",\r "a5e:f127:8a9d:146d:e102:b5d3:c755:abcf",\r "a5e:f127:8a9d:146d:e102:b5d3:c756:abd1",\r ];\r IPs\r | extend IsLocal=ipv6_is_in_any_range(IP, LocalNetworks)\r \`\`\`\r \r **Output**\r \r |IP|IsLocal|\r |---|---|\r |a5e:f127:8a9d:146d:e102:b5d3:c755:abcd| True|\r |a5e:f127:8a9d:146d:e102:b5d3:c755:abce| True|\r |a5e:f127:8a9d:146d:e102:b5d3:c755:abcf| True|\r |a5e:f127:8a9d:146d:e102:b5d3:c756:abd1| False|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv6-is-in-any-range-function","ipv6-is-in-any-range-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv6_is_in_range","Checks if an IPv6 string address is in the IPv6-prefix notation range.",`## Syntax\r \r \`ipv6_is_in_range(\`*Ipv6Address*\`,\`*Ipv6Range*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Ipv6Address* | string | ✓ | An expression representing an IPv6 address.|\r | *Ipv6Range*| string | ✓ | An expression representing an IPv6 range using [IP-prefix notation](#ip-prefix-notation).|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the long representation of the first IPv6 string argument is in range of the second IPv6 string argument.\r * \`false\`: Otherwise.\r * \`null\`: If conversion for one of the two IPv6 strings wasn't successful.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA62QwQrCMBBE7/2K3Gqh0KSati74JSJlm92WQAnSRPHgx7tQRY8KztyG4R0eYZIOM2/8uUeihWOEmBYfplLJtGCY+DkU2TFTOVqG0dQtdLgnMLuGgI2uYbC0BddaCzg4yksl+eKsJZUxdV7+n72ef+VqeHWUgNPYAbqq0YI6ZXfFt8SBlJi6zEkdxNK16X3sfVhtfZh8KywepKIru2kBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip_address:string, ip_range:string)\r [\r 'a5e:f127:8a9d:146d:e102:b5d3:c755:abcd', 'a5e:f127:8a9d:146d:e102:b5d3:c755:0000/112',\r 'a5e:f127:8a9d:146d:e102:b5d3:c755:abcd', 'a5e:f127:8a9d:146d:e102:b5d3:c755:abcd',\r 'a5e:f127:8a9d:146d:e102:b5d3:c755:abcd', '0:0:0:0:0:ffff:c0a8:ac/60',\r ]\r | extend result = ipv6_is_in_range(ip_address, ip_range)\r \`\`\`\r \r **Output**\r \r |ip_address|ip_range|result|\r |---|---|---|\r |a5e:f127:8a9d:146d:e102:b5d3:c755:abcd|a5e:f127:8a9d:146d:e102:b5d3:c755:0000/112|True|\r |a5e:f127:8a9d:146d:e102:b5d3:c755:abcd|a5e:f127:8a9d:146d:e102:b5d3:c755:abcd|True|\r |a5e:f127:8a9d:146d:e102:b5d3:c755:abcd|0:0:0:0:0:ffff:c0a8:ac/60|False|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv6-is-in-range-function","ipv6-is-in-range-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"ipv6_is_match","Matches two IPv6 or IPv4 network address strings. The two IPv6/IPv4 strings are parsed and compared while accounting for the combined IP-prefix mask calculated from argument prefixes, and the optional `prefix` argument.",`> [!NOTE]\r > The function can accept and compare arguments representing both IPv6 and IPv4 network addresses. If the caller knows that arguments are in IPv4 format, use the [ipv4_is_match()](./ipv4-is-matchfunction.md) function. This function will result in better runtime performance.\r \r ## Syntax\r \r \`ipv6_is_match(\`*ip1*\`,\`*ip2*\`[ ,\`*prefix*\`])\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip1*, *ip2*| string | ✓ | An expression representing an IPv6 or IPv4 address. IPv6 and IPv4 strings can be masked using [IP-prefix notation](#ip-prefix-notation).|\r | *prefix*| int | | An integer from 0 to 128 representing the number of most-significant bits that are taken into account.|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r * \`true\`: If the long representation of the first IPv6/IPv4 string argument is equal to the second IPv6/IPv4 string argument.\r * \`false\`: Otherwise.\r * \`null\`: If conversion for one of the two IPv6/IPv4 strings wasn't successful.`,`### IPv6/IPv4 comparison equality case - IP-prefix notation specified inside the IPv6/IPv4 strings\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA61UwW6DMAy98xW+dZW6QjJgIdKOO+wwafdpQilJtkgUGIGKwz5+bok2ttKyoplDJNvv2XkxlqLBb5OrK1OR1Da1KV55f6zAVPSna+k9e+D78PC0C0HUCrJyW+EpQdi9MwYhZa2sVdaDBUnomsRsTdZksQK0Yw8a0t2/tyJH/C+QT0PMGnhoFDkYgmgIG9MgKryuaqVNB8ZCa7EXXdauMWPLYqIR5OzrzOf0b4KjPudwOmVjyEQvoFYs4JxFkitGM56EYcxvk+SgypkYjCt7CuETGpxhZN+SY6K7Szypz4zemevkH6tN3c3FL6uG2Y+mw8D+naDU7nco5OH1xuYNJ45zjcazQDAekID0Vc9O/hFK6x71NVKTuoxUHZvTCzn/NPsXcL54H6C6RqGCuDzavIE73D27ODU23Yomexssp+FWWn4C162p674EAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string)\r [\r // IPv4 are compared as IPv6 addresses\r '192.168.1.1', '192.168.1.1', // Equal IPs\r '192.168.1.1/24', '192.168.1.255', // 24 bit IP4-prefix is used for comparison\r '192.168.1.1', '192.168.1.255/24', // 24 bit IP4-prefix is used for comparison\r '192.168.1.1/30', '192.168.1.255/24', // 24 bit IP4-prefix is used for comparison\r // IPv6 cases\r 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7994', // Equal IPs\r 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998', // 120 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7998/120', // 120 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998/120', // 120 bit IP6-prefix is used for comparison\r // Mixed case of IPv4 and IPv6\r '192.168.1.1', '::ffff:c0a8:0101', // Equal IPs\r '192.168.1.1/24', '::ffff:c0a8:01ff', // 24 bit IP-prefix is used for comparison\r '::ffff:c0a8:0101', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r '::192.168.1.1/30', '192.168.1.255/24', // 24 bit IP-prefix is used for comparison\r ]\r | extend result = ipv6_is_match(ip1_string, ip2_string)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|result|\r |---|---|---|\r |192.168.1.1|192.168.1.1|1|\r |192.168.1.1/24|192.168.1.255|1|\r |192.168.1.1|192.168.1.255/24|1|\r |192.168.1.1/30|192.168.1.255/24|1|\r |fe80::85d:e82c:9446:7994|fe80::85d:e82c:9446:7994|1|\r |fe80::85d:e82c:9446:7994/120|fe80::85d:e82c:9446:7998|1|\r |fe80::85d:e82c:9446:7994|fe80::85d:e82c:9446:7998/120|1|\r |fe80::85d:e82c:9446:7994/120|fe80::85d:e82c:9446:7998/120|1|\r |192.168.1.1|::ffff:c0a8:0101|1|\r |192.168.1.1/24|::ffff:c0a8:01ff|1|\r |::ffff:c0a8:0101|192.168.1.255/24|1|\r |::192.168.1.1/30|192.168.1.255/24|1|\r \r ### IPv6/IPv4 comparison equality case- IP-prefix notation specified inside the IPv6/IPv4 strings and as additional argument of the \`ipv6_is_match()\` function\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA61UTW+DMAy98yt86yp1kKSBgqX9gB0m7T5NVQpJF6kFRGjFYT9+5mMSXdu1TAsHS8/oPfvFTqZq+jY7/WBLvnZ1ZfMt9mEBthQ/obLSxja4K/Lt3HvzIAjg+fUoQVUa0mJfUsxAuRaMQGVZpZ3TDjyY8UT4PIp97vPZAuiMENYhS75o+ZYcNrYmBvnYq4F1cHDEa4pqELGuyE85AyGJZISIMCRg4BTyL5xndfacQk7khMGmCFJFbpCI0TFDjMMMdSxSTKSMcJUkXQtXcmFfDXCx6uQpDvrRzZ6uyQVE8otkTDku2CDH/kOO3ZRbTZWjv19sQ4nWXCjMMJB51ll+aUroThENHUyZipFxY06k7zf2lIbxSyPY3dl0ExHHdS/ZGXXfy3TD3r1P0E2tySDazsOuhifa9GO0tm69V3X6MXoKxm/A9/LPvwDOD5PYNAQAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip1_string:string, ip2_string:string, prefix:long)\r [\r // IPv4 are compared as IPv6 addresses \r '192.168.1.1', '192.168.1.0', 31, // 31 bit IP4-prefix is used for comparison\r '192.168.1.1/24', '192.168.1.255', 31, // 24 bit IP4-prefix is used for comparison\r '192.168.1.1', '192.168.1.255', 24, // 24 bit IP4-prefix is used for comparison\r // IPv6 cases\r 'fe80::85d:e82c:9446:7994', 'fe80::85d:e82c:9446:7995', 127, // 127 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994/127', 'fe80::85d:e82c:9446:7998', 120, // 120 bit IP6-prefix is used for comparison\r 'fe80::85d:e82c:9446:7994/120', 'fe80::85d:e82c:9446:7998', 127, // 120 bit IP6-prefix is used for comparison\r // Mixed case of IPv4 and IPv6\r '192.168.1.1/24', '::ffff:c0a8:01ff', 127, // 127 bit IP6-prefix is used for comparison\r '::ffff:c0a8:0101', '192.168.1.255', 120, // 120 bit IP6-prefix is used for comparison\r '::192.168.1.1/30', '192.168.1.255/24', 127, // 120 bit IP6-prefix is used for comparison\r ]\r | extend result = ipv6_is_match(ip1_string, ip2_string, prefix)\r \`\`\`\r \r **Output**\r \r |ip1_string|ip2_string|prefix|result|\r |---|---|---|---|\r |192.168.1.1|192.168.1.0|31|1|\r |192.168.1.1/24|192.168.1.255|31|1|\r |192.168.1.1|192.168.1.255|24|1|\r |fe80::85d:e82c:9446:7994|fe80::85d:e82c:9446:7995|127|1|\r |fe80::85d:e82c:9446:7994/127|fe80::85d:e82c:9446:7998|120|1|\r |fe80::85d:e82c:9446:7994/120|fe80::85d:e82c:9446:7998|127|1|\r |192.168.1.1/24|::ffff:c0a8:01ff|127|1|\r |::ffff:c0a8:0101|192.168.1.255|120|1|\r |::192.168.1.1/30|192.168.1.255/24|127|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/ipv6-is-matchfunction","ipv6-is-matchfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isempty","Returns `true` if the argument is an empty string or is null.",`## Syntax\r \r \`isempty(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r |*value*|string|✓| The value to check if empty or null.|\r \r ## Returns\r \r A boolean value indicating whether *value* is an empty string or is null.`,`|x|isempty(x)|\r |---|---|\r | "" | true|\r |"x" | false|\r |parsejson("")|true|\r |parsejson("[]")|false|\r |parsejson("{}")|false|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isemptyfunction","isemptyfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isfinite","Returns whether the input is a finite value, meaning it's neither infinite nor NaN.",`## Syntax\r \r \`isfinite(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r |*number*|real|✓| The value to check if finite.|\r \r ## Returns\r \r \`true\` if x is finite and \`false\` otherwise.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1XQNVQoyVcwVCguSS1QMOTlqlFIrShJzUtRqFSwVTDQM0ASScksA4oZ6hloVehXIolnFqdl5mWWpNrCGBpAlZoAbqyHpGYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from -1 to 1 step 1\r | extend y = 0.0\r | extend div = 1.0*x/y\r | extend isfinite=isfinite(div)\r \`\`\`\r \r **Output**\r \r |x|y|div|isfinite|\r |---|---|---|---|\r |-1|0|-\u221E|0|\r |0|0|NaN|0|\r |1|0|\u221E|0|\r \r ## See also\r \r * To check if a value is null, see [isnull()](isnullfunction.md).\r * To check if a value is infinite, see [isinf()](isinffunction.md).\r * To check if a value is NaN (Not-a-Number), see [isnan()](isnanfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isfinitefunction","isfinitefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isinf","Returns whether the input is an infinite (positive or negative) value.",`## Syntax\r \r \`isinf(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r |*number*|real|✓| The value to check if infinite.|\r \r ## Returns\r \r \`true\` if x is a positive or negative infinite and \`false\` otherwise.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1XQNVQoyVcwVCguSS1QMOTlqlFIrShJzUtRqFSwVTDQM0ASScksA4oZ6hloVehXIolnFmfmpdmCSQ2gGk0AQSRax2AAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from -1 to 1 step 1\r | extend y = 0.0\r | extend div = 1.0*x/y\r | extend isinf=isinf(div)\r \`\`\`\r \r **Output**\r \r |x|y|div|isinf|\r |---|---|---|---|\r |-1|0|-\u221E|true|\r |0|0|NaN|false|\r |1|0|\u221E|true|\r \r ## See also\r \r * To check if a value is null, see [isnull()](isnullfunction.md).\r * To check if a value is finite, see [isfinite()](isfinitefunction.md).\r * To check if a value is NaN (Not-a-Number), see [isnan()](isnanfunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isinffunction","isinffunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isnan","Returns whether the input is a Not-a-Number (NaN) value.",`## Syntax\r \r \`isnan(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r |*number*|scalar|✓| The value to check if NaN.|\r \r ## Returns\r \r \`true\` if x is NaN and \`false\` otherwise.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1XQNVQoyVcwVCguSS1QMOTlqlFIrShJzUtRqFSwVdDQNdSq0FRAEk3JLAOKG+oZaFXoVyKJZxbnJebZgkkNoBpNAG+vyvhkAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from -1 to 1 step 1\r | extend y = (-1*x) \r | extend div = 1.0*x/y\r | extend isnan=isnan(div)\r \`\`\`\r \r **Output**\r \r |x|y|div|isnan|\r |---|---|---|---|\r |-1|1|-1|false|\r |0|0|NaN|true|\r |1|-1|-1|false|\r \r ## See also\r \r * To check if a value is null, see [isnull()](isnullfunction.md).\r * To check if a value is finite, see [isfinite()](isfinitefunction.md).\r * To check if a value is infinite, see [isinf()](isinffunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isnanfunction","isnanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isnotempty","Returns `true` if the argument isn't an empty string, and it isn't null.",`> **Deprecated aliases:** notempty()\r \r ## Syntax\r \r \`isnotempty(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r |*value*|scalar|✓| The value to check if not empty or null.|\r \r ## Returns\r \r \`true\` if *value* is not null and \`false\` otherwise.`,`Find the storm events for which there's a begin location.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVcgszssvSc0tKKnUcEpNz8zzSSzRVEjMS8GUyM/TBAAbLqnSQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where isnotempty(BeginLat) and isnotempty(BeginLon)\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isnotemptyfunction","isnotemptyfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isnotnull","Returns `true` if the argument isn't null.",`> **Deprecated aliases:** notnull()\r \r ## Syntax\r \r \`isnotnull(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r |*value*|scalar|✓| The value to check if not null.|\r \r ## Returns\r \r \`true\` if *value* is not null and \`false\` otherwise.`,`Find the storm events for which there's a begin location.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVcgszssvySvNydFwSk3PzPNJLNFUSMxLwRDPz9MEAOSBMshAAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where isnotnull(BeginLat) and isnotnull(BeginLon)\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isnotnullfunction","isnotnullfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"isnull","Evaluates its sole argument and returns a `bool` value indicating if the argument evaluates to a null value.",'> [!NOTE]\r\n> String values can\'t be null. Use [isempty](./isemptyfunction.md) to determine if a value of type `string` is empty or not.\r\n\r\n## Syntax\r\n\r\n`isnull(`*Expr*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n| -- | -- | -- | -- |\r\n|*value*|scalar|✓| The value to check if not null.|\r\n\r\n## Returns\r\n\r\n`true` if *value* is not null and `false` otherwise.\r\n\r\n|x |`isnull(x)`|\r\n|-----------------|-----------|\r\n|`""` |`false` |\r\n|`"x"` |`false` |\r\n|`parse_json("")` |`true` |\r\n|`parse_json("[]")`|`false` |\r\n|`parse_json("{}")`|`false` |',`Find the storm events for which there's not a begin location.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVcgszivNydFwSk3PzPNJLNFUSMxLQRXMz9MEABMUXTY6AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where isnull(BeginLat) and isnull(BeginLon)\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/isnullfunction","isnullfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"jaccard_index","Calculates the [Jaccard index](https://en.wikipedia.org/wiki/Jaccard_index) of two input sets.",`## Syntax\r \r \`jaccard_index\`(*set1*, *set2*)\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *set1*| dynamic | ✓ | The array representing the first set for the calculation.|\r | *set2*| dynamic | ✓ | The array representing the second set for the calculation.|\r \r > [!NOTE]\r > Duplicate values in the input arrays are ignored.\r \r ## Returns\r \r The [Jaccard index](https://en.wikipedia.org/wiki/Jaccard_index) of the two input sets. The Jaccard index formula is |*set1* \u2229 *set2*| / |*set1* \u222A *set2*|.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShOLTG0TanMS8zNTNaINtQx0jGO1dQBCRuhCeuYxGryctUopFaUpOalKGQlJicnFqXYQun4zLyU1AoNkHEQ3ZoAjvvou2AAAAA=" target="_blank">Run the query</a>\r\n\r\n```\r\nprint set1=dynamic([1,2,3]), set2=dynamic([1,2,3,4])\r\n| extend jaccard=jaccard_index(set1, set2)\r\n```\r\n\r\n**Output**\r\n\r\n|`set1`|`set2`|`jaccard`|\r\n|---|---|---|\r\n|[1,2,3]|[1,2,3,4]|0.75|',"https://docs.microsoft.com/azure/data-explorer/kusto/query/jaccard-index-function","jaccard-index-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"join","Merge the rows of two tables to form a new table by matching values of the specified columns from each table.",'Kusto Query Language (KQL) offers many kinds of joins that each affect the schema and rows in the resultant table in different ways. For example, if you use an `inner` join, the table has the same columns as the left table, plus the columns from the right table. For best performance, if one table is always smaller than the other, use it as the left side of the `join` operator. The following image provides a visual representation of the operation performed by each join.\r\n\r\n\r\n\r\n## Syntax\r\n\r\n*LeftTable* `|` `join` [ `kind` `=` *JoinFlavor* ] [ *Hints* ] `(`*RightTable*`)` `on` *Conditions*\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*LeftTable*|string|✓|The left table or tabular expression, sometimes called the outer table, whose rows are to be merged. Denoted as `$left`.|\r\n|*JoinFlavor*|string||The type of join to perform: `innerunique`, `inner`, `leftouter`, `rightouter`, `fullouter`, `leftanti`, `rightanti`, `leftsemi`, `rightsemi`. The default is `innerunique`. For more information about join flavors, see [Returns](#returns).|\r\n|*Hints*|string||Zero or more space-separated join hints in the form of *Name* `=` *Value* that control the behavior of the row-match operation and execution plan. For more information, see [Hints](#hints).\r\n|*RightTable*|string|✓|The right table or tabular expression, sometimes called the inner table, whose rows are to be merged. Denoted as `$right`.|\r\n|*Conditions*|string|✓|Determines how rows from *LeftTable* are matched with rows from *RightTable*. If the columns you want to match have the same name in both tables, use the syntax `ON` *ColumnName*. Otherwise, use the syntax `ON $left.`*LeftColumn* `==` `$right.`*RightColumn*. To specify multiple conditions, you can either use the "and" keyword or separate them with commas. If you use commas, the conditions are evaluated using the "and" logical operator.|\r\n\r\n> [!TIP]\r\n> For best performance, if one table is always smaller than the other, use it as the left side of the join.\r\n\r\n### Hints\r\n\r\n|Hint key |Values |Description |\r\n|---|---|---|\r\n|`hint.remote` |`auto`, `left`, `local`, `right` |See [Cross-Cluster Join](joincrosscluster.md)|\r\n|`hint.strategy=broadcast` |Specifies the way to share the query load on cluster nodes. |See [broadcast join](broadcastjoin.md) |\r\n|`hint.shufflekey=<key>` |The `shufflekey` query shares the query load on cluster nodes, using a key to partition data. |See [shuffle query](shufflequery.md) |\r\n|`hint.strategy=shuffle` |The `shuffle` strategy query shares the query load on cluster nodes, where each node processes one partition of the data. |See [shuffle query](shufflequery.md) |\r\n\r\n> [!NOTE]\r\n> The join hints don\'t change the semantic of `join` but may affect performance.\r\n\r\n## Returns\r\n\r\nThe return schema and rows depend on the join flavor. The join flavor is specified with the *kind* keyword. The following flavors of the join operator are supported:\r\n\r\n| Join flavor | Returns | Illustration |\r\n| --- | --- | --- |\r\n| [innerunique](join-innerunique.md) (default) | Inner join with left side deduplication<br />**Schema**: All columns from both tables, including the matching keys<br />**Rows**: All deduplicated rows from the left table that match rows from the right table | :::image type="icon" source="images/joinoperator/join-innerunique.png" border="false"::: |\r\n| [inner](join-inner.md) | Standard inner join<br />**Schema**: All columns from both tables, including the matching keys<br />**Rows**: Only matching rows from both tables | :::image type="icon" source="images/joinoperator/join-inner.png" border="false"::: |\r\n| [leftouter](join-leftouter.md) | Left outer join<br />**Schema**: All columns from both tables, including the matching keys<br />**Rows**: All records from the left table and only matching rows from the right table | :::image type="icon" source="images/joinoperator/join-leftouter.png" border="false"::: |\r\n| [rightouter](join-rightouter.md) | Right outer join<br />**Schema**: All columns from both tables, including the matching keys<br />**Rows**: All records from the right table and only matching rows from the left table | :::image type="icon" source="images/joinoperator/join-rightouter.png" border="false"::: |\r\n| [fullouter](join-fullouter.md) | Full outer join<br />**Schema**: All columns from both tables, including the matching keys<br />**Rows**: All records from both tables with unmatched cells populated with null | :::image type="icon" source="images/joinoperator/join-fullouter.png" border="false"::: |\r\n| [leftsemi](join-leftsemi.md) | Left semi join<br />**Schema**: All columns from the left table<br />**Rows**: All records from the left table that match records from the right table | :::image type="icon" source="images/joinoperator/join-leftsemi.png" border="false"::: |\r\n| [`leftanti`, `anti`, `leftantisemi`](join-leftanti.md) | Left anti join and semi variant<br />**Schema**: All columns from the left table<br />**Rows**: All records from the left table that don\'t match records from the right table | :::image type="icon" source="images/joinoperator/join-leftanti.png" border="false"::: |\r\n| [rightsemi](join-rightsemi.md) | Right semi join<br />**Schema**: All columns from the right table<br />**Rows**: All records from the right table that match records from the left table | :::image type="icon" source="images/joinoperator/join-rightsemi.png" border="false"::: |\r\n| [`rightanti`, `rightantisemi`](join-rightanti.md) | Right anti join and semi variant<br />**Schema**: All columns from the right table<br />**Rows**: All records from the right table that don\'t match records from the left table | :::image type="icon" source="images/joinoperator/join-rightanti.png" border="false"::: |\r\n\r\n### Cross-join\r\n\r\nKQL doesn\'t provide a cross-join flavor. However, you can achieve a cross-join effect by using a placeholder key approach.\r\n\r\nIn the following example, a placeholder key is added to both tables and then used for the inner join operation, effectively achieving a cross-join-like behavior:\r\n\r\n`X | extend placeholder=1 | join kind=inner (Y | extend placeholder=1) on placeholder`\r\n\r\n## See also\r\n\r\n* [Cross-cluster join](joincrosscluster.md)\r\n* [Broadcast join](broadcastjoin.md)\r\n* [Shuffle query](shufflequery.md)',"","https://docs.microsoft.com/azure/data-explorer/kusto/query/joinoperator","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"log","The natural logarithm is the base-e logarithm: the inverse of the natural exponential function (exp).",`## Syntax\r \r \`log(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*number*| real | ✓ | The number for which to calculate the logarithm.|\r \r ## Returns\r \r * \`log()\` returns the natural logarithm of the input.\r * \`null\` if the argument is negative or null or can't be converted to a \`real\` value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNyU/XMNUEAE7U1nYTAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=log(5)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |1.6094379124341003|\r \r ## See also\r \r * For common (base-10) logarithms, see [log10()](log10-function.md).\r * For base-2 logarithms, see [log2()](log2-function.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/log-function","log-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"log10","`log10()` returns the common (base-10) logarithm of the input.",`## Syntax\r \r \`log10(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*number*| real | ✓ | The number for which to calculate the base-10 logarithm.|\r \r ## Returns\r \r * The common logarithm is the base-10 logarithm: the inverse of the exponential function (exp) with base 10.\r * \`null\` if the argument is negative or null or can't be converted to a \`real\` value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNyU83NNAw1QQAQyXyFRUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=log10(5)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |0.69897000433601886|\r \r ## See also\r \r * For natural (base-e) logarithms, see [log()](log-function.md).\r * For base-2 logarithms, see [log2()](log2-function.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/log10-function","log10-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"log2","The logarithm is the base-2 logarithm: the inverse of the exponential function (exp) with base 2.",`## Syntax\r \r \`log2(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*number*| real | ✓ | The number for which to calculate the base-2 logarithm.|\r \r ## Returns\r \r * The logarithm is the base-2 logarithm: the inverse of the exponential function (exp) with base 2.\r * \`null\` if the argument is negative or null or can't be converted to a \`real\` value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNyU830jDVBAAnF4/MFAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=log2(5)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |2.3219280948873622|\r \r ## See also\r \r * For natural (base-e) logarithms, see [log()](log-function.md).\r * For common (base-10) logarithms, see [log10()](log10-function.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/log2-function","log2-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"loggamma","Computes log of the absolute value of the [gamma function](https://en.wikipedia.org/wiki/Gamma_function)",`## Syntax\r \r \`loggamma(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*number*| real | ✓ | The number for which to calculate the gamma.|`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNyU9PT8zNTdQw1QQAjpO9/xgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=loggamma(5)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |3.1780538303479458|\r \r ## Returns\r \r * Returns the natural logarithm of the absolute value of the gamma function of x.\r * For computing gamma function, see [gamma()](gammafunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/loggammafunction","loggammafunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"lookup","Extends the columns of a fact table with values looked-up in a dimension table.","```\r\nFactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2\r\n```\r\n\r\nHere, the result is a table that extends the `FactTable` (`$left`) with data from `DimensionTable` (referenced by `$right`)\r\n by performing a lookup of each pair (`CommonColumn`,`Col`) from the former table\r\nwith each pair (`CommonColumn1`,`Col2`) in the latter table.\r\nFor the differences between fact and dimension tables, see [fact and dimension tables](../concepts/fact-and-dimension-tables.md).\r\n\r\nThe `lookup` operator performs an operation similar to the [join operator](joinoperator.md)\r\nwith the following differences:\r\n\r\n* The result doesn't repeat columns from the `$right` table that are the basis\r\n for the join operation.\r\n* Only two kinds of lookup are supported, `leftouter` and `inner`,\r\n with `leftouter` being the default.\r\n* In terms of performance, the system by default assumes that the `$left` table\r\n is the larger (facts) table, and the `$right` table is the smaller (dimensions)\r\n table. This is exactly opposite to the assumption used by the `join` operator.\r\n* The `lookup` operator automatically broadcasts the `$right` table to the `$left`\r\n table (essentially, behaves as if `hint.broadcast` was specified). This limits the size of the `$right` table.\r\n\r\n> [!NOTE]\r\n> If the right side of the lookup is larger than several tens of MBs, the query will fail.\r\n>\r\n> You can run the following query to estimate the size of the right side in bytes:\r\n>\r\n> ```kusto\r\n> rightSide\r\n> | summarize sum(estimate_data_size(*))\r\n> ```\r\n\r\n## Syntax\r\n\r\n*LeftTable* `|` `lookup` [`kind` `=` (`leftouter`|`inner`)] `(`*RightTable*`)` `on` *Conditions*\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*LeftTable*|string|✓|The table or tabular expression that is the basis for the lookup. Denoted as `$left`.|\r\n|*RightTable*|string|✓|The table or tabular expression that is used to \"populate\" new columns in the fact table. Denoted as `$right`.|\r\n|*Attributes*|string|✓|A comma-delimited list of one or more rules that describe how rows from *LeftTable* are matched to rows from *RightTable*. Multiple rules are evaluated using the `and` logical operator. See [Rules](#rules).|\r\n|`kind`|string||Determines how to treat rows in *LeftTable* that have no match in *RightTable*. By default, `leftouter` is used, which means all those rows will appear in the output with null values used for the missing values of *RightTable* columns added by the operator. If `inner` is used, such rows are omitted from the output. Other kinds of join aren't supported by the `lookup` operator.|\r\n\r\n### Rules\r\n\r\n| Rule kind | Syntax | Predicate |\r\n|---|---|---|\r\n| Equality by name | *ColumnName* | `where` *LeftTable*.*ColumnName* `==` *RightTable*.*ColumnName* |\r\n| Equality by value | `$left.`*LeftColumn* `==` `$right.`*RightColumn* | `where` `$left.`*LeftColumn* `==` `$right.`*RightColumn |\r\n\r\n> [!NOTE]\r\n> In case of 'equality by value', the column names *must* be qualified with the applicable owner table denoted by `$left` and `$right` notations.\r\n\r\n## Returns\r\n\r\nA table with:\r\n\r\n* A column for every column in each of the two tables, including the matching keys.\r\n The columns of the right side will be automatically renamed if there are name conflicts.\r\n* A row for every match between the input tables. A match is a row selected from one table that has the same value for all the `on` fields as a row in the other table.\r\n* The Attributes (lookup keys) will appear only once in the output table.\r\n* If `kind` is unspecified or `kind=leftouter`, then in addition to the inner matches, there's a row for every row on the left (and/or right), even if it has no match. In that case, the unmatched output cells contain nulls.\r\n* If `kind=inner`, then there's a row in the output for every combination of matching rows from left and right.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32RsW4CMQyG93sKKxOVslDahYoBqOhatWwVQ+4wyMJJqotpVakP3wQ3h2BAGRL7k+X/UxgFVq6TtWsZZ1sn+eTX6C1+T5P0FPb2FfsUg+Nar5wn/vmv7uCjATBjY8EsiDnfuXxxgsnYQu4vyZIpSAzKJjfYQ2Hvgl9YoFk4Zo+9ssfC1uRPY3kuxoNpNk8NZ5ln8tcuNwXsnMmlS5saqXqUJW3u7XX9gIfAijvFNfQ5M5hUeq3yGlxzq4KQ704Kw180v8CZHz/hQGE7Y9xJPAr2gyDEANXMgjr9AbRCGP7OAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let FactTable=datatable(Row:string,Personal:string,Family:string) [\r "1", "Bill", "Gates",\r "2", "Bill", "Clinton",\r "3", "Bill", "Clinton",\r "4", "Steve", "Ballmer",\r "5", "Tim", "Cook"\r ];\r let DimTable=datatable(Personal:string,Family:string,Alias:string) [\r "Bill", "Gates", "billg",\r "Bill", "Clinton", "billc",\r "Steve", "Ballmer", "steveb",\r "Tim", "Cook", "timc"\r ];\r FactTable\r | lookup kind=leftouter DimTable on Personal, Family\r \`\`\`\r \r Row | Personal | Family | Alias\r --------|-----------|----------|--------\r 1 | Bill | Gates | billg\r 2 | Bill | Clinton | billc\r 3 | Bill | Clinton | billc\r 4 | Steve | Ballmer | steveb\r 5 | Tim | Cook | timc`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/lookupoperator","lookupoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_bag","Creates a `dynamic` JSON property bag (dictionary) of all the values of *expr* in the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`make_bag\` \`(\`*expr* [\`,\` *maxSize*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | dynamic | ✓ | The expression used for the aggregation calculation. |\r | *maxSize* | int | | The limit on the maximum number of elements returned. The default and max value is 1048576. |\r \r > [!NOTE]\r > \`make_dictionary()\` has been deprecated in favor of \`make_bag()\`. The legacy version has a default *maxSize* limit of 128.\r \r ## Returns\r \r Returns a \`dynamic\` JSON property bag (dictionary) of all the values of *Expr* in the group, which are property bags. Non-dictionary values will be skipped.\r If a key appears in more than one row, an arbitrary value, out of the possible values for this key, will be selected.`,`The following example shows a packed JSON property bag.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WNzQrDIAyA7z5F8FTBw35uG32L3saQqKFItRNrxyh9+GWjhS055csHX6QKHbTgsfLaSE0uj3yZagljr+GJcabtUuImgEd+jMNRapD8Nij1Dz7t2P7h844d4/tVdGIFelUaPWSuW+xNRjd841tVsTLNKWEJC4EPrrYJBzLsNlm9AS6AdnS4AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(prop:string, value:string)\r [\r "prop01", "val_a",\r "prop02", "val_b",\r "prop03", "val_c",\r ];\r T\r | extend p = bag_pack(prop, value)\r | summarize dict=make_bag(p)\r \`\`\`\r \r **Output**\r \r |dict|\r |----|\r |{ "prop01": "val_a", "prop02": "val_b", "prop03": "val_c" } |\r \r Use the [bag_unpack()](bag-unpackplugin.md) plugin for transforming the bag keys in the make_bag() output into columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WNvQrDMAyEdz+F8BSDh/5sLXmLbKUYOREhxHZNYpdS+vCVTQKttJy+O3GOEnTQwoCJ1zpq4vKIlzUtUxg1PNFl2i4lbgJ4ZEkcjlKDZNug1D/4tGP7h8877hnfr6ITH6BXojBA5HaLo4nYz7V8a1UcWbP3uExvKonW40yGRROLRyWFqVomh/rOUn0B38wbbdIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(prop:string, value:string)\r [\r "prop01", "val_a",\r "prop02", "val_b",\r "prop03", "val_c",\r ];\r T\r | extend p = bag_pack(prop, value)\r | summarize bag=make_bag(p)\r | evaluate bag_unpack(bag)\r \`\`\`\r \r **Output**\r \r |prop01|prop02|prop03|\r |---|---|---|\r |val_a|val_b|val_c|\r \r ## See also\r \r [bag_unpack()](bag-unpackplugin.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/make-bag-aggfunction","make-bag-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_bag_if","Creates a `dynamic` JSON property bag (dictionary) of *expr* values in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`make_bag_if(\`*expr*\`,\` *predicate* [\`,\` *maxSize*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | dynamic | ✓ | The expression used for the aggregation calculation. |\r | *predicate* | bool | ✓ | The predicate that evaluates to \`true\`, in order for *expr* to be added to the result. |\r | *maxSize* | int | | The limit on the maximum number of elements returned. The default and max value is 1048576. |\r \r ## Returns\r \r Returns a \`dynamic\` JSON property bag (dictionary) of *expr* values in records for which *predicate* evaluates to \`true\`. Non-dictionary values will be skipped.\r If a key appears in more than one row, an arbitrary value, out of the possible values for this key, will be selected.\r \r > [!NOTE]\r > This function without the predicate is similar to [\`make_bag\`](./make-bag-aggfunction.md).`,`The following example shows a packed JSON property bag.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WOywqDQAxF9/MVwZXCLPrYWfwLd0Uko1EGRx1mYimlH99YtNhkc8O5geOIoYQCWmRZ4yj1YfZ55GCnXsMD3UK/ywdqbYNMuZlnl6m7Aplk/TidEw2J1GuUwGEhfYCXHRoJHbr4R687bbZXVd1Uqd5AT6apBS9+BvvaYzN89TavTCpxGUcM9kUgZlyMOFC9dm2X+oNw9gEXEDu16AAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(prop:string, value:string, predicate:bool)\r [\r "prop01", "val_a", true,\r "prop02", "val_b", false,\r "prop03", "val_c", true\r ];\r T\r | extend p = bag_pack(prop, value)\r | summarize dict=make_bag_if(p, predicate)\r \`\`\`\r \r **Output**\r \r |dict|\r |----|\r |{ "prop01": "val_a", "prop03": "val_c" } |\r \r Use [bag_unpack()](bag-unpackplugin.md) plugin for transforming the bag keys in the make_bag_if() output into columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WOzQqDMBCE73mKxZNCDv25WXwLb6XIxqwSjBpiUkrpw3cjWuzuZZb5ZhlLAWqoQGPgVZZy52dXLsGbqZfwRBvpdzlP2rQYqFTzbAtxF8CTpcTpnEnIGG+QRfCR5MG87KZi0aFd/tzr7rZbVDxuohYfoFegSYPjfgr7xmE7rPW2XgUjSxxH9OZNiahGHKhJqOlyd+ibSEoZ1uurOK3PWBZfye97QAIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(prop:string, value:string, predicate:bool)\r [\r "prop01", "val_a", true,\r "prop02", "val_b", false,\r "prop03", "val_c", true\r ];\r T\r | extend p = bag_pack(prop, value)\r | summarize bag=make_bag_if(p, predicate)\r | evaluate bag_unpack(bag)\r \`\`\`\r \r **Output**\r \r |prop01|prop03|\r |---|---|\r |val_a|val_c|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/make-bag-if-aggfunction","make-bag-if-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_datetime","Creates a [datetime](./scalar-data-types/datetime.md) scalar value between the specified date and time.",`## Syntax\r \r \`make_datetime(\`*year*, *month*, *day*\`)\`\r \r \`make_datetime(\`*year*, *month*, *day*, *hour*, *minute*\`)\`\r \r \`make_datetime(\`*year*, *month*, *day*, *hour*, *minute*, *second*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*year*| int | ✓ | The year value between 0 to 9999.|\r |*month*| int | ✓ | The month value between 1 to 12. |\r |*day*| int | ✓ | The day value between 1 to 28-31, depending on the month.|\r |*hour*| int | | The hour value between 0 to 23.|\r |*minute*| int | | The minute value between 0 to 59.|\r |*second*| double | | The second value between 0 to 59.9999999.|\r \r ## Returns\r \r If successful, the result will be a [datetime](./scalar-data-types/datetime.md) value, otherwise, the result will be null.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUahMTSyKz83PK8mIT0msVLBVyE3MTgUyS1JLMnNTNYwMDM11DA10DAw1AS/izjAwAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print year_month_day = make_datetime(2017,10,01)\r \`\`\`\r \r **Output**\r \r |year_month_day|\r |---|\r |2017-10-01 00:00:00.0000000|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUahMTSyKz83PK8mIT0msjM/ILwVyM/NKS1IVbBVyE7NTgcIlqSWZuakaRgaG5jqGBjoGhjqGRkCGJgB7AoRjQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print year_month_day_hour_minute = make_datetime(2017,10,01,12,10)\r \`\`\`\r \r **Output**\r \r |year_month_day_hour_minute|\r |---|\r |2017-10-01 12:10:00.0000000|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAw3JSwqAIBAA0Ku4LBjCsY+rzjJIDijhGDYuvH0tH+9pWdQMDo1KFU0Uw6BU+88sXZlevqpEc5oSbv5XWXPhyVn0gBYsAjpABLugW7f98PMHKbr/e1MAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print year_month_day_hour_minute_second = make_datetime(2017,10,01,12,11,0.1234567)\r \`\`\`\r \r **Output**\r \r |year_month_day_hour_minute_second|\r |---|\r |2017-10-01 12:11:00.1234567|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/make-datetimefunction","make-datetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_list","Creates a `dynamic` array of all the values of *expr* in the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r > **Deprecated aliases:** makelist()\r \r ## Syntax\r \r \`make_list(\`*expr* [\`,\` *maxSize*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | dynamic | ✓ | The expression used for the aggregation calculation. |\r | *maxSize* | int | | The maximum number of elements returned. The default and max value is 1048576. |\r \r > [!NOTE]\r > The deprecated version has a default *maxSize* limit of 128.\r \r ## Returns\r \r Returns a \`dynamic\` array of all the values of *expr* in the group.\r If the input to the \`summarize\` operator isn't sorted, the order of elements in the resulting array is undefined.\r If the input to the \`summarize\` operator is sorted, the order of elements in the resulting array tracks that of the input.\r \r > [!TIP]\r > Use the [\`array_sort_asc()\`](./arraysortascfunction.md) or [\`array_sort_desc()\`](./arraysortdescfunction.md) function to create an ordered list by some key.`,`### One column\r \r The following example makes a list out of a single column:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XPzwrCMAwG8Huh7xB2crCD4v+JJx9DROIWtmKbzrYDFR/eTldNLuGX7/JpCuBb7MjDHmoMcS+aYMJoqAQfnOKmAK9qOtieQwmKQy7FUQqIk8U/cqMpK2BejOZvPbpBFkkcVSHFftgRB2wsR1sma+k+0upPXYqtk9kq0SYRWx5pm6imaqTZVIrTTopvUSle4Htj0KkngXlo5UMsb/BK5+H+dM/ff3I+dBkBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let shapes = datatable (name: string, sideCount: int)\r [\r "triangle", 3,\r "square", 4,\r "rectangle", 4,\r "pentagon", 5,\r "hexagon", 6,\r "heptagon", 7,\r "octagon", 8,\r "nonagon", 9,\r "decagon", 10\r ];\r shapes\r | summarize mylist = make_list(name)\r \`\`\`\r \r **Output**\r \r |mylist|\r |---|\r |["triangle","square","rectangle","pentagon","hexagon","heptagon","octagon","nonagon","decagon"]|\r \r ### Using the 'by' clause\r \r The following example runs a query using the \`by\` clause:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XQ3YrCMBAF4PtA3uEgCCv0wp/d9Y9eiU/gpYjEdqjBZlqbVFR8eKPbcSc3w5dzc6akAH80NXmkyE2I71ASvtg4WsCHxnKRwNucVlXLYQHLYaDVVivE6cV/w0VJvQSTpDN/bk3zkm+RhrIgsQ/WxMEUFUf7ETvStaPff6olNhWrMqGZEFfc0Vwop6yj0VCr3VKrv6JaPeBb50xj7wR3K60PsbwzJ9q/9nf3AQ43WL++EG+kfAx9DoE+xkhTDJ/VCjwFQQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let shapes = datatable (name: string, sideCount: int)\r [\r "triangle", 3,\r "square", 4,\r "rectangle", 4,\r "pentagon", 5,\r "hexagon", 6,\r "heptagon", 7,\r "octagon", 8,\r "nonagon", 9,\r "decagon", 10\r ];\r shapes\r | summarize mylist = make_list(name) by isEvenSideCount = sideCount % 2 == 0\r \`\`\`\r \r **Output**\r \r |isEvenSideCount| mylist|\r |---|---|\r |false|["triangle","pentagon","heptagon","nonagon"]|\r |true|["square","rectangle","hexagon","octagon","decagon"]|\r \r ### Packing a dynamic object\r \r The following examples show how to [pack](./packfunction.md) a dynamic object in a column before making it a list.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03Pz0rEMBAG8Hsg7zAUhBZ6WP/rSk/iE3gUWabN0A3bTGuTyq748E6ws5ocEn75JvANlCDucaIIDThMstuBoGQMtIWYZs99DdE7eh4XTlvwnCpr3qwBWYW8I/cDFTVc16vFjwXnLDcqM3VJY2eciBP2I4vdqu3puNLdH00au1cbO6UHJR55pUclR91Klxtr3p+s+S1qzTfQMRE7cFK6xX43YXcoi9xZ0vmopYZ2Lv71r/JwXELA2X8RhNPgY5JPAh5ol++lq6A9gY8vn8SvOiaJ8xdwAVfQNLD5ARd0KSV7AQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let shapes = datatable (name: string, sideCount: int)\r [\r "triangle", 3,\r "square", 4,\r "rectangle", 4,\r "pentagon", 5,\r "hexagon", 6,\r "heptagon", 7,\r "octagon", 8,\r "nonagon", 9,\r "decagon", 10\r ];\r shapes\r | extend d = bag_pack("name", name, "sideCount", sideCount)\r | summarize mylist = make_list(d) by isEvenSideCount = sideCount % 2 == 0\r \`\`\`\r \r **Output**\r \r |isEvenSideCount|mylist|\r |---|---|\r |false|[{"name":"triangle","sideCount":3},{"name":"pentagon","sideCount":5},{"name":"heptagon","sideCount":7},{"name":"nonagon","sideCount":9}]|\r |true|[{"name":"square","sideCount":4},{"name":"rectangle","sideCount":4},{"name":"hexagon","sideCount":6},{"name":"octagon","sideCount":8},{"name":"decagon","sideCount":10}]|\r \r ## See also\r \r [\`make_list_if\`](./makelistif-aggfunction.md) operator is similar to \`make_list\`, except it also accepts a predicate.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/makelist-aggfunction","makelist-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_list_if","Creates a `dynamic` array of *expr* values in the group for which *predicate* evaluates to `true`.","[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r\n\r\n## Syntax\r\n\r\n`make_list_if(`*expr*`,` *predicate* [`,` *maxSize*]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *expr* | string | ✓ | The expression used for the aggregation calculation. |\r\n| *predicate* | string | ✓ | A predicate that has to evaluate to `true` in order for *expr* to be added to the result. |\r\n| *maxSize* | integer | | The maximum number of elements returned. The default and max value is 1048576. |\r\n\r\n## Returns\r\n\r\nReturns a `dynamic` array of *expr* vlaues in the group for which *predicate* evaluates to `true`.\r\nIf the input to the `summarize` operator is not sorted, the order of elements in the resulting array is undefined.\r\nIf the input to the `summarize` operator is sorted, the order of elements in the resulting array tracks that of the input.",`The following example shows a list of names with more than 4 letters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2OsQrCMBRF90D+4dHJQhZFUSu6Ck4i3URCiq9p8CWBJB0UP95HLXc6Z7gcwgItHOFpCq8jXATjsckluWAV67eOve5cKkNDMdhairsUAFBd4hAqBXv1x6sZiXG5m/mMMVlks9rM5saPkcVWisdBilaKL+TRe5PcB8GbF2pyuWjXTw0KOIIwTFDDCdb1D5O20PKtAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(name:string, day_of_birth:long)\r [\r "John", 9,\r "Paul", 18,\r "George", 25,\r "Ringo", 7\r ];\r T\r | summarize make_list_if(name, strlen(name) > 4)\r \`\`\`\r \r **Output**\r \r |list_name|\r |----|\r |["George", "Ringo"]|\r \r ## See also\r \r [\`make_list\`](./makelist-aggfunction.md) function, which does the same, without predicate expression.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/makelistif-aggfunction","makelistif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_list_with_nulls","Creates a `dynamic` array of all the values of *expr* in the group, including null values.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`make_list_with_nulls(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression that to use to create the array. |\r \r ## Returns\r \r Returns a \`dynamic\` JSON object (array) of all the values of *expr* in the group, including null values.\r If the input to the \`summarize\` operator isn't sorted, the order of elements in the resulting array is undefined.\r If the input to the \`summarize\` operator is sorted, the order of elements in the resulting array tracks that of the input.\r \r > [!TIP]\r > Use the [\`array_sort_asc()\`](./arraysortascfunction.md) or [\`array_sort_desc()\`](./arraysortdescfunction.md) function to create an ordered list by some key.`,`The following example shows null values in the results.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz3PywqDMBAF0H2+YnCl4KKFPi1d9TNKkVQHDU0mNhnpg358E4zObIZzZ3M1MvheDujhDK3ksHeNkJM0WHl2ijoowasWL3YkrkARF+IqIEwWYkmdxqyMnNOodVFOkX+O0sVgk8Bhw/PzbAMSy85SoG2iHt9JdosM89M+kW1mOSQhS0mOSVpskqxX4nYSU0nxAz8aI536IpiPVp5DbyMfWMe7finu69jD50vn4g++V3ROJAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let shapes = datatable (name:string , sideCount: int)\r [\r "triangle", int(null),\r "square", 4,\r "rectangle", 4,\r "pentagon", 5,\r "hexagon", 6,\r "heptagon", 7,\r "octagon", 8,\r "nonagon", 9,\r "decagon", 10\r ];\r shapes\r | summarize mylist = make_list_with_nulls(sideCount)\r \`\`\`\r \r **Output**\r \r | mylist |\r | ------ |\r | [null,4,4,5,6,7,8,9,10] |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/make-list-with-nulls-aggfunction","make-list-with-nulls-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_set","Creates a `dynamic` array of the set of distinct values that *expr* takes in the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r > **Deprecated aliases:** makeset()\r \r ## Syntax\r \r \`make_set(\`*expr* [\`,\` *maxSize*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *maxSize* | int | | The maximum number of elements returned. The default and max value is 1048576. |\r \r > [!NOTE]\r > The deprecated version has a default *maxSize* limit of 128.\r \r ## Returns\r \r Returns a \`dynamic\` array of the set of distinct values that *expr* takes in the group.\r The array's sort order is undefined.\r \r > [!TIP]\r > To only count distinct values, use [dcount()](dcount-aggfunction.md) or [count_distinct()](count-distinct-aggfunction.md).`,`### Set from a scalar column\r \r The following example shows the set of states grouped with the same amount of crop damage.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuDlqlEoLs3NTSzKrEpVKC5JLEktts1NzE6NL04t0QgG8TUVkioVXBJzE9NTnYvyC4oBmxrbeD8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | summarize states=make_set(State) by DamageCrops\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | DamageCrops | states |\r |--|--|\r | 0 | ["NORTH CAROLINA","WISCONSIN","NEW YORK","ALASKA","DELAWARE","OKLAHOMA","INDIANA","ILLINOIS","MINNESOTA","SOUTH DAKOTA","TEXAS","UTAH","COLORADO","VERMONT","NEW JERSEY","VIRGINIA","CALIFORNIA","PENNSYLVANIA","MONTANA","WASHINGTON","OREGON","HAWAII","IDAHO","PUERTO RICO","MICHIGAN","FLORIDA","WYOMING","GULF OF MEXICO","NEVADA","LOUISIANA","TENNESSEE","KENTUCKY","MISSISSIPPI","ALABAMA","GEORGIA","SOUTH CAROLINA","OHIO","NEW MEXICO","ATLANTIC SOUTH","NEW HAMPSHIRE","ATLANTIC NORTH","NORTH DAKOTA","IOWA","NEBRASKA","WEST VIRGINIA","MARYLAND","KANSAS","MISSOURI","ARKANSAS","ARIZONA","MASSACHUSETTS","MAINE","CONNECTICUT","GUAM","HAWAII WATERS","AMERICAN SAMOA","LAKE HURON","DISTRICT OF COLUMBIA","RHODE ISLAND","LAKE MICHIGAN","LAKE SUPERIOR","LAKE ST CLAIR","LAKE ERIE","LAKE ONTARIO","E PACIFIC","GULF OF ALASKA"] |\r | 30000 | ["TEXAS","NEBRASKA","IOWA","MINNESOTA","WISCONSIN"] |\r | 4000000 | ["CALIFORNIA","KENTUCKY","NORTH DAKOTA","WISCONSIN","VIRGINIA"] |\r | 3000000 | ["CALIFORNIA","ILLINOIS","MISSOURI","SOUTH CAROLINA","NORTH CAROLINA","MISSISSIPPI","NORTH DAKOTA","OHIO"] |\r | 14000000 | ["CALIFORNIA","NORTH DAKOTA"] |\r | 400000 | ["CALIFORNIA","MISSOURI","MISSISSIPPI","NEBRASKA","WISCONSIN","NORTH DAKOTA"] |\r | 50000 | ["CALIFORNIA","GEORGIA","NEBRASKA","TEXAS","WEST VIRGINIA","KANSAS","MISSOURI","MISSISSIPPI","NEW MEXICO","IOWA","NORTH DAKOTA","OHIO","WISCONSIN","ILLINOIS","MINNESOTA","KENTUCKY"] |\r | 18000 | ["WASHINGTON","WISCONSIN"] |\r | 107900000 | ["CALIFORNIA"] |\r | 28900000 | ["CALIFORNIA"] |\r \r ### Set from array column\r \r The following example shows the set of elements in an array.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBY2wxBwrhcy8Eh0Fx6IiQyuFlMq8xNzMZE2uaC4FIDDUgYloRKs7GqrrKKg7GoFJY/VYTR0FsCJTFEVgaWdDkDRY1hxZ1hlJM6ZeqCxIL1esAleNQnFpbm5iUWZVqgLQnfHFqSW2uYnZqSAGyOGaEEejioNENAHdRSJ74QAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Val: int, Arr1: dynamic)\r [\r 1, dynamic(['A1', 'A2', 'A3']), \r 5, dynamic(['A2', 'C1']),\r 7, dynamic(['C2', 'A3']),\r 5, dynamic(['C2', 'A1'])\r ] \r | summarize Val_set=make_set(Val), Arr1_set=make_set(Arr1)\r \`\`\`\r \r | Val_set | Arr1_set |\r |--|--|\r | [1,5,7] | ["A1","A2","A3","C1","C2"] |\r \r ## See also\r \r * Use [\`mv-expand\`](./mvexpandoperator.md) operator for the opposite function.\r * [\`make_set_if\`](./makesetif-aggfunction.md) operator is similar to \`make_set\`, except it also accepts a predicate.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/makeset-aggfunction","makeset-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_set_if","Creates a `dynamic` array of the set of distinct values that *expr* takes in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`make_set_if(\`*expr*\`,\` *predicate* [\`,\` *maxSize*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *predicate* | string | ✓ | A predicate that has to evaluate to \`true\` in order for *expr* to be added to the result. |\r | *maxSize* | int | | The maximum number of elements returned. The default and max value is 1048576. |\r \r ## Returns\r \r Returns a \`dynamic\` array of the set of distinct values that *expr* takes in records for which *predicate* evaluates to \`true\`. The array's sort order is undefined.\r \r > [!TIP]\r > To only count the distinct values, use [dcountif()](dcountif-aggfunction.md).\r \r ## See also\r \r [\`make_set\`](./makeset-aggfunction.md) function, which does the same, without predicate expression.`,`The following example shows a list of names with more than 4 letters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyXNPQvCMBSF4T2/4tDJQBZFUSt1FZxEuomEFG/bYD4gSQfFH++l5U7PO9zjqKBFg5cpfJ2jVTCe6lySDYPi/NGx151NZaxdDIMUDwGgusYxVApHNetmJsdaHxZeKKaBOGx2S7jzs8jei+dJtOKHPHlvkv0SvHmTzlS07edpBd52FGZInLGVf+88QMOkAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(name:string, day_of_birth:long)\r [\r "John", 9,\r "Paul", 18,\r "George", 25,\r "Ringo", 7\r ];\r T\r | summarize make_set_if(name, strlen(name) > 4)\r \`\`\`\r \r **Output**\r \r |set_name|\r |----|\r |["George", "Ringo"]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/makesetif-aggfunction","makesetif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"make_timespan","Creates a [timespan](./scalar-data-types/timespan.md) scalar value from the specified time period.",`## Syntax\r \r \`make_timespan(\`*hour*, *minute*\`)\`\r \r \`make_timespan(\`*hour*, *minute*, *second*\`)\`\r \r \`make_timespan(\`*day*, *hour*, *minute*, *second*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*day*| int | ✓| The day.|\r |*hour*| int | ✓| The hour. A value from 0-23.|\r |*minute*| int || The minute. A value from 0-59.|\r |*second*| real || The second. A value from 0 to 59.9999999.|\r \r ## Returns\r \r If the creation is successful, the result will be a [timespan](./scalar-data-types/timespan.md) value. Otherwise, the result will be null.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUYhWL8nMTS0uSMxTj1WwVchNzE6Nh4loGOoYGukYG+iYmuoZGhlrAgBc6MUYMgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print ['timespan'] = make_timespan(1,12,30,55.123)\r \`\`\`\r \r **Output**\r \r |timespan|\r |---|\r |1.12:30:55.1230000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/make-timespanfunction","make-timespanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"make-series","Create series of specified aggregated values along a specified axis.",`## Syntax\r \r *T* \`| make-series\` [*MakeSeriesParameters*]\r [*Column* \`=\`] *Aggregation* [\`default\` \`=\` *DefaultValue*] [\`,\` ...]\r \`on\` *AxisColumn* [\`from\` *start*] [\`to\` *end*] \`step\` *step*\r [\`by\`\r [*Column* \`=\`] *GroupExpression* [\`,\` ...]]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*Column*| string | | The name for the result column. Defaults to a name derived from the expression.|\r |*DefaultValue* | scalar | | A default value to use instead of absent values. If there's no row with specific values of *AxisColumn* and *GroupExpression*, then the corresponding element of the array will be assigned a *DefaultValue*. Default is 0.|\r |*Aggregation*| string | ✓ | A call to an [aggregation function](make-seriesoperator.md#list-of-aggregation-functions), such as \`count()\` or \`avg()\`, with column names as arguments. See the [list of aggregation functions](make-seriesoperator.md#list-of-aggregation-functions). Only aggregation functions that return numeric results can be used with the \`make-series\` operator.|\r |*AxisColumn*| string | ✓ | The column by which the series will be ordered. Usually the column values will be of type \`datetime\` or \`timespan\` but all numeric types are accepted.|\r |*start* | scalar | ✓ | The low bound value of the *AxisColumn* for each of the series to be built. If *start* is not specified, it will be the first bin, or step, that has data in each series.|\r |*end*| scalar| ✓ | The high bound non-inclusive value of the *AxisColumn*. The last index of the time series is smaller than this value and will be *start* plus integer multiple of *step* that is smaller than *end*. If *end* is not specified, it will be the upper bound of the last bin, or step, that has data per each series.|\r |*step*| scalar | ✓ | The difference, or bin size, between two consecutive elements of the *AxisColumn* array. For a list of possible time intervals, see [timespan](./scalar-data-types/timespan.md).|\r |*GroupExpression* | | |An expression over the columns that provides a set of distinct values. Typically it's a column name that already provides a restricted set of values. |\r |*MakeSeriesParameters*| | | Zero or more space-separated parameters in the form of *Name* \`=\` *Value* that control the behavior. See [supported make series parameters](#supported-make-series-parameters).|\r \r > [!NOTE]\r > The *start*, *end*, and *step* parameters are used to build an array of *AxisColumn* values. The array consists of values between *start* and *end*, with the *step* value representing the difference between one array element to the next. All *Aggregation* values are ordered respectively to this array.\r \r ### Supported make series parameters\r \r |Name|Description|\r |--|--|\r |\`kind\` |Produces default result when the input of make-series operator is empty. Value: \`nonempty\`| \r |\`hint.shufflekey=<key>\` |The \`shufflekey\` query shares the query load on cluster nodes, using a key to partition data. See [shuffle query](shufflequery.md) | \r \r > [!NOTE]\r >\r > The arrays generated by make-series are limited to 1048576 values (2^20). Trying to generate a larger array with make-series would result in either an error or a truncated array.\r \r **Alternate Syntax**\r \r *T* \`| make-series\`\r [*Column* \`=\`] *Aggregation* [\`default\` \`=\` *DefaultValue*] [\`,\` ...]\r \`on\` *AxisColumn* \`in\` \`range(\`*start*\`,\` *stop*\`,\` *step*\`)\`\r [\`by\`\r [*Column* \`=\`] *GroupExpression* [\`,\` ...]]\r \r The generated series from the alternate syntax differs from the main syntax in two aspects:\r \r * The *stop* value is inclusive.\r * Binning the index axis is generated with bin() and not bin_at(), which means that *start* may not be included in the generated series.\r \r It's recommended to use the main syntax of make-series and not the alternate syntax.\r \r ## Returns\r \r The input rows are arranged into groups having the same values of the \`by\` expressions and the \`bin_at(\`*AxisColumn*\`,\`*step*\`,\`*start*\`)\` expression. Then the specified aggregation functions are computed over each group, producing a row for each group. The result contains the \`by\` columns, *AxisColumn* column and also at least one column for each computed aggregate. (Aggregations over multiple columns or non-numeric results aren't supported.)\r \r This intermediate result has as many rows as there are distinct combinations of \`by\` and \`bin_at(\`*AxisColumn*\`,\`*step*\`,\`*start*\`)\` values.\r \r Finally the rows from the intermediate result arranged into groups having the same values of the \`by\` expressions and all aggregated values are arranged into arrays (values of \`dynamic\` type). For each aggregation, there's one column containing its array with the same name. The last column is an array containing the values of *AxisColumn* binned according to the specified *step*.\r \r > [!NOTE]\r >\r > Although you can provide arbitrary expressions for both the aggregation and grouping expressions, it's more efficient to use simple column names.\r \r ## List of aggregation functions\r \r |Function|Description|\r |--------|-----------|\r |[avg()](avg-aggfunction.md)|Returns an average value across the group|\r |[avgif()](avgif-aggfunction.md)|Returns an average with the predicate of the group|\r |[count()](count-aggfunction.md)|Returns a count of the group|\r |[countif()](countif-aggfunction.md)|Returns a count with the predicate of the group|\r |[dcount()](dcount-aggfunction.md)|Returns an approximate distinct count of the group elements|\r |[dcountif()](dcountif-aggfunction.md)|Returns an approximate distinct count with the predicate of the group|\r |[max()](max-aggfunction.md)|Returns the maximum value across the group|\r |[maxif()](maxif-aggfunction.md)|Returns the maximum value with the predicate of the group|\r |[min()](min-aggfunction.md)|Returns the minimum value across the group|\r |[minif()](minif-aggfunction.md)|Returns the minimum value with the predicate of the group|\r |[percentile()](percentiles-aggfunction.md)|Returns the percentile value across the group|\r |[take_any()](take-any-aggfunction.md)|Returns a random non-empty value for the group|\r |[stdev()](stdev-aggfunction.md)|Returns the standard deviation across the group|\r |[sum()](sum-aggfunction.md)|Returns the sum of the elements within the group|\r |[sumif()](sumif-aggfunction.md)|Returns the sum of the elements with the predicate of the group|\r |[variance()](variance-aggfunction.md)|Returns the variance across the group|\r \r ## List of series analysis functions\r \r |Function|Description|\r |--------|-----------|\r |[series_fir()](series-firfunction.md)|Applies [Finite Impulse Response](https://en.wikipedia.org/wiki/Finite_impulse_response) filter|\r |[series_iir()](series-iirfunction.md)|Applies [Infinite Impulse Response](https://en.wikipedia.org/wiki/Infinite_impulse_response) filter|\r |[series_fit_line()](series-fit-linefunction.md)|Finds a straight line that is the best approximation of the input|\r |[series_fit_line_dynamic()](series-fit-line-dynamicfunction.md)|Finds a line that is the best approximation of the input, returning dynamic object|\r |[series_fit_2lines()](series-fit-2linesfunction.md)|Finds two lines that are the best approximation of the input|\r |[series_fit_2lines_dynamic()](series-fit-2lines-dynamicfunction.md)|Finds two lines that are the best approximation of the input, returning dynamic object|\r |[series_outliers()](series-outliersfunction.md)|Scores anomaly points in a series|\r |[series_periods_detect()](series-periods-detectfunction.md)|Finds the most significant periods that exist in a time series|\r |[series_periods_validate()](series-periods-validatefunction.md)|Checks whether a time series contains periodic patterns of given lengths|\r |[series_stats_dynamic()](series-stats-dynamicfunction.md)|Return multiple columns with the common statistics (min/max/variance/stdev/average)|\r |[series_stats()](series-statsfunction.md)|Generates a dynamic value with the common statistics (min/max/variance/stdev/average)|\r \r For a complete list of series analysis functions, see: [Series processing functions](scalarfunctions.md#series-processing-functions)\r \r ## List of series interpolation functions\r \r |Function|Description|\r |--------|-----------|\r |[series_fill_backward()](series-fill-backwardfunction.md)|Performs backward fill interpolation of missing values in a series|\r |[series_fill_const()](series-fill-constfunction.md)|Replaces missing values in a series with a specified constant value|\r |[series_fill_forward()](series-fill-forwardfunction.md)|Performs forward fill interpolation of missing values in a series|\r |[series_fill_linear()](series-fill-linearfunction.md)|Performs linear interpolation of missing values in a series|\r \r * Note: Interpolation functions by default assume \`null\` as a missing value. Therefore specify \`default=\`*double*(\`null\`) in \`make-series\` if you intend to use interpolation functions for the series.`,`A table that shows arrays of the numbers and average prices of each fruit from each supplier ordered by the timestamp with specified range. There's a row in the output for each distinct combination of fruit and supplier. The output columns show the fruit, supplier, and arrays of: count, average, and the whole timeline (from 2016-01-01 until 2016-01-10). All arrays are sorted by the respective timestamp and all gaps are filled with default values (0 in this example). All other input columns are ignored.\r \r \`\`\`\r T | make-series PriceAvg=avg(Price) default=0\r on Purchase from datetime(2016-09-10) to datetime(2016-09-13) step 1d by Supplier, Fruit\r \`\`\`\r \r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WSwW7DIAyG73kKHxMpkWxo0jRT34JbtQNbvSkaNBWgnvbwBZH1MIGEkOzvN7+FbTjAVQd9TlfQH4bbsFr2Qdv7EnOcoh4sB7d+LuBYm665NAB/rBVI00BikKRwWhC7Hkbs/ymOA1I8kR3KSEQky0jWq6RCmS2nsmCMaK4gRXI5pFqqGE9142O93bluOStBud2K4BSRqCBFItcSFRWECsf9//vm/a0xcbTrLbB7aANnoGtO+VQV49J4soJrCsKoSIvS/ILVPzx4dit70I/vNm9IB9sNXgsEX26zu2HY9nd94Purryf8i1rafwIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let data=datatable(timestamp:datetime, metric: real)\r [\r datetime(2016-12-31T06:00), 50,\r datetime(2017-01-01), 4,\r datetime(2017-01-02), 3,\r datetime(2017-01-03), 4,\r datetime(2017-01-03T03:00), 6,\r datetime(2017-01-05), 8,\r datetime(2017-01-05T13:40), 13,\r datetime(2017-01-06), 4,\r datetime(2017-01-07), 3,\r datetime(2017-01-08), 8,\r datetime(2017-01-08T21:00), 8,\r datetime(2017-01-09), 2,\r datetime(2017-01-09T12:00), 11,\r datetime(2017-01-10T05:00), 5,\r ];\r let interval = 1d;\r let stime = datetime(2017-01-01);\r let etime = datetime(2017-01-10);\r data\r | make-series avg(metric) on timestamp from stime to etime step interval \r \`\`\`\r \r |avg_metric|timestamp|\r |---|---|\r |[ 4.0, 3.0, 5.0, 0.0, 10.5, 4.0, 3.0, 8.0, 6.5 ]|[ "2017-01-01T00:00:00.0000000Z", "2017-01-02T00:00:00.0000000Z", "2017-01-03T00:00:00.0000000Z", "2017-01-04T00:00:00.0000000Z", "2017-01-05T00:00:00.0000000Z", "2017-01-06T00:00:00.0000000Z", "2017-01-07T00:00:00.0000000Z", "2017-01-08T00:00:00.0000000Z", "2017-01-09T00:00:00.0000000Z" ]| \r \r When the input to \`make-series\` is empty, the default behavior of \`make-series\` produces an empty result.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WSwW6DMAyG7zyFjyDBZCeFMibeIrdph6y4E1oCFbg97eEXFLZJE5GiKPb3O7+V2LHAYMX22yb23XEuo+dVrL91IcdbVIJnWcZLBwtbV2SvGcAPyxVSU5GqNBlsOsSihBrLf4pzhRRWYKdjpALSx0inq7RBHS2bY0EdUJtAhnR32mopYdykjc/pdtu0ZWsUxXYTgueAVAIZUrGW6FBBaLDe37/M3l4yF752nISXh3XQAw0xtW5VIT76nqjglIIwKLZByb7AjX4UwHDy9pOrlZeRV7CPjzzOSgEDX+3dSU9PCPMEv2MF12X2exsy726r8O2v23DrZb5P8g2FvL+MngIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let data=datatable(timestamp:datetime, metric: real)\r [\r datetime(2016-12-31T06:00), 50,\r datetime(2017-01-01), 4,\r datetime(2017-01-02), 3,\r datetime(2017-01-03), 4,\r datetime(2017-01-03T03:00), 6,\r datetime(2017-01-05), 8,\r datetime(2017-01-05T13:40), 13,\r datetime(2017-01-06), 4,\r datetime(2017-01-07), 3,\r datetime(2017-01-08), 8,\r datetime(2017-01-08T21:00), 8,\r datetime(2017-01-09), 2,\r datetime(2017-01-09T12:00), 11,\r datetime(2017-01-10T05:00), 5,\r ];\r let interval = 1d;\r let stime = datetime(2017-01-01);\r let etime = datetime(2017-01-10);\r data\r | take 0\r | make-series avg(metric) default=1.0 on timestamp from stime to etime step interval \r | count \r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |0|\r \r Using \`kind=nonempty\` in \`make-series\` will produce a non-empty result of the default values:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WSwWqEMBCG7z7FHFfQMmNW11p8i9xKD2mdLWETFZ0uFPrwjcTuoRgIITPfP/xDZhwLDEZMv11i3h2fxHpexfi5CzneogI8y2I/OljYuDx7zQD+2KlCakqqSkUamw4xL6DG4p/iUiKFE9j5GFUBqWOk0lVKo4qWzbGgDqhNIE2qO2+1lDBu0saXdLtt2rLVFcV2E4LngKoE0lTFWqJDBaHGev//Int7yVwYrR2Fl7tx0AMNMbVuVSE+Gk9UcEpBGBTbomQ/4Ky3Ahhe3ty4XHmxvMLNjkM/TiP7Wb7B3D9PcXNyGPhqvpz09IQwjfBYMrguk9+bkmn3XoXnR++/5AUDOqMCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let data=datatable(timestamp:datetime, metric: real)\r [\r datetime(2016-12-31T06:00), 50,\r datetime(2017-01-01), 4,\r datetime(2017-01-02), 3,\r datetime(2017-01-03), 4,\r datetime(2017-01-03T03:00), 6,\r datetime(2017-01-05), 8,\r datetime(2017-01-05T13:40), 13,\r datetime(2017-01-06), 4,\r datetime(2017-01-07), 3,\r datetime(2017-01-08), 8,\r datetime(2017-01-08T21:00), 8,\r datetime(2017-01-09), 2,\r datetime(2017-01-09T12:00), 11,\r datetime(2017-01-10T05:00), 5,\r ];\r let interval = 1d;\r let stime = datetime(2017-01-01);\r let etime = datetime(2017-01-10);\r data\r | take 0\r | make-series kind=nonempty avg(metric) default=1.0 on timestamp from stime to etime step interval \r \`\`\`\r \r **Output**\r \r |avg_metric|timestamp|\r |---|---|\r |[<br> 1.0,<br> 1.0,<br> 1.0,<br> 1.0,<br> 1.0,<br> 1.0,<br> 1.0,<br> 1.0,<br> 1.0<br>]|[<br> "2017-01-01T00:00:00.0000000Z",<br> "2017-01-02T00:00:00.0000000Z",<br> "2017-01-03T00:00:00.0000000Z",<br> "2017-01-04T00:00:00.0000000Z",<br> "2017-01-05T00:00:00.0000000Z",<br> "2017-01-06T00:00:00.0000000Z",<br> "2017-01-07T00:00:00.0000000Z",<br> "2017-01-08T00:00:00.0000000Z",<br> "2017-01-09T00:00:00.0000000Z"<br>]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/make-seriesoperator","make-seriesoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"matches","Filters a record set based on a case-sensitive regex value.",`For more information about other operators and to determine which operator is most appropriate for your query, see [datatype string operators](datatypes-string-operators.md).\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`matches\` \`regex\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input whose records are to be filtered.|\r | *col* | string | ✓ | The column by which to filter.|\r | *expression* | scalar | ✓ | The expression used to filter.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPITexJDkjtVihKDU9tUJByVtPK1gJrgTJHAU7BUMDoERBUX5WanIJRLcOsgoA+5LANo0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State matches regex "K.*S"\r | where event_count > 10\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |KANSAS|3166|\r |ARKANSAS|1028|\r |LAKE SUPERIOR|34|\r |LAKE ST CLAIR|32|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/matches-regex-operator","matches-regex-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"materialize","Captures the value of a tabular expression for the duration of the query execution so that it can be referenced multiple times by the query without recalculation.",`## Syntax\r \r \`materialize(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expression* | string | ✓ | The tabular expression to be evaluated and cached during query execution.|\r \r ## Remarks\r \r The \`materialize()\` function is useful in the following scenarios:\r \r * To speed up queries that perform *heavy* calculations whose results are used multiple times in the query.\r * To evaluate a tabular expression only once and use it many times in a query. This is commonly required if the tabular expression is non-deterministic. For example, if the expression uses the \`rand()\` or the \`dcount()\` functions.\r \r > [!NOTE]\r > Materialize has a cache size limit of **5 GB**. This limit is per cluster node and is mutual for all queries running concurrently. If a query uses \`materialize()\` and the cache can't hold any more data, the query will abort with an error.\r \r >[!TIP]\r > Another way to perform materialization of tabular expression is by using the \`hint.materialized\` flag\r > of the [as operator](asoperator.md) and [partition operator](partitionoperator.md). They all share a\r > single materialization cache.\r \r >[!TIP]\r >\r >* Push all possible operators that reduce the materialized data set and keep the semantics of the query. For example, use common filters on top of the same materialized expression.\r >* Use materialize with join or union when their operands have mutual subqueries that can be executed once. For example, join/union fork legs. See [example of using join operator](#examples-of-query-performance-improvement).\r >* Materialize can only be used in let statements if you give the cached result a name. See [example of using let statements](#examples-of-using-materialize)).\r \r ## Examples of query performance improvement\r \r The following example shows how \`materialize()\` can be used to improve performance of the query.\r The expression \`_detailed_data\` is defined using \`materialize()\` function and therefore is calculated only once.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WPwQqDMAyG74LvkGMdstXz8Lj7QO/S2TAqtZUaxxx7+FUrOPXU8iffl0QjQSWRhNIoKylIQA6tIHRKaPVBVpB17e2Fhnr4Qj+0rXA+hxDltR0MsQQeIxTksTQUyrHD5BpHW3Uc/RtKS0LP0OLyJRa+q29CGqsMsK0qAWvWDnwTGhlG39HV/hFP9JcE3Snj/Mzhchg5sZ2zDdZ0WD/d65Zghsh2kPFpy13TDxDFARZQAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let _detailed_data = materialize(StormEvents | summarize Events=count() by State, EventType);\r _detailed_data\r | summarize TotalStateEvents=sum(Events) by State\r | join (_detailed_data) on State\r | extend EventPercentage = Events*100.0 / TotalStateEvents\r | project State, EventType, EventPercentage, Events\r | top 10 by EventPercentage\r \`\`\`\r \r **Output**\r \r |State|EventType|EventPercentage|Events|\r |---|---|---|---|\r |HAWAII WATERS|Waterspout|100|2|\r |LAKE ONTARIO|Marine Thunderstorm Wind|100|8|\r |GULF OF ALASKA|Waterspout|100|4|\r |ATLANTIC NORTH|Marine Thunderstorm Wind|95.2127659574468|179|\r |LAKE ERIE|Marine Thunderstorm Wind|92.5925925925926|25|\r |E PACIFIC|Waterspout|90|9|\r |LAKE MICHIGAN|Marine Thunderstorm Wind|85.1648351648352|155|\r |LAKE HURON|Marine Thunderstorm Wind|79.3650793650794|50|\r |GULF OF MEXICO|Marine Thunderstorm Wind|71.7504332755633|414|\r |HAWAII|High Surf|70.0218818380744|320|\r \r The following example generates a set of random numbers and calculates:\r \r * How many distinct values in the set (\`Dcount\`)\r * The top three values in the set\r * The sum of all these values in the set\r \r This operation can be done using [batches](batches.md) and materialize:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WNQQqDMBBF94J3+Mu4M7gs2fUGniDVabEkToiT0hYP32gKQqF/k5nw5n1HgmjnkX2fJ4O6Qo63QnGybnqTKj9bMncjPHGN7KEhjK7dg0UoQB/kihD5ToPgYV2i7N06lC542zSnujpaVyzJextzG84Dp1nMuD9qv/6FhQM6XF7F/dfUJ2/y9nV8ADNWwIPoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let randomSet = \r materialize(\r range x from 1 to 3000000 step 1\r | project value = rand(10000000));\r randomSet | summarize Dcount=dcount(value);\r randomSet | top 3 by value;\r randomSet | summarize Sum=sum(value)\r \`\`\`\r \r Result set 1: \r \r |Dcount|\r |---|\r |2578351|\r \r Result set 2:\r \r |value|\r |---|\r |9999998|\r |9999998|\r |9999997|\r \r Result set 3:\r \r |Sum|\r |---|\r |15002960543563|\r \r ## Examples of using materialize()\r \r > [!TIP]\r > Materialize your column at ingestion time if most of your queries extract fields from dynamic objects across millions of rows.\r \r To use the \`let\` statement with a value that you use more than once, use the [materialize() function](./materializefunction.md). Try to push all possible operators that will reduce the materialized data set and still keep the semantics of the query. For example, use filters, or project only required columns.\r \r \`\`\`\r let materializedData = materialize(Table\r | where Timestamp > ago(1d));\r union (materializedData\r | where Text !has "somestring"\r | summarize dcount(Resource1)), (materializedData\r | where Text !has "somestring"\r | summarize dcount(Resource2))\r \`\`\`\r \r The filter on \`Text\` is mutual and can be pushed to the materialize expression.\r The query only needs columns \`Timestamp\`, \`Text\`, \`Resource1\`, and \`Resource2\`. Project these columns inside the materialized expression.\r \r \`\`\`\r let materializedData = materialize(Table\r | where Timestamp > ago(1d)\r | where Text !has "somestring"\r | project Timestamp, Resource1, Resource2, Text);\r union (materializedData\r | summarize dcount(Resource1)), (materializedData\r | summarize dcount(Resource2))\r \`\`\`\r \r If the filters aren't identical, as in the following query: \r \r \`\`\`\r let materializedData = materialize(Table\r | where Timestamp > ago(1d));\r union (materializedData\r | where Text has "String1"\r | summarize dcount(Resource1)), (materializedData\r | where Text has "String2"\r | summarize dcount(Resource2))\r \`\`\`\r \r When the combined filter reduces the materialized result drastically, combine both filters on the materialized result by a logical \`or\` expression as in the following query. However, keep the filters in each union leg to preserve the semantics of the query.\r \r \`\`\`\r let materializedData = materialize(Table\r | where Timestamp > ago(1d)\r | where Text has "String1" or Text has "String2"\r | project Timestamp, Resource1, Resource2, Text);\r union (materializedData\r | where Text has "String1"\r | summarize dcount(Resource1)), (materializedData\r | where Text has "String2"\r | summarize dcount(Resource2))\r \`\`\``,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/materializefunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"materialized_view","References the materialized part of a [materialized view](../management/materialized-views/materialized-view-overview.md).",`The \`materialized_view()\` function supports a way of querying the *materialized* part only of the view, while specifying the max latency the user is willing to tolerate. This option isn't guaranteed to return the most up-to-date records, but should always be more performant than querying the entire view. This function is useful for scenarios in which you're willing to sacrifice some freshness for performance, for example in telemetry dashboards.\r \r ## Syntax\r \r \`materialized_view(\`*ViewName*\`,\` [ *max_age* ] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ViewName*| string| ✓| The name of the materialized view.|\r | *max_age*| timespan || If not provided, only the *materialized* part of the view is returned. If provided, the function will return the _materialized_ part of the view if last materialization time is greater than \`@now - max_age\`. Otherwise, the entire view is returned, which is identical to querying *ViewName* directly.`,`Query the *materialized* part of the view only, independent on when it was last materialized.\r \r \`\`\`\r materialized_view("ViewName")\r \`\`\`\r \r Query the *materialized* part only if it was materialized in the last 10 minutes. If the materialized part is older than 10 minutes, return the full view. This option is expected to be less performant than querying the materialized part.\r \r \`\`\`\r materialized_view("ViewName", 10m)\r \`\`\`\r \r ## Notes\r \r * Once a view is created, it can be queried just as any other table in the database, including participate in cross-cluster / cross-database queries.\r * Materialized views aren't included in wildcard unions or searches.\r * Syntax for querying the view is the view name (like a table reference).\r * Querying the materialized view will always return the most up-to-date results, based on all records ingested to the source table. The query combines the materialized part of the view with all unmaterialized records in the source table. For more information, see [how materialized views work](../management/materialized-views/materialized-view-overview.md#how-materialized-views-work) for details.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/materialized-view-function","materialized-view-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"max","Finds the maximum value the expression in the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`max(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r \r ## Returns\r \r Returns the maximum value of *expr* across the group.\r \r > [!TIP]\r > This gives you the max on its own. If you want to see other columns in addition to the max, use [arg_max](arg-max-aggfunction.md).`,`This example returns the last record in a table.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSguzc1NLMqsSlXwSSxJLS4By9jmJlZoBJckFpWEZOamagIADGp6XTMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize LatestEvent=max(StartTime)\r \`\`\`\r \r **Output**\r \r | LatestEvent |\r |--|\r | 2007-12-31T23:53:00Z |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/max-aggfunction","max-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"max_of","Returns the maximum value of all argument expressions.",`## Syntax\r \r \`max_of(\`*arg*\`,\` *arg_2*\`,\` [ *arg_3*\`,\` ... ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*arg_i* | scalar | ✓ | The values to compare.|\r \r * All arguments must be of the same type.\r * Maximum of 64 arguments is supported.\r * Non-null values take precedence to null values.\r \r ## Returns\r \r The maximum value of all argument expressions.`,`### Find the largest number\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwVchNrIjPT9MwNNBRMNRR0DUGUuaaADn0q08kAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result = max_of(10, 1, -3, 17) \r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |17|\r \r ### Find the maximum value in a data-table\r \r Notice that non-null values take precedence over null values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBQ1HK4XMvBIdBScwrcnLFc3LpQAEhjoKZjoQpoUOkAdhApVo5JXm5GjqKBjpwBUiRDFUwZm8XLG8XDUKBUX5WanJJQq5iRXx+WkajkCLNQGMk9JIjgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (A: int, B: int)\r [\r 1, 6,\r 8, 1,\r int(null), 2,\r 1, int(null),\r int(null), int(null)\r ]\r | project max_of(A, B)\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |6|\r |8|\r |2|\r |1|\r |(null)|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/max-offunction","max-offunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"maxif","Calculates the maximum value of *expr* in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r See also - [max()](max-aggfunction.md) function, which returns the maximum value across the group without predicate expression.\r \r ## Syntax\r \r \`maxif(\`*expr*\`,\`*predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *predicate* | string | ✓ | The expression used to filter rows. |\r \r ## Returns\r \r Returns the maximum value of *expr* in records for which *predicate* evaluates to \`true\`.`,`This example shows the maximum damage for events with no casualties.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzWMPQ7CMAxGdyTu4BEEAxfw1DAwgJB6AkMNRMIJsl2UIg4PbWB6+n70Ws8q2ycnt/nsDVycUweBhK6MFY3mh8HqVx6/idWHNQQmvxlWhKh89vE1xV3qpmJ0Wi9CGl8MeypVcsgNWU93j2woVOJlUYe/FRBhs4TTAK2T8wcBsgcBpgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | extend Damage=DamageCrops + DamageProperty, Deaths=DeathsDirect + DeathsIndirect\r | summarize MaxDamageNoCasualties=maxif(Damage, Deaths == 0) by State\r \`\`\`\r \r **Output**\r \r The results table shown includes only the first 10 rows.\r \r | State | MaxDamageNoCasualties |\r | -------------------- | --------------------- |\r | TEXAS | 25000000 |\r | KANSAS | 37500000 |\r | IOWA | 15000000 |\r | ILLINOIS | 5000000 |\r | MISSOURI | 500005000 |\r | GEORGIA | 344000000 |\r | MINNESOTA | 38390000 |\r | WISCONSIN | 45000000 |\r | NEBRASKA | 4000000 |\r | NEW YORK | 26000000 |\r | ... | ... |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/maxif-aggfunction","maxif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"merge_tdigest","Merges `tdigest` results (scalar version of the aggregate version [`tdigest_merge()`](tdigest-merge-aggfunction.md)).",`Read more about the underlying algorithm (T-Digest) and the estimated error [here](percentiles-aggfunction.md#estimation-error-in-percentiles).\r \r > The \`merge_tdigest()\` and \`tdigest_merge()\` functions are equivalent\r \r > [!IMPORTANT]\r >The results of tdigest() and tdigest_merge() can be stored and later retrieved. For example, you may want to create daily percentiles summary, which can then be used to calculate weekly percentiles.\r > However, the precise binary representation of these results may change over time. There's no guarantee that these functions will produce identical results for identical inputs, and therefore we don't advise relying on them.\r \r ## Syntax\r \r \`merge_tdigest(\`*exprs*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *exprs* | dynamic | ✓ | One or more comma-separated column references that have the \`tdigest\` values to be merged. |\r \r ## Returns\r \r The result for merging the columns \`*Expr1*\`, \`*Expr2*\`, ... \`*ExprN*\` to one \`tdigest\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02OSwrDMBBD9z3FLG2aRXKA3qNdhZAoxiX+YE/BDj18h7Ym2Wmk0UNp8gZUaE3B0UAcaOgpM6IclzehMPxClW7yc5VMvPxybkp2B/FiDTLfJf1LVXTX9ONkVy3FmMITM5NDMliOdPwaqtEOwLkUkWZ4thvGBv1xOlnVS6dGhFVtwRutP5Qlo27WAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1 \r | extend y = x + 10\r | summarize tdigestX = tdigest(x), tdigestY = tdigest(y)\r | project merged = merge_tdigest(tdigestX, tdigestY)\r | project percentile_tdigest(merged, 100, typeof(long))\r \`\`\`\r \r **Output**\r \r |percentile_tdigest_merged|\r |---|\r |20|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/merge-tdigest-function","merge-tdigest-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"min","Finds the minimum value across the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`min\` \`(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the minimum value aggregation calculation. |\r \r ## Returns\r \r Returns the minimum value of *expr* across the group.\r \r > [!TIP]\r > This gives you the min on its own. If you want to see other columns in addition to the min, use [arg_min](arg-min-aggfunction.md).`,`This example returns the first record in a table.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVXDLLCouAYvb5mbmaQSXJBaVhGTmpmoCAMaAOl8xAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize FirstEvent=min(StartTime)\r \`\`\`\r \r **Output**\r \r | FirstEvent |\r |--|\r | 2007-01-01T00:00:00Z |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/min-aggfunction","min-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"min_of","Returns the minimum value of several evaluated scalar expressions.",`## Syntax\r \r \`min_of\` \`(\`*arg*\`,\` *arg_2*\`,\` [ *arg_3*, ... ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *arg*, *arg_2*, ... | scalar | ✓ | A comma separated list of 2-64 scalar expressions to compare. The function returns the minimum value among these expressions.|\r \r * All arguments must be of the same type.\r * Maximum of 64 arguments is supported.\r * Non-null values take precedence to null values.\r \r ## Returns\r \r The minimum value of all argument expressions.`,`Find the maximum value in an array:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNzcyLz0/TMDTQUTDUUdA1BlLmmgCoI/wyIgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result=min_of(10, 1, -3, 17) \r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |-3|\r \r Find the minimum value in a data-table. Non-null values take precedence over null values:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBQ1HK4XMvBIdBScwrckVzaUABKY6CkY6YJahgY6CIYQJlNfIK83J0dRRMIZK6iAJoquBM7liuWoUCorys1KTSxRyM/Pi89M0HIE2agIA226WNIcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (A: int, B: int)\r [\r 5, 2,\r 10, 1,\r int(null), 3,\r 1, int(null),\r int(null), int(null)\r ]\r | project min_of(A, B)\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |2|\r |1|\r |3|\r |1|\r |(null)|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/min-offunction","min-offunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"minif","Returns the minimum of *Expr* in records for which *Predicate* evaluates to `true`.",`* Can be used only in context of aggregation inside [summarize](summarizeoperator.md)\r \r See also - [min()](min-aggfunction.md) function, which returns the minimum value across the group without predicate expression.\r \r ## Syntax\r \r \`minif\` \`(\`*Expr*\`,\`*Predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *Expr* | string | ✓ | Expression that will be used for aggregation calculation. |\r | *Predicate* | string | ✓ | Expression that will be used to filter rows. |\r \r ## Returns\r \r The minimum value of *Expr* in records for which *Predicate* evaluates to \`true\`.`,`This example shows the minimum damage for events with casualties (Except 0)\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WOsQ6CUAxFd7+iIwQGfwAXcHAwMWFwrlKlCa+Y16Ji/Hif1NXp3tvenrS1MYbtncR09QZ6GkkHDQa8UuVSx/GmhftD8hRtLqEhtF4rl4Yjna3wsJNuiQmnUwgY+UWwZ3HCka2vUSccjEmrwMKXzFdl5gDYrHPA9MZv/s05nGZoDY0gcR89xb/MVF+uWWU0mYYh+1PMPyFcEcH8AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | extend Damage=DamageCrops+DamageProperty, Deaths=DeathsDirect+DeathsIndirect\r | summarize MinDamageWithCasualties=minif(Damage,(Deaths >0) and (Damage >0)) by State \r | where MinDamageWithCasualties >0 and isnotnull(MinDamageWithCasualties)\r \`\`\`\r \r **Output**\r \r The results table shown includes only the first 10 rows.\r \r | State | MinDamageWithCasualties |\r | -------------- | ----------------------- |\r | TEXAS | 8000 |\r | KANSAS | 5000 |\r | IOWA | 45000 |\r | ILLINOIS | 100000 |\r | MISSOURI | 10000 |\r | GEORGIA | 500000 |\r | MINNESOTA | 200000 |\r | WISCONSIN | 10000 |\r | NEW YORK | 25000 |\r | NORTH CAROLINA | 15000 |\r | ... | ... |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/minif-aggfunction","minif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"monthofyear","Returns the integer number from 1-12 representing the month number of the given year.",`> The \`monthofyear()\` and \`getmonth()\` functions are equivalent\r \r ## Syntax\r \r \`monthofyear(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to find the month number. |\r \r ## Returns\r \r An integer from 1-12 representing the month number of the given year.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbHNzc8rychPq0xNLNJISSxJLcnMTdVQMjIwNNU1NNI1NFHS1AQAVHohRTAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=monthofyear(datetime("2015-12-14"))\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |12|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/monthofyearfunction","monthofyearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"mv-apply",`Applies a subquery to each record, and returns the union of the results of\r all subqueries.`,`For example, assume a table \`T\` has a column \`Metric\` of type \`dynamic\`\r whose values are arrays of \`real\` numbers. The following query locates the\r two biggest values in each \`Metric\` value, and return the records corresponding\r to these values.\r \r \`\`\`\r T | mv-apply Metric to typeof(real) on \r (\r top 2 by Metric desc\r )\r \`\`\`\r \r The \`mv-apply\` operator has the following\r processing steps:\r \r 1. Uses the [\`mv-expand\`](./mvexpandoperator.md) operator to expand each record in the input into subtables (order is preserved).\r 1. Applies the subquery for each of the subtables.\r 1. Adds zero or more columns to the resulting subtable. These columns contain the values of the source columns that aren't expanded, and are repeated where needed.\r 1. Returns the union of the results.\r \r The \`mv-apply\` operator gets the following inputs:\r \r 1. One or more expressions that evaluate into dynamic arrays to expand.\r The number of records in each expanded subtable is the maximum length of\r each of those dynamic arrays. Null values are added where multiple expressions are specified and the corresponding arrays have different lengths.\r 1. Optionally, the names to assign the values of the expressions after expansion.\r These names become the columns names in the subtables.\r If not specified, the original name of the column is used when the expression is a column reference. A random name is used otherwise.\r > [!NOTE]\r > It is recommended to use the default column names.\r 1. The data types of the elements of those dynamic arrays, after expansion.\r These become the column types of the columns in the subtables.\r If not specified, \`dynamic\` is used.\r 1. Optionally, the name of a column to add to the subtables that specifies the\r 0-based index of the element in the array that resulted in the subtable record.\r 1. Optionally, the maximum number of array elements to expand.\r \r The \`mv-apply\` operator can be thought of as a generalization of the\r [\`mv-expand\`](./mvexpandoperator.md) operator (in fact, the latter can be implemented\r by the former, if the subquery includes only projections.)\r \r ## Syntax\r \r *T* \`|\` \`mv-apply\` [*ItemIndex*] *ColumnsToExpand* [*RowLimit*] \`on\` \`(\` *SubQuery* \`)\`\r \r Where *ItemIndex* has the syntax:\r \r \`with_itemindex\` \`=\` *IndexColumnName*\r \r *ColumnsToExpand* is a comma-separated list of one or more elements of the form:\r \r [*Name* \`=\`] *ArrayExpression* [\`to\` \`typeof\` \`(\`*Typename*\`)\`]\r \r *RowLimit* is simply:\r \r \`limit\` *RowLimit*\r \r and *SubQuery* has the same syntax of any query statement.\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*ItemIndex*|string||Indicates the name of a column of type \`long\` that's appended to the input as part of the array-expansion phase and indicates the 0-based array index of the expanded value.|\r |*Name*|string||The name to assign the array-expanded values of each array-expanded expression. If not specified, the name of the column is used if available. A random name is generated if *ArrayExpression* isn't a simple column name.|\r |*ArrayExpression*|dynamic|✓|The array whose values are array-expanded. If the expression is the name of a column in the input, the input column is removed from the input and a new column of the same name, or *ColumnName* if specified, appears in the output.|\r |*Typename*|string||The name of the type that the individual elements of the \`dynamic\` array *ArrayExpression* take. Elements that don't conform to this type are replaced by a null value. If unspecified, \`dynamic\` is used by default.|\r |*RowLimit*|int||A limit on the number of records to generate from each record of the input. If unspecified, 2147483647 is used.|\r |*SubQuery*|string||A tabular query expression with an implicit tabular source that gets applied to each array-expanded subtable.|\r \r >[!NOTE]\r > Unlike the [\`mv-expand\`](./mvexpandoperator.md) operator, the \`mv-apply\` operator doesn't support \`bagexpand=array\` expansion. If the expression to be expanded is a property bag and not an array, you can use an inner \`mv-expand\` operator (see example below).`,`### Getting the largest element from the array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2NsQrDMBBD93yFlkIydEimQvEn9BuCSy4h9M5nkmuxSz6+jqkGDRJ6YjKMkzcP16Bo82EhJMybCnqY4obdKKKv9YH9LeK39UtgJ/5FI6+7tanDMyM9dBrgyvyC4d5UbnNAPlcfI2cQk1AwxyfXciSdW9awdNCAym+rm5a/E/gf1LD7ASAFbUCrAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let _data =\r range x from 1 to 8 step 1\r | summarize l=make_list(x) by xMod2 = x % 2;\r _data\r | mv-apply element=l to typeof(long) on \r (\r top 1 by element\r )\r \`\`\`\r \r **Output**\r \r |\`xMod2\`|l |element|\r |-----|------------|-------|\r |1 |[1, 3, 5, 7]|7 |\r |0 |[2, 4, 6, 8]|8 |\r \r ### Calculating the sum of the largest two elements in an array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WNsQ7CMBBD936FF6RkYGgmJJRPQAywV0FNq4pLLmqvKEH9eNqsePBw9j2TF3S9EwfbYNfs4uiRMcwc0EIYFyziE9oab1jWENw8fT3IBvf2HU2LqKzxKsg37g3s/n6CuTaV22wIn7NLiQro4ElJngdFHEcNjhWrqgsnmINDf1uPNdyHJydj95siXQv6B6sP8Fq9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let _data =\r range x from 1 to 8 step 1\r | summarize l=make_list(x) by xMod2 = x % 2;\r _data\r | mv-apply l to typeof(long) on\r (\r top 2 by l\r | summarize SumOfTop2=sum(l)\r )\r \`\`\`\r \r **Output**\r \r |\`xMod2\`|l |SumOfTop2|\r |-----|---------|---------|\r |1 |[1,3,5,7]|12 |\r |0 |[2,4,6,8]|14 |\r \r ### Select elements in arrays\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PQYvCMBCF7/kV79YEsmBSu4rgoe3doxcpEjW7FJO21KhU/PGmsVZZNsM8eDPzzZCDcj52RoOulVmUleNI21YsDl2lbLkPTr4cIxsIjsHRTZSKiCNKZdA4KhjH840jYsIR+5z1PQLMPvEs4FnAs+RfPOEQ/mQy8U2Px594HvA84HkcdBqWjCPfHFN/XPqcF4wUIHfYy5dqGtNhpa/9V5e98MHJ3km4Gq5rdP1DTV39MtQVKPHVBhK7FykJ7jidrVVtedPjOquOemvKk6NDhb2X/+1JRtgDW1SAO4MBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Val:int, Arr1:dynamic, Arr2:dynamic)\r [ 1, dynamic(['A1', 'A2', 'A3']), dynamic([10, 30, 7]), \r 7, dynamic(['B1', 'B2', 'B5']), dynamic([15, 11, 50]),\r 3, dynamic(['C1', 'C2', 'C3', 'C4']), dynamic([6, 40, 20, 8])\r ] \r | mv-apply NewArr1=Arr1, NewArr2=Arr2 to typeof(long) on (\r top 2 by NewArr2\r | summarize NewArr1=make_list(NewArr1), NewArr2=make_list(NewArr2)\r )\r \`\`\`\r \r **Output**\r \r |Val1|Arr1|Arr2|\`NewArr1\`|\`NewArr2\`|\r |-----|-----------|--------|-----|-----|\r |1 |["A1","A2","A3"]|[10,30,7]|["A2',"A1"]|[30,10] |\r |7 |["B1","B2","B5"]|[15,11,50]|["B5","B1"]|[50,15] |\r |3 |["C1","C2","C3","C4"]|[6,40,20,8]|["C2","C3"]|[40,20] |\r \r ### Using \`with_itemindex\` for working with a subset of the array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzVOS27CMBDd5xRvU5FIRRC6rMwNOENkkoG4tT2WMyEJ4vCEQcziLeZ9PQmazoqFKbBetvFKmHHJHFBDGPUeg1BCrfwDwxiCze5O8CbYf2q8G6ScK5wXzCfuDjCr/wuH30KDiwfCbWtT8gsmJ33jhIKLHc1GEeQpUBTjX22yJOJL6TleK3CElpaKux16yoSFR/T2Rtiof4OW/RiiaiZVvHOPBj/6rNYJKfMftfKmvj+dT34iokT+AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let _data =\r range x from 1 to 10 step 1\r | summarize l=make_list(x) by xMod2 = x % 2;\r _data\r | mv-apply with_itemindex=index element=l to typeof(long) on \r (\r // here you have 'index' column\r where index >= 3\r )\r | project index, element\r \`\`\`\r \r **Output**\r \r |index|element|\r |---|---|\r |3|7|\r |4|9|\r |3|8|\r |4|10|\r \r ### Using mutiple columns to join element of 2 arrays\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12OPQuDMBCG9/yKo0sSsIMpXYQOfuzduohIqhlCEysaSy3++KaXtog5CLwf93CtdH6uRgG7SJOA7lwE6TDECbRzJ61uUIq/5KQk4F8c/RxW0jSmEdBU4H+gFV+HGYYZhlkIkXBcl3Is5WKzW6BdfGxSAVnAPvay782MN4bT4N4BQ6J6OtW1cJ4cnGB0QyMdC71dvQtljsUFxslaOeiXQpCvW3lTtdFj2OBf9MYX3vf0tetlYPI3W/swT0sBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Val: int, Arr1: dynamic, Arr2: dynamic)\r [\r 1, dynamic(['A1', 'A2', 'A3']), dynamic(['B1', 'B2', 'B3']), \r 5, dynamic(['C1', 'C2']), dynamic(['D1', 'D2'])\r ] \r | mv-apply Arr1, Arr2 on (\r extend Out = strcat(Arr1, "_", Arr2)\r | summarize Arr1 = make_list(Arr1), Arr2 = make_list(Arr2), Out= make_list(Out)\r )\r \`\`\`\r \r **Output**\r \r |Val|Arr1|Arr2|\`Out\`|\r |---|---|---|---|\r |1|["A1","A2","A3"]|["B1","B2","B3"]|["A1_B1","A2_B2","A3_B3"]|\r |5|["C1","C2"]|["D1","D2"]|["C1_D1","C2_D2"]|\r \r ### Applying mv-apply to a property bag\r \r In the following example, \`mv-apply\` is used in combination with an\r inner \`mv-expand\` to remove values that don't start with "555" from a property bag:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21PwW6DMAy98xVeL4BEpdG1O1Tqqfdp2nqrEDLUooyQICdAmfrxczMOa7VEtuSX955fTujkFoqiT9NzSW99WxBvwTqudZXAAbki94juz8h2b3rttqCMruLgGICccLPZLG+Vrl7WYfJ3Tlcyr1+TR57HQ6lau0j3SsVBFlyBLo70CQZUPVnYQYdlk6NSUSyP7bDErlMTMLVmoHc2HbGrPXFWGA1+U+S7COjSoRg2tbQdIDNOM9czrjCeiWmGjmkGT9YhOzvW7gwLybqYebZvW+T6m6CTvfZgPnwIMW2xodySi2aT5yz2mvif/xRY5b/p84YmO0uSe8+bUIAvKt0SRwl89/oDn62shLsBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(SourceNumber: string, TargetNumber: string, CharsCount: long)\r [\r '555-555-1234', '555-555-1212', 46,\r '555-555-1212', '', int(null)\r ]\r | extend values = pack_all()\r | mv-apply removeProperties = values on \r (\r mv-expand kind = array values\r | where values[1] !startswith "555"\r | summarize propsToRemove = make_set(values[0])\r )\r | extend values = bag_remove_keys(values, propsToRemove)\r | project-away propsToRemove\r \`\`\`\r \r **Output**\r \r |SourceNumber|TargetNumber|CharsCount|values\r |---|---|---|---|\r |555-555-1234|555-555-1212|46|{<br> "SourceNumber": "555-555-1234",<br> "TargetNumber": "555-555-1212"<br> }|\r |555-555-1212| | |{<br> "SourceNumber": "555-555-1212"<br> }|\r \r ## See also\r \r * [mv-expand](./mvexpandoperator.md) operator`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/mv-applyoperator","mv-applyoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"mv-expand","Expands multi-value dynamic arrays or property bags into multiple records.","`mv-expand` can be described as the opposite of the aggregation operators\r\nthat pack multiple values into a single [dynamic](./scalar-data-types/dynamic.md)-typed\r\narray or property bag, such as `summarize` ... `make-list()` and `make-series`.\r\nEach element in the (scalar) array or property bag generates a new record in the\r\noutput of the operator. All columns of the input that aren't expanded are duplicated to all the records in the output.\r\n\r\n## Syntax\r\n\r\n*T* `|mv-expand` [`bagexpansion=`(`bag` | `array`)] [`with_itemindex=` *IndexColumnName*] *ColumnName* [`to typeof(` *Typename*`)`] [`,` *ColumnName* ...] [`limit` *Rowlimit*]\r\n\r\n*T* `|mv-expand` [`bagexpansion=`(`bag` | `array`)] [*Name* `=`] *ArrayExpression* [`to typeof(`*Typename*`)`] [`,` [*Name* `=`] *ArrayExpression* [`to typeof(`*Typename*`)`] ...] [`limit` *Rowlimit*]\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*ColumnName*, *ArrayExpression*|string|✓|A column reference, or a scalar expression with a value of type `dynamic` that holds an array or a property bag. The individual top-level elements of the array or property bag get expanded into multiple records.<br>When *ArrayExpression* is used and *Name* doesn't equal any input column name, the expanded value is extended into a new column in the output. Otherwise, the existing *ColumnName* is replaced.|\r\n|*Name*|string| |A name for the new column.|\r\n|*Typename*|string|✓|Indicates the underlying type of the array's elements, which becomes the type of the column produced by the `mv-expand` operator. The operation of applying type is cast-only and doesn't include parsing or type-conversion. Array elements that don't conform with the declared type become `null` values.|\r\n|*RowLimit*|int||The maximum number of rows generated from each original row. The default is 2147483647. `mvexpand` is a legacy and obsolete form of the operator `mv-expand`. The legacy version has a default row limit of 128.|\r\n|*IndexColumnName*|string||If `with_itemindex` is specified, the output includes another column named *IndexColumnName* that contains the index starting at 0 of the item in the original expanded collection.|\r\n\r\n## Returns\r\n\r\nFor each record in the input, the operator returns zero, one, or many records in the output,\r\nas determined in the following way:\r\n\r\n1. Input columns that aren't expanded appear in the output with their original value.\r\n If a single input record is expanded into multiple output records, the value is duplicated\r\n to all records.\r\n1. For each *ColumnName* or *ArrayExpression* that is expanded, the number of output records\r\n is determined for each value as explained in [modes of expansion](#modes-of-expansion). For each input record, the maximum number of output records is calculated. All arrays or property bags are expanded \"in parallel\"\r\n so that missing values (if any) are replaced by null values. Elements are expanded into rows in the order that they appear in the original array/bag.\r\n1. If the dynamic value is null, then a single record is produced for that value (null).\r\n If the dynamic value is an empty array or property bag, no record is produced for that value.\r\n Otherwise, as many records are produced as there are elements in the dynamic value.\r\n\r\nThe expanded columns are of type `dynamic`, unless they're explicitly typed\r\nby using the `to typeof()` clause.\r\n\r\n### Modes of expansion\r\n\r\nTwo modes of property bag expansions are supported:\r\n\r\n* `bagexpansion=bag` or `kind=bag`: Property bags are expanded into single-entry property bags. This mode is the default mode.\r\n* `bagexpansion=array` or `kind=array`: Property bags are expanded into two-element `[`*key*`,`*value*`]` array structures, allowing uniform access to keys and values. This mode also allows, for example, running a distinct-count aggregation over property names.",`### Single column - array expansion\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBY1EK4XMvBIdhSQrhZTKvMTczGRNXq5oXi4FIDDUgYlpRBsa6CgYGcRq6kCkjJCk1BPVdRTUk9RjgTpjeblqFHLLdFMrChLzUhSSANALFPlqAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a: int, b: dynamic)\r [\r 1, dynamic([10, 20]),\r 2, dynamic(['a', 'b'])\r ]\r | mv-expand b\r \`\`\`\r \r **Output**\r \r |a|b|\r |---|---|\r |1|10|\r |1|20|\r |2|a|\r |2|b|\r \r ### Single column - bag expansion\r \r A simple expansion of a single column:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBY1EK4XMvBIdhSQrhZTKvMTczGRNXq5oXi4FIDDUgYlpVCsVFOUXGCpZKSglGirpKIC5RiBukqFSraYORIMRdg1GqBqMgBp4uWJ5uWoUcst0UysKEvNSFJIAxNVM3ZQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a: int, b: dynamic)\r [\r 1, dynamic({"prop1": "a1", "prop2": "b1"}),\r 2, dynamic({"prop1": "a2", "prop2": "b2"})\r ]\r | mv-expand b\r \`\`\`\r \r **Output**\r \r |a|b|\r |---|---|\r |1|{"prop1": "a1"}|\r |1|{"prop2": "b1"}|\r |2|{"prop1": "a2"}|\r |2|{"prop2": "b2"}|\r \r ### Single column - bag expansion to key-value pairs\r \r A simple bag expansion to key-value pairs:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22LwQqDMBBE74H8w5CTQgpNjoJfEjzsNqFINUoqYmj7742WHgqduczM7vO0FPMQUFGDPi4a3MDnSGN/qaVwUqDI6O9WPdScptmoBoqM0jiq3Ssb9ar1B7D/AfsL2AJI0UnxxLiewjZT9GC6HuneT7GllCiDsb+EbQnlfgsZLdidO42Vhpad6d7eMsidxwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a: int, b: dynamic)\r [\r 1, dynamic({"prop1": "a1", "prop2": "b1"}),\r 2, dynamic({"prop1": "a2", "prop2": "b2"})\r ]\r | mv-expand bagexpansion=array b \r | extend key = b[0], val=b[1]\r \`\`\`\r \r **Output**\r \r |a|b|key|val|\r |---|---|---|---|\r |1|["prop1","a1"]|prop1|a1|\r |1|["prop2","b1"]|prop2|b1|\r |2|["prop1","a2"]|prop1|a2|\r |2|["prop2","b2"]|prop2|b2|\r \r ### Zipped two columns\r \r Expanding two columns will first 'zip' the applicable columns and then expand them:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBY1EK4XMvBIdhSQrhZTKvMTczGQdhWQ4WzOal0sBCAx1YCIa1UoFRfkFhkpWCkqJSjoKYJ4RiJekVKuJUBZtqqNgoqNgHKvJyxXLy1WjkFumm1pRkJiXopAEtAEANvW+roIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a: int, b: dynamic, c: dynamic)[\r 1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])\r ]\r | mv-expand b, c\r \`\`\`\r \r **Output**\r \r |a|b|c|\r |---|---|---|\r |1|{"prop1":"a"}|5|\r |1|{"prop2":"b"}|4|\r |1||3|\r \r ### Cartesian product of two columns\r \r If you want to get a Cartesian product of expanding two columns, expand one after the other:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBY1EK4XMvBIdhSQrhZTKvMTczGQdhWQ4W5OXK5qXSwEIDHVgYhrVSgVF+QWGSlYKSolKOgpgnhGIl6RUq4lQFm2qo2AWCzQhlperRiG3TDe1oiAxL0UhCZWbDACXJubPjQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a: int, b: dynamic, c: dynamic)\r [\r 1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])\r ]\r | mv-expand b\r | mv-expand c\r \`\`\`\r \r **Output**\r \r |a|b|c|\r |---|---|---|\r |1|{ "prop1": "a"}|5|\r |1|{ "prop1": "a"}|6|\r |1|{ "prop2": "b"}|5|\r |1|{ "prop2": "b"}|6|\r \r ### Convert output\r \r To force the output of an mv-expand to a certain type (default is dynamic), use \`to typeof\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02MuwoCMRRE+4X8w7BVAtfCBz629TOWFHm5BkyymIu44McbC8WZZjgzjDfcbG8B0gyofI95ItgBfskmRUdwv6xG0aGpP5dc2WTu6VvJcU3YELaEnVZ/eE84EI6Ek1ai06J7IT1W4Tmb7GHbO7iAlzmUi4yZ1WcwBa7uGpJ5A3+651CdAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a: string, b: dynamic, c: dynamic)[\r "Constant", dynamic([1, 2, 3, 4]), dynamic([6, 7, 8, 9])\r ]\r | mv-expand b, c to typeof(int)\r | getschema \r \`\`\`\r \r **Output**\r \r | ColumnName | ColumnOrdinal | DateType | ColumnType |\r |---|---|---|---|\r | a | 0 | System.String | string |\r | b | 1 | System.Object | dynamic |\r | c | 2 | System.Int32 | int |\r \r Notice column \`b\` is returned as \`dynamic\` while \`c\` is returned as \`int\`.\r \r ### Using with_itemindex\r \r Expansion of an array with \`with_itemindex\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBRKC5JLVAw5OWqUSguzc1NLMqsAqmwVchNzE6Nz8ksLtGo0ATJ5pbpplYUJOalKJRnlmTEZ5ak5mbmpaRW2HqCSIUKAIrdlHpcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 4 step 1\r | summarize x = make_list(x)\r | mv-expand with_itemindex=Index x\r \`\`\`\r \r **Output**\r \r |x|Index|\r |---|---|\r |1|0|\r |2|1|\r |3|2|\r |4|3|\r \r ## See also\r \r * For more examples, see [Chart count of live activities over time](./samples.md#chart-concurrent-sessions-over-time).\r * [mv-apply](./mv-applyoperator.md) operator.\r * For the opposite of the mv-expand operator, see [summarize make_list()](makelist-aggfunction.md).\r * For expanding dynamic JSON objects into columns using property bag keys, see [bag_unpack()](bag-unpackplugin.md) plugin.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/mvexpandoperator","mvexpandoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"mysql_request","The `mysql_request` plugin sends a SQL query to a MySQL Server network endpoint and returns the first rowset in the results. The query may return more than one rowset, but only the first rowset is made available for the rest of the Kusto query.",`The plugin is invoked with the [\`evaluate\`](evaluateoperator.md) operator.\r \r > [!IMPORTANT]\r > The \`mysql_request\` plugin is disabled by default.\r > To enable the plugin, run the [\`.enable plugin mysql_request\` command](../management/enable-plugin.md). To see which plugins are enabled, use [\`.show plugin\` management commands](../management/show-plugins.md).\r \r ## Syntax\r \r \`evaluate\` \`mysql_request\` \`(\` *ConnectionString* \`,\` *SqlQuery* [\`,\` *SqlParameters*] \`)\` [\`:\` *OutputSchema*]\r \r ## Parameters\r \r | Name | Type | Required| Description |\r |---|---|---|---|\r | *ConnectionString* | string | ✓ | The connection string that points at the MySQL Server network endpoint. See [authentication](#username-and-password-authentication) and how to specify the [network endpoint](#specify-the-network-endpoint). |\r | *SqlQuery* | string | ✓ | The query that is to be executed against the SQL endpoint. Must return one or more row sets. Only the first set is made available for the rest of the query. |\r | *SqlParameters* | dynamic | | A property bag object that holds key-value pairs to pass as parameters along with the query. |\r | *OutputSchema* | | | The names and types for the expected columns of the \`mysql_request\` plugin output.<br /><br />**Syntax**: \`(\` *ColumnName* \`:\` *ColumnType* [\`,\` ...] \`)\` |\r \r > [!NOTE]\r >\r > * Specifying the *OutputSchema* is highly recommended, as it allows the plugin to be used in scenarios that might otherwise not work without it, such as a cross-cluster query. The *OutputSchema* can also enable multiple query optimizations.\r > * An error is raised if the run-time schema of the first row set returned by the SQL network endpoint doesn't match the *OutputSchema* schema.\r \r ## Authentication and authorization\r \r To authorize to a MySQL Server network endpoint, you need to specify the authorization information in the connection string. The supported authorization method is via username and password.\r \r ## Set callout policy\r \r The plugin makes callouts to the MySql database. Make sure that the cluster's [callout policy](../management/calloutpolicy.md) enables calls of type \`mysql\` to the target *MySqlDbUri*.\r \r The following example shows how to define the callout policy for MySQL databases. We recommend restricting the callout policy to specific endpoints (\`my_endpoint1\`, \`my_endpoint2\`).\r \r \`\`\`\r [\r {\r "CalloutType": "mysql",\r "CalloutUriRegex": "my_endpoint1\\\\.mysql\\\\.database\\\\.azure\\\\.com",\r "CanCall": true\r },\r {\r "CalloutType": "mysql",\r "CalloutUriRegex": "my_endpoint2\\\\.mysql\\\\.database\\\\.azure\\\\.com",\r "CanCall": true\r }\r ]\r \`\`\`\r \r The following example shows an \`.alter callout policy\` command for \`mysql\` *CalloutType*:\r \r \`\`\`\r .alter cluster policy callout @'[{"CalloutType": "mysql", "CalloutUriRegex": "\\\\.mysql\\\\.database\\\\.azure\\\\.com", "CanCall": true}]'\r \`\`\`\r \r ## Username and password authentication\r \r The \`mysql_request\` plugin only supports username and password authentication to the MySQL server endpoint and doesn't integrate with Azure Active Directory authentication.\r \r The username and password are provided as part of the connections string using the following parameters:\r \r \`User ID=...; Password=...;\`\r \r > [!WARNING]\r > Confidential or guarded information should be obfuscated from connection strings and queries so that they are omitted from any Kusto tracing.\r > For more information, see [obfuscated string literals](scalar-data-types/string.md#obfuscated-string-literals).\r \r ## Encryption and server validation\r \r For security, \`SslMode\` is unconditionally set to \`Required\` when connecting to a MySQL server network endpoint. As a result, the server must be configured with a valid SSL/TLS server certificate.\r \r ## Specify the network endpoint\r \r Specify the MySQL network endpoint as part of the connection string.\r \r **Syntax**:\r \r \`Server\` \`=\` *FQDN* [\`Port\` \`=\` *Port*]\r \r Where:\r \r * *FQDN* is the fully qualified domain name of the endpoint.\r * *Port* is the TCP port of the endpoint. By default, \`3306\` is assumed.`,`### SQL query to Azure MySQL DB\r \r The following example sends a SQL query to an Azure MySQL database. It retrieves all records from \`[dbo].[Table]\`, and then processes the results.\r \r > [!NOTE]\r > This example shouldn't be taken as a recommendation to filter or project data in this manner. SQL queries should be constructed to return the smallest data set possible.\r \r \`\`\`\r evaluate mysql_request(\r 'Server=contoso.mysql.database.azure.com; Port = 3306;'\r 'Database=Fabrikam;'\r h'UID=USERNAME;'\r h'Pwd=PASSWORD;',\r 'select * from \`dbo\`.\`Table\`') : (Id: int, Name: string)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### SQL query to an Azure MySQL database with modifications\r \r The following example sends a SQL query to an Azure MySQL database\r retrieving all records from \`[dbo].[Table]\`, while appending another \`datetime\` column,\r and then processes the results on the Kusto side.\r It specifies a SQL parameter (\`@param0\`) to be used in the SQL query.\r \r \`\`\`\r evaluate mysql_request(\r 'Server=contoso.mysql.database.azure.com; Port = 3306;'\r 'Database=Fabrikam;'\r h'UID=USERNAME;'\r h'Pwd=PASSWORD;',\r 'select *, @param0 as dt from \`dbo\`.\`Table\`',\r dynamic({'param0': datetime(2020-01-01 16:47:26.7423305)})) : (Id:long, Name:string, dt: datetime)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### SQL query to an Azure MySQL database without a query-defined output schema\r \r The following example sends a SQL query to an Azure MySQL database without an output schema. This is not recommended unless the schema is unknown, as it may impact the performance of the query.\r \r \`\`\`\r evaluate mysql_request(\r 'Server=contoso.mysql.database.azure.com; Port = 3306;'\r 'Database=Fabrikam;'\r h'UID=USERNAME;'\r h'Pwd=PASSWORD;',\r 'select * from \`dbo\`.\`Table\`')\r | where Id > 0\r | project Name\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/mysqlrequest-plugin","mysqlrequest-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"narrow",'The `narrow` plugin "unpivots" a wide table into a table with three columns:',`* Row number\r * Column type\r * Column value (as \`string\`)\r \r The \`narrow\` plugin is designed mainly for display purposes, as it allows wide\r tables to be displayed comfortably without the need of horizontal scrolling.\r \r The plugin is invoked with the [\`evaluate\`](evaluateoperator.md) operator.\r \r ## Syntax\r \r \`T | evaluate narrow()\``,`The following example shows an easy way to read the output of the Kusto\r \`.show diagnostics\` management command.\r \r \`\`\`\r .show diagnostics\r | evaluate narrow()\r \`\`\`\r \r The results of \`.show diagnostics\` itself is a table with a single row and\r 33 columns. By using the \`narrow\` plugin we "rotate" the output to something\r like this:\r \r Row | Column | Value\r -----|-------------------------------------|-----------------------------\r 0 | IsHealthy | True\r 0 | IsRebalanceRequired | False\r 0 | IsScaleOutRequired | False\r 0 | MachinesTotal | 2\r 0 | MachinesOffline | 0\r 0 | NodeLastRestartedOn | 2017-03-14 10:59:18.9263023\r 0 | AdminLastElectedOn | 2017-03-14 10:58:41.6741934\r 0 | ClusterWarmDataCapacityFactor | 0.130552847673333\r 0 | ExtentsTotal | 136\r 0 | DiskColdAllocationPercentage | 5\r 0 | InstancesTargetBasedOnDataCapacity | 2\r 0 | TotalOriginalDataSize | 5167628070\r 0 | TotalExtentSize | 1779165230\r 0 | IngestionsLoadFactor | 0\r 0 | IngestionsInProgress | 0\r 0 | IngestionsSuccessRate | 100\r 0 | MergesInProgress | 0\r 0 | BuildVersion | 1.0.6281.19882\r 0 | BuildTime | 2017-03-13 11:02:44.0000000\r 0 | ClusterDataCapacityFactor | 0.130552847673333\r 0 | IsDataWarmingRequired | False\r 0 | RebalanceLastRunOn | 2017-03-21 09:14:53.8523455\r 0 | DataWarmingLastRunOn | 2017-03-21 09:19:54.1438800\r 0 | MergesSuccessRate | 100\r 0 | NotHealthyReason | [null]\r 0 | IsAttentionRequired | False\r 0 | AttentionRequiredReason | [null]\r 0 | ProductVersion | KustoRelease_2017.03.13.2\r 0 | FailedIngestOperations | 0\r 0 | FailedMergeOperations | 0\r 0 | MaxExtentsInSingleTable | 64\r 0 | TableWithMaxExtents | KustoMonitoringPersistentDatabase.KustoMonitoringTable\r 0 | WarmExtentSize | 1779165230`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/narrowplugin","narrowplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"new_activity_metrics","Calculates useful activity metrics (distinct count values, distinct count of new values, retention rate, and churn rate) for the cohort of `New Users`. Each cohort of `New Users` (all users, which were first seen in time window) is compared to all prior cohorts.\r\nComparison takes into account *all* previous time windows. For example, for records from T2 to T3, the distinct count of users will be all users in T3 who weren't seen in both T1 and T2.\r\nThe plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*TabularExpression* `| evaluate` `new_activity_metrics(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *Window* [`,` *Cohort*] [`,` *dim1*`,` *dim2*`,` ...] [`,` *Lookback*] `)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *TabularExpression*| string | ✓ | The tabular expression for which to calculate activity metrics.|\r\n| *IdColumn*| string | ✓ | The name of the column with ID values that represent user activity.|\r\n| *TimelineColumn*| string | ✓ | The name of the column that represents the timeline.|\r\n| *Start*| scalar | ✓ | The value of the analysis start period.|\r\n| *End*| scalar | ✓ | The value of the analysis end period.|\r\n| *Window*| scalar | ✓ | The value of the analysis window period. Can be a numeric, datetime, or timespan value, or a string that is one of `week`, `month` or `year`, in which case all periods will be [startofweek](startofweekfunction.md)/[startofmonth](startofmonthfunction.md)/[startofyear](startofyearfunction.md) accordingly. When using `startofweek`, make sure start time is a Sunday, otherwise first cohort will be empty (since [startofweek](startofweekfunction.md) is considered to be a Sunday).|\r\n| *Cohort*| scalar | | Indicates a specific cohort. If not provided, all cohorts corresponding to the analysis time window are calculated and returned.|\r\n| *dim1*, *dim2*, ...| dynamic | | An array of the dimensions columns that slice the activity metrics calculation.|\r\n| *Lookback*| string | | A tabular expression with a set of IDs that belong to the 'look back' period.|\r\n\r\n## Returns\r\n\r\nReturns a table that contains the following for each combination of 'from' and 'to' timeline periods and for each existing column (dimensions) combination:\r\n\r\n* distinct count values\r\n* distinct count of new values\r\n* retention rate\r\n* churn rate\r\n\r\nOutput table schema is:\r\n\r\n|from_TimelineColumn|to_TimelineColumn|dcount_new_values|dcount_retained_values|dcount_churn_values|retention_rate|churn_rate|dim1|..|dim_n|\r\n|---|---|---|---|---|---|---|---|---|---|\r\n|type: as of *TimelineColumn*|same|long|long|double|double|double|..|..|..|\r\n\r\n* `from_TimelineColumn` - the cohort of new users. Metrics in this record refer to all users who were first seen in this period. The decision on *first seen* takes into account all previous periods in the analysis period.\r\n* `to_TimelineColumn` - the period being compared to.\r\n* `dcount_new_values` - the number of distinct users in `to_TimelineColumn` that weren't seen in *all* periods prior to and including `from_TimelineColumn`.\r\n* `dcount_retained_values` - out of all new users, first seen in `from_TimelineColumn`, the number of distinct users that were seen in `to_TimelineCoumn`.\r\n* `dcount_churn_values` - out of all new users, first seen in `from_TimelineColumn`, the number of distinct users that weren't seen in `to_TimelineCoumn`.\r\n* `retention_rate` - the percent of `dcount_retained_values` out of the cohort (users first seen in `from_TimelineColumn`).\r\n* `churn_rate` - the percent of `dcount_churn_values` out of the cohort (users first seen in `from_TimelineColumn`).\r\n\r\n>[!NOTE]\r\n>For definitions of `Retention Rate` and `Churn Rate` - refer to **Notes** section in [activity_metrics plugin](./activity-metrics-plugin.md) documentation.",`The following sample data set shows which users seen on which days. The table was generated based on a source \`Users\` table, as follows:\r \r \`\`\`\r Users | summarize tostring(make_set(user)) by bin(Timestamp, 1d) | order by Timestamp asc;\r \`\`\`\r \r **Output**\r \r |Timestamp|set_user|\r |---|---|\r |2019-11-01 00:00:00.0000000|[0,2,3,4]|\r |2019-11-02 00:00:00.0000000|[0,1,3,4,5]|\r |2019-11-03 00:00:00.0000000|[0,2,4,5]|\r |2019-11-04 00:00:00.0000000|[0,1,2,3]|\r |2019-11-05 00:00:00.0000000|[0,1,2,3,4]|\r \r The output of the plugin for the original table is the following:\r \r \`\`\`\r let StartDate = datetime(2019-11-01 00:00:00);\r let EndDate = datetime(2019-11-07 00:00:00);\r Users \r | evaluate new_activity_metrics(user, Timestamp, StartDate, EndDate-1tick, 1d) \r | where from_Timestamp < datetime(2019-11-03 00:00:00.0000000)\r \`\`\`\r \r **Output**\r \r |R|from_Timestamp|to_Timestamp|dcount_new_values|dcount_retained_values|dcount_churn_values|retention_rate|churn_rate|\r |---|---|---|---|---|---|---|---|\r |1|2019-11-01 00:00:00.0000000|2019-11-01 00:00:00.0000000|4|4|0|1|0|\r |2|2019-11-01 00:00:00.0000000|2019-11-02 00:00:00.0000000|2|3|1|0.75|0.25|\r |3|2019-11-01 00:00:00.0000000|2019-11-03 00:00:00.0000000|1|3|1|0.75|0.25|\r |4|2019-11-01 00:00:00.0000000|2019-11-04 00:00:00.0000000|1|3|1|0.75|0.25|\r |5|2019-11-01 00:00:00.0000000|2019-11-05 00:00:00.0000000|1|4|0|1|0|\r |6|2019-11-01 00:00:00.0000000|2019-11-06 00:00:00.0000000|0|0|4|0|1|\r |7|2019-11-02 00:00:00.0000000|2019-11-02 00:00:00.0000000|2|2|0|1|0|\r |8|2019-11-02 00:00:00.0000000|2019-11-03 00:00:00.0000000|0|1|1|0.5|0.5|\r |9|2019-11-02 00:00:00.0000000|2019-11-04 00:00:00.0000000|0|1|1|0.5|0.5|\r |10|2019-11-02 00:00:00.0000000|2019-11-05 00:00:00.0000000|0|1|1|0.5|0.5|\r |11|2019-11-02 00:00:00.0000000|2019-11-06 00:00:00.0000000|0|0|2|0|1|\r \r Following is an analysis of a few records from the output:\r \r * Record \`R=3\`, \`from_TimelineColumn\` = \`2019-11-01\`, \`to_TimelineColumn\` = \`2019-11-03\`:\r * The users considered for this record are all new users seen on 11/1. Since this is the first period, these are all users in that bin \u2013 [0,2,3,4]\r * \`dcount_new_values\` \u2013 the number of users on 11/3 who weren't seen on 11/1. This includes a single user \u2013 \`5\`.\r * \`dcount_retained_values\` \u2013 out of all new users on 11/1, how many were retained until 11/3? There are three values (\`[0,2,4]\`), while \`count_churn_values\` is one (user=\`3\`).\r * \`retention_rate\` = 0.75 \u2013 the three retained users out of the four new users who were first seen in 11/1.\r \r * Record \`R=9\`, \`from_TimelineColumn\` = \`2019-11-02\`, \`to_TimelineColumn\` = \`2019-11-04\`:\r * This record focuses on the new users who were first seen on 11/2 \u2013 users \`1\` and \`5\`.\r * \`dcount_new_values\` \u2013 the number of users on 11/4 who weren't seen through all periods \`T0 .. from_Timestamp\`. Meaning, users who are seen on 11/4 but who weren't seen on either 11/1 or 11/2 \u2013 there are no such users.\r * \`dcount_retained_values\` \u2013 out of all new users on 11/2 (\`[1,5]\`), how many were retained until 11/4? There's one such user (\`[1]\`), \`while count_churn_values\` is one (user \`5\`).\r * \`retention_rate\` is 0.5 \u2013 the single user that was retained on 11/4 out of the two new ones on 11/2.\r \r \r ### Weekly retention rate, and churn rate (single week)\r \r The next query calculates a retention and churn rate for week-over-week window for \`New Users\` cohort (users that arrived on the first week).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21Ry27DIBC85yvmFmht2U4V5VDlVqk/0FtVWcisExIbLNg8LPXjC7arHFoOsBpmZ9ihKPBOlrxigldWux5asYJrcQnkoRo2V8OGwqojRh1YecY+kYhNT2JTVru83OZlJV9nCln9H+ElEaLFgfCmRrQ+Wi1y7OauwDSg0qtv0J0TkITYdc4ehEhN+dIhUUSefBB9JKbnC4lnVA+8TkOE/WQrFiWNJ2zLuHmZ4Q8W+zflXOWoIqOSiHr9Naf7EB1g9H5WTc/mcSDXiqQh0ZneMKpyWquiwIc6E5ztRvCR0BofGDeiMxp3dHFu0amIDMqrnpj8NM9VdZf0GZZu9RL+WMdrb5ogPtdGr7+yFGC2RJFN0WXY6V8kyQzenajhKeV6YrObTx+dLBtn6/TnGZrjxc/1D5PKiK4LAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-05-01);\r let _end = datetime(2017-05-31);\r range Day from _start to _end step 1d\r | extend d = tolong((Day - _start) / 1d)\r | extend r = rand() + 1\r | extend _users=range(tolong(d * 50 * r), tolong(d * 50 * r + 200 * r - 1), 1) \r | mv-expand id=_users to typeof(long) limit 1000000\r // Take only the first week cohort (last parameter)\r | evaluate new_activity_metrics(['id'], Day, _start, _end, 7d, _start)\r | project from_Day, to_Day, retention_rate, churn_rate\r \`\`\`\r \r **Output**\r \r |from_Day|to_Day|retention_rate|churn_rate|\r |---|---|---|---|\r |2017-05-01 00:00:00.0000000|2017-05-01 00:00:00.0000000|1|0|\r |2017-05-01 00:00:00.0000000|2017-05-08 00:00:00.0000000|0.544632768361582|0.455367231638418|\r |2017-05-01 00:00:00.0000000|2017-05-15 00:00:00.0000000|0.031638418079096|0.968361581920904|\r |2017-05-01 00:00:00.0000000|2017-05-22 00:00:00.0000000|0|1|\r |2017-05-01 00:00:00.0000000|2017-05-29 00:00:00.0000000|0|1|\r \r ### Weekly retention rate, and churn rate (complete matrix)\r \r The next query calculates retention and churn rate for week-over-week window for \`New Users\` cohort. If the previous example calculated the statistics for a single week - the following query produces an NxN table for each from/to combination.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22RwWrDMBBE7/mKuUVqbWynhByKb4Ve+gelGGFtUhVbMtImTaAf35VtyKH1QRbL25ndUVXhlTxFw4RovA0jrGGDcMQ5UYTp2V0cO0qbgRhdYhMZbYaI3UhqVzeHst6XdaOfF4S8/Q94yoBYnAgv5oZjFKtVjsPSlZgmNHbzA7pyLmQhDkPwJ6VyU7l2aFTC6TsYBczjK41HNPd6l5dI7WyrViWLB+xrOaIu8Kcm/bt6uZVohGg0RG+8lHSdxAHOtotqHptvE4Wjyhoagxsdo6nnb1NVeDOJMZloRmLJ0iUEIZisSOcZL2Y45+A9fXdr0LdO2Oj6pN63zm4/ihxWsa5dzDEVOMyrTzF8Uc9zkt1McVj+Uew8u+C7/K4F+s9zXO6/Mr0rj+8BAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _start = datetime(2017-05-01);\r let _end = datetime(2017-05-31);\r range Day from _start to _end step 1d\r | extend d = tolong((Day - _start) / 1d)\r | extend r = rand() + 1\r | extend _users=range(tolong(d * 50 * r), tolong(d * 50 * r + 200 * r - 1), 1) \r | mv-expand id=_users to typeof(long) limit 1000000\r // Last parameter is omitted - \r | evaluate new_activity_metrics(['id'], Day, _start, _end, 7d)\r | project from_Day, to_Day, retention_rate, churn_rate\r \`\`\`\r \r **Output**\r \r |from_Day|to_Day|retention_rate|churn_rate|\r |---|---|---|---|\r |2017-05-01 00:00:00.0000000|2017-05-01 00:00:00.0000000|1|0|\r |2017-05-01 00:00:00.0000000|2017-05-08 00:00:00.0000000|0.190397350993377|0.809602649006622|\r |2017-05-01 00:00:00.0000000|2017-05-15 00:00:00.0000000|0|1|\r |2017-05-01 00:00:00.0000000|2017-05-22 00:00:00.0000000|0|1|\r |2017-05-01 00:00:00.0000000|2017-05-29 00:00:00.0000000|0|1|\r |2017-05-08 00:00:00.0000000|2017-05-08 00:00:00.0000000|1|0|\r |2017-05-08 00:00:00.0000000|2017-05-15 00:00:00.0000000|0.405263157894737|0.594736842105263|\r |2017-05-08 00:00:00.0000000|2017-05-22 00:00:00.0000000|0.227631578947368|0.772368421052632|\r |2017-05-08 00:00:00.0000000|2017-05-29 00:00:00.0000000|0|1|\r |2017-05-15 00:00:00.0000000|2017-05-15 00:00:00.0000000|1|0|\r |2017-05-15 00:00:00.0000000|2017-05-22 00:00:00.0000000|0.785488958990536|0.214511041009464|\r |2017-05-15 00:00:00.0000000|2017-05-29 00:00:00.0000000|0.237644584647739|0.762355415352261|\r |2017-05-22 00:00:00.0000000|2017-05-22 00:00:00.0000000|1|0|\r |2017-05-22 00:00:00.0000000|2017-05-29 00:00:00.0000000|0.621835443037975|0.378164556962025|\r |2017-05-29 00:00:00.0000000|2017-05-29 00:00:00.0000000|1|0|\r \r ### Weekly retention rate with lookback period\r \r The following query calculates the retention rate of \`New Users\` cohort when taking into\r consideration \`lookback\` period: a tabular query with set of Ids that are used to define\r the \`New Users\` cohort (all IDs that don't appear in this set are \`New Users\`). The\r query examines the retention behavior of the \`New Users\` during the analysis period.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22SzW6DMBCE7zzFHO0WBKSKcki4VepjIBdvUjeAkdn8SXn42jgpjVIfMFq+nR2PyXN8UE9OMcGpXtsOWrGC3eIwkoNq2BwNGxqTlhh1a+3+UzV7VIEjNh2JRVGusmKRFaVcR2pk5fgZWf5BqNf/AW+/wGSjCqZ2hHd1wdZ5c7MBtlFkZBpQ6gR+XUFnDsWgzba1/U6I0JvNjRK5x+Uj7+IkLSReUT5+q0MQYzUZETdRjRcsC/9wMsVTzWssiviWofREKXHT7I4ZnQc/CUZXUTmchC8D2a0IOhKt6QyjLKa1TvJ8CuTu/x5M3K84fZGLAW3uwV8xOPtNDYdy6ietk4lO/JmOqj2Ey+7pVN8u91J3xM40ozA6jS1RKJ0STrHSc+XBhkzmUeF66qmZbdwd+fzY2L4Ov9cPqFoyT2oCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r // Generate random data of user activities\r let _lookback = datetime(2017-02-01);\r let _start = datetime(2017-05-01);\r let _end = datetime(2017-05-31);\r let _data = range Day from _lookback to _end step 1d\r | extend d = tolong((Day - _lookback) / 1d)\r | extend r = rand() + 1\r | extend _users=range(tolong(d * 50 * r), tolong(d * 50 * r + 200 * r - 1), 1) \r | mv-expand id=_users to typeof(long) limit 1000000;\r //\r let lookback_data = _data | where Day < _start | project Day, id;\r _data\r | evaluate new_activity_metrics(id, Day, _start, _end, 7d, _start, lookback_data)\r | project from_Day, to_Day, retention_rate\r \`\`\`\r \r **Output**\r \r |from_Day|to_Day|retention_rate|\r |---|---|---|\r |2017-05-01 00:00:00.0000000|2017-05-01 00:00:00.0000000|1|\r |2017-05-01 00:00:00.0000000|2017-05-08 00:00:00.0000000|0.404081632653061|\r |2017-05-01 00:00:00.0000000|2017-05-15 00:00:00.0000000|0.257142857142857|\r |2017-05-01 00:00:00.0000000|2017-05-22 00:00:00.0000000|0.296326530612245|\r |2017-05-01 00:00:00.0000000|2017-05-29 00:00:00.0000000|0.0587755102040816|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/new-activity-metrics-plugin","new-activity-metrics-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"new_guid","Returns a random GUID (Globally Unique Identifier).",`## Syntax\r \r \`new_guid()\`\r \r ## Returns\r \r A new value of type [\`guid\`](scalar-data-types/guid.md).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgvzUyxzUstjwcxNDQBGYdeSRUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print guid=new_guid()\r \`\`\`\r \r **Output**\r \r |guid|\r |--|\r |2157828f-e871-479a-9d1c-17ffde915095|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/newguidfunction","newguidfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"next",`Returns the value of a column in a row that is at some offset following the\r current row in a [serialized row set](./windowsfunctions.md#serialized-row-set).`,"## Syntax\r\n\r\n`next(`*column*`,` [ *offset*`,` *default_value* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *column*| string | ✓ | The column from which to get the values.|\r\n| *offset*| int | | The amount of rows to move from the current row. Default is 1. |\r\n| *default_value*| scalar | | The default value when there's no value in the next row. When no default value is specified, `null` is used.|",`### Filter data based on comparison between adjacent rows\r \r The following query returns rows that show breaks longer than a quarter of a second between calls to \`sensor-9\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAA3WOMQvCMBCFd8H/8La0UEEFB4c4dXHQxe5yNhcMNKnkAir4400U7OR27313710XKYgdo2dz4iBjlJYSzWcv3K8cGV/zSJ6hNZR85GKrykaeEi5PdM6zJPI3kPQF8CNxMEjZb521+3Bww+CE+zEYgYahxAWeTaaV8hNVDUK+rn6RDVZ1MzXU02d/0ndYb5ZvMSIuUtYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r TransformedSensorsData\r | where SensorName == 'sensor-9'\r | sort by Timestamp asc\r | extend timeDiffInMilliseconds = datetime_diff('millisecond', next(Timestamp, 1), Timestamp)\r | where timeDiffInMilliseconds > 250\r \`\`\`\r \r **Output**\r \r |Timestamp|SensorName|Value|PublisherId|MachineId|timeDiff|\r |--|--|--|--|--|--|\r |2022-04-13T00:58:53.048506Z|sensor-9|0.39217481975439894|fdbd39ab-82ac-4ca0-99ed-2f83daf3f9bb|M100|251|\r |2022-04-13T01:07:09.63713Z|sensor-9|0.46645392778288297|e3ed081e-501b-4d59-8e60-8524633d9131|M100|313|\r |2022-04-13T01:07:10.858267Z|sensor-9|0.693091598493419|278ca033-2b5e-4f2c-b493-00319b275aea|M100|254|\r |2022-04-13T01:07:11.203834Z|sensor-9|0.52415808840249778|4ea27181-392d-4947-b811-ad5af02a54bb|M100|331|\r |2022-04-13T01:07:14.431908Z|sensor-9|0.35430645405452|0af415c2-59dc-4a50-89c3-9a18ae5d621f|M100|268|\r |...|...|...|...|...|...|\r \r ### Perform aggregation based on comparison between adjacent rows\r \r The following query calculates the average time difference in milliseconds between calls to \`sensor-9\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAA22NvQ6CQBCEexPfYbuDBAtLi+toLLSB3qzcopewB7ld8Sc+vBwWWNjNzDeZqSMGafvI5CoK0kcpUXG9esP9SpHgGx6RCawFI7Pd7ExqTErh/ITaM4kiD4DSJEAPpeBAp7z0bbsPB991XqjpgxOw4FApwZObaGZ4oaZY1goYIo3Zj9/m+fx7Y8boXwQ4XrL/L/kHqqI6JdkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r TransformedSensorsData\r | where SensorName == 'sensor-9'\r | sort by Timestamp asc\r | extend timeDiffInMilliseconds = datetime_diff('millisecond', next(Timestamp, 1), Timestamp)\r | summarize avg(timeDiffInMilliseconds)\r \`\`\`\r \r **Output**\r \r |avg_timeDiffInMilliseconds|\r |--|\r |30.726900061254298\r \r ### Extend row with data from the next row\r \r In the following query, as part of the serialization done with the [serialize operator](serializeoperator.md), a new column \`next_session_type\` is added with data from the next row.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3POz0tLLUrNS04NTi0uzszPK+aqUSjPAAopJMOlFGxtFdSdSjNzUhSMDAwt1YFKilOLMhNzMqtSFfJSK0riiyGa40sqC4CqwWIayGKaQC0FRflZqcklCiWZuanxiXkp8SmlRYklQBU6CnClmSU5qUhcoE4dTAsAcOu/KLQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r ConferenceSessions\r | where conference == 'Build 2019'\r | serialize next_session_type = next(session_type)\r | project time_and_duration, session_title, session_type, next_session_type\r \`\`\`\r \r **Output**\r \r | time_and_duration | session_title | session_type | next_session_type |\r |---|---|---|---|\r | Mon, May 6, 8:30-10:00 am | Vision Keynote - Satya Nadella | Keynote | Expo Session |\r | Mon, May 6, 1:20-1:40 pm | Azure Data Explorer: Advanced Time Series analysis | Expo Session | Breakout |\r | Mon, May 6, 2:00-3:00 pm | Azure's Data Platform - Powering Modern Applications and Cloud Scale Analytics at Petabyte Scale | Breakout | Expo Session |\r | Mon, May 6, 4:00-4:20 pm | How BASF is using Azure Data Services | Expo Session | Expo Session |\r | Mon, May 6, 6:50 - 7:10 pm | Azure Data Explorer: Operationalize your ML models | Expo Session | Expo Session |\r |...|...|...|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/nextfunction","nextfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"not","Reverses the value of its `bool` argument.",`## Syntax\r \r \`not(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr*|scalar|✓|An expression that evaluates to a boolean value. The result of this expression will be reversed.|\r \r ## Returns\r \r Returns the reversed logical value of its \`bool\` argument.`,`> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUcjLL9FIS8wpTtVUsLVVKCkqTQUAozQnchgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print not(false) == true\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/notfunction","notfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"now","Returns the current UTC time, optionally offset by a given [timespan](scalar-data-types/timespan.md).",`The current UTC time will stay the same across all uses of \`now()\` in a single query statement, even if there's technically a small time difference between when each \`now()\` runs.\r \r ## Syntax\r \r \`now(\`[ *offset* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *offset* | timespan | | A timespan to add to the current UTC clock time. The default value is 0.|\r \r ## Returns\r \r The current UTC clock time, plus the *offset* time if provided, as a \`datetime\`.`,`### Find time elapsed from a given event\r \r The following example shows the time elapsed since the start of the storm events.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRSK0oSc1LUXDNSSwoTk2xzcsv19BU0FUILkksKgnJzE0FKilJzE5VMDQAAK5wFN84AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | extend Elapsed=now() - StartTime\r | take 10\r \`\`\`\r \r ### Get the date relative to a specific time interval\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEIUbBVSEksAcKknFSNnMSk1BwrheKSosy8dB2Fkszc1OKCxLywxJzSVCs4V1MhmpdLAQiUcjPzSktSlXQUzAyKdRSgghn5pUVAIcMMuEhKYiVIIAUuUJmaCFJibGaawssVa83LFQKUqVFIrShJzUsB2+OYng90WV5+uYamgi6qQwBVkuK6twAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let T = datatable(label: string, timespanValue: timespan) [\r "minute", 60s, \r "hour", 1h, \r "day", 1d, \r "year", 365d\r ];\r T \r | extend timeAgo = now() - timespanValue\r \`\`\`\r \r **Output**\r \r | label | timespanValue | timeAgo |\r |--|--|--|\r | year | 365.00:00:00 | 2022-06-19T08:22:54.6623324Z |\r | day | 1.00:00:00 | 2023-06-18T08:22:54.6623324Z |\r | hour | 01:00:00 | 2023-06-19T07:22:54.6623324Z |\r | minute | 00:01:00 | 2023-06-19T08:21:54.6623324Z |\r \r > [!NOTE]\r > This operation can be accomplished with the [ago() function](agofunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/nowfunction","nowfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"pack_all","Creates a [dynamic](scalar-data-types/dynamic.md) property bag object from all the columns of the tabular expression.",`> [!NOTE]\r > The representation of the returned object isn't guaranteed to be byte-level-compatible between runs. For example, properties that appear in the bag may appear in a different order.\r \r ## Syntax\r \r \`pack_all(\`[ *ignore_null_empty* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ignore_null_empty* | bool | | Indicates whether to ignore null/empty columns and exclude them from the resulting property bag. The default value is \`false\`.|`,`The following query will use \`pack_all()\` to create columns for the below table.\r \r |SourceNumber |TargetNumber| CharsCount\r |---|---|---\r |555-555-1234 |555-555-1212 | 46\r |555-555-1234 |555-555-1213 | 50\r |555-555-1313 | | 42\r | |555-555-3456 | 74\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32PsQrCMBCG9zxFtrRwgm2SCgWn4uAigm4ikrZHFNOkpCko+PCmIFgXOY6f+/j+4VoV4tQGk4MbfYO7savRl0PwN6vhqLzG8Muqq/JD5UYbSuOsTsmJMCnlYtos54LB7MxyBqKAfwZnIJdzg0+IxV4OlLCZzIUsGKwEJWfyovgIaFu6V80d23Uf46KMSVL4oK22zsd/jNl0fXh+jeBHTN/V81O7+AAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(SourceNumber:string,TargetNumber:string,CharsCount:long)\r [\r '555-555-1234','555-555-1212',46,\r '555-555-1234','555-555-1213',50,\r '555-555-1313','',42, \r '','555-555-3456',74 \r ]\r | extend Packed=pack_all(), PackedIgnoreNullEmpty=pack_all(true)\r \`\`\`\r \r **Output**\r \r |SourceNumber |TargetNumber | CharsCount | Packed |PackedIgnoreNullEmpty\r |---|---|---|---|---\r |555-555-1234 |555-555-1212 | 46 |{"SourceNumber":"555-555-1234", "TargetNumber":"555-555-1212", "CharsCount": 46} | {"SourceNumber":"555-555-1234", "TargetNumber":"555-555-1212", "CharsCount": 46}\r |555-555-1234 |555-555-1213 | 50 |{"SourceNumber":"555-555-1234", "TargetNumber":"555-555-1213", "CharsCount": 50} | {"SourceNumber":"555-555-1234", "TargetNumber":"555-555-1213", "CharsCount": 50}\r |555-555-1313 | | 42 | {"SourceNumber":"555-555-1313", "TargetNumber":"", "CharsCount": 42} | {"SourceNumber":"555-555-1313", "CharsCount": 42}\r | |555-555-3456 | 74 | {"SourceNumber":"", "TargetNumber":"555-555-3456", "CharsCount": 74} | {"TargetNumber":"555-555-3456", "CharsCount": 74}\r \r > [!NOTE]\r > There is a difference between the *Packed* and the *PackedIgnoreNullEmpty* columns in the last two rows of the above example. These two rows included empty values that were ignored by *pack_all(true)*.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/packallfunction","packallfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"pack_array","Packs all input values into a [dynamic](scalar-data-types/dynamic.md) array.",`## Syntax\r \r \`pack_array(\`*value1*\`,\` [ *value2*, ... ]\`)\`\r \r \`pack_array(*)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value1...valueN* | string | ✓ | Input expressions to be packed into a dynamic array.|\r | *The wildcard \`*\`*| string | | Providing the wildcard \`*\` will pack all input columns into a dynamic array.|\r \r ## Returns\r \r A dynamic array that includes the values of *value1*, *value2*, ... *valueN*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XKMQqAMAwF0N1T/FGlS3X2LBJqFBTbEjM0xcPrILg+nlDcGAWrpBMemjDiUs7wzQ0uynGBYXpHj+Gn+pJ9lCXtHBSZwjGTCFlbHMyhdg9FnMwrXgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | project pack_array(x, y, z)\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |[1,2,4]|\r |[2,4,8]|\r |[3,6,12]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XJMQ6AIBAF0d5T/FKMDVp7FkNwNWoEsmyxGA8vhYnNFPPYhY2gWDlesJCIEVkowTYPSIXCgoKpQhbew9YqOgzmx7viN2tsrpI4HuQFyflzdsyutNqj9LjNC2/1GNRvAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = tostring(x * 2)\r | extend z = (x * 2) * 1s\r | project pack_array(x, y, z)\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |[1,"2","00:00:02"]|\r |[2,"4","00:00:04"]|\r |[3,"6","00:00:06"]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/packarrayfunction","packarrayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"parse","Evaluates a string expression and parses its value into one or more calculated columns. The calculated columns will have nulls, for unsuccessfully parsed strings. If there's no need to use rows where parsing doesn't succeed, prefer using the [parse-where operator](parsewhereoperator.md).","## Syntax\r\n\r\n*T* `| parse` [ `kind=`*kind* [ `flags=`*regexFlags* ]] *expression* `with` [ `*` ] *stringConstant* *columnName* [`:` *columnType*] [ `*` ] `,` ...\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input to parse.|\r\n| *kind* | string | ✓ | One of the [supported kind values](#supported-kind-values). The default value is `simple`.|\r\n| *regexFlags* | string | |If *kind* is `regex`, then you can specify regex flags to be used like `U` for ungreedy, `m` for multi-line mode, `s` for match new line `\\n`, and `i` for case-insensitive. More flags can be found in [RE2 flags](re2.md).|\r\n| *expression* | string | ✓ | An expression that evaluates to a string.|\r\n| *stringConstant* | string | ✓ | A string constant for which to search and parse.|\r\n| *columnName* | string | ✓ | The name of a column to assign a value to, extracted from the string expression. |\r\n| *columnType* | string | | The scalar value that indicates the type to convert the value to. The default is `string`.|\r\n\r\n> [!NOTE]\r\n>\r\n> * The parse pattern may start with *ColumnName* and not only with *StringConstant*.\r\n> * Use `*` in the pattern to skip junk values. The `*` can't be used after a `string` type column.\r\n> * If the parsed *expression* isn't of type `string`, it will be converted to type `string`.\r\n> * Use [`project`](projectoperator.md) if you also want to drop or rename some columns.\r\n\r\n### Supported kind values\r\n\r\n|Text|Description|\r\n|--|--|\r\n| `simple` | This is the default value. *stringConstant* is a regular string value and the match is strict. All string delimiters should appear in the parsed string, and all extended columns must match the required types.|\r\n| `regex` | *stringConstant* may be a regular expression and the match is strict. All string delimiters, which can be a regex for this mode, should appear in the parsed string, and all extended columns must match the required types.|\r\n| `relaxed` | *stringConstant* is a regular string value and the match is relaxed. All string delimiters should appear in the parsed string, but extended columns may partially match the required types. Extended columns that didn't match the required types will get the value `null`.|\r\n\r\n### Regex mode\r\n\r\nIn regex mode, parse will translate the pattern to a regex. Use [RE2 syntax](re2.md) to do the matching, and use numbered captured groups that are handled internally. For example:\r\n\r\n```\r\nparse kind=regex Col with * <regex1> var1:string <regex2> var2:long\r\n```\r\n\r\nIn the parse statement, the regex that will be internally generated by the parse is `.*?<regex1>(.*?)<regex2>(\\-\\d+)`.\r\n\r\n* `*` was translated to `.*?`.\r\n* `string` was translated to `.*?`.\r\n* `long` was translated to `\\-\\d+`.\r\n\r\n## Returns\r\n\r\nThe input table, extended according to the list of columns that are\r\nprovided to the operator.",`The \`parse\` operator provides a streamlined way to \`extend\` a table by using multiple \`extract\` applications on the same \`string\` expression. This result is useful, when the table has a \`string\` column that contains several values that you want to break into individual columns. For example, a column that was produced by a developer trace ("\`printf\`"/"\`Console.WriteLine\`") statement.\r \r In the example below, assume that the column \`EventText\` of table \`Traces\` contains\r strings of the form \`Event: NotifySliceRelease (resourceName={0}, totalSlices={1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})\`.\r The operation will extend the table with six columns: \`resourceName\`, \`totalSlices\`, \`sliceNumber\`, \`lockTime\`, \`releaseTime\`, and \`previousLockTime\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA93UQU+DMBQA4DsJ/+Glp82QrHS6KYajN0OM42Y8MPbcqh2QtkxN/PG2oAyC27jsIhyg4b3Sr695AjXEMklRQQirRJt7KXB0t8NMx/ihA1Ba8mw9dh0w11P9INX3AKJc85fPheApPqLARCGMJKq8lClGyRbDB16g4Bku0g2uSoHSA53rRFQpKmRzD5R9jcrtEmXIph6IPH2LucmlbOLPJ4z6M6DXwSUNqO+BrH9zOKCQuON5qe7/nmZ6Y6LGxDuvw7866qCnHHSQg57dwej/qAdjhx3+KYc/pB6V9vznanbUcfxcDXaYc+U6z7eu89MYwHW+oEikWX3TF+Cd6w1cAOlwCLSHQLoa0h4FBpKt7QxtIGlz9yGNmTR8O3kbS9qjwLYyG0Jsdo9MervwmzC2CbVX5q+Y6g6ow+lUZl+Wzqr62/0N0O/KLnAFAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces \r | parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" * \r | project resourceName, totalSlices, sliceNumber, lockTime, releaseTime, previousLockTime\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|sliceNumber|lockTime|releaseTime|previousLockTime|\r |---|---|---|---|---|---|\r |PipelineScheduler|27|15|02/17/2016 08:40:00|2016-02-17 08:40:00.0000000|2016-02-17 08:39:00.0000000|\r |PipelineScheduler|27|23|02/17/2016 08:40:01|2016-02-17 08:40:01.0000000|2016-02-17 08:39:01.0000000|\r |PipelineScheduler|27|20|02/17/2016 08:40:01|2016-02-17 08:40:01.0000000|2016-02-17 08:39:01.0000000|\r |PipelineScheduler|27|16|02/17/2016 08:41:00|2016-02-17 08:41:00.0000000|2016-02-17 08:40:00.0000000|\r |PipelineScheduler|27|22|02/17/2016 08:41:01|2016-02-17 08:41:00.0000000|2016-02-17 08:40:01.0000000|\r \r ### Regex mode\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA9WUTU/CQBCG7036HyZ7arHItihoTYMevBlihJOUQ2lHWFlasrtFJP5414rYBvm4cDCbbDbtO+0878wORwV9EcUoIYAkUnqNOFr3C0xVH5fKl0qwdGybxsA0SPHYh26m2Mt7j7MYn5BjJBEsgTLLRYzdaIbBI5sjZyn24gkmOUfhgMpUxIsQGXhtB+TXsZvPRigCr+kAz+Jpn+lY6jXcdsOjbgvolX9Bfeo6IL5/s1swF7hgWS4f/v5M81qrbOKcjsG93MtADzHQoxjoSRk8+v/r4Hm7GdxDDO4xdShIT9tLrb0M+3vpaAbdS6YxvDGN9f0H0/iAeSR09lOWJnoeCBzjEjazAN6YmgCxzmsdexDVV3f152EtIFBGhVtSZQtlLUzO9K6jyoykTOzzLB0DEK2xfjK3OxsLyMaNQlKGJ2Urirdb5GTLDF8POi0OQ5usqUX2irGqkFRK8luPivfbPn8CDcwIyFAFAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces \r | parse kind = regex EventText with "(.*?)[a-zA-Z]*=" resourceName @", totalSlices=\\s*\\d+\\s*.*?sliceNumber=" sliceNumber: long ".*?(previous)?lockTime=" lockTime ".*?releaseTime=" releaseTime ".*?previousLockTime=" previousLockTime: date "\\\\)" \r | project resourceName, sliceNumber, lockTime, releaseTime, previousLockTime\r \`\`\`\r \r **Output**\r \r |resourceName|sliceNumber|lockTime|releaseTime|previousLockTime|\r |---|---|---|---|---|\r |PipelineScheduler|15|02/17/2016 08:40:00, |02/17/2016 08:40:00, |2016-02-17 08:39:00.0000000|\r |PipelineScheduler|23|02/17/2016 08:40:01, |02/17/2016 08:40:01, |2016-02-17 08:39:01.0000000|\r |PipelineScheduler|20|02/17/2016 08:40:01, |02/17/2016 08:40:01, |2016-02-17 08:39:01.0000000|\r |PipelineScheduler|16|02/17/2016 08:41:00, |02/17/2016 08:41:00, |2016-02-17 08:40:00.0000000|\r |PipelineScheduler|22|02/17/2016 08:41:01, |02/17/2016 08:41:00, |2016-02-17 08:40:01.0000000|\r \r ### Regex mode with regex flags\r \r If you're interested in getting the resourceName only, use this query:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92Uz0vDMBTH74X+D49e9oPAkkw3rfToTYq43sRDlj63uKwtSTon+McbWxAHruulF5NDXng/kg/vy9PoIDNCooUEcuH8Xmsc3x+wcBkeXQzWGVVsJmEAfj23R9T4Y0hLp14/VlpJfEKNwiKMDdqyNhJTscfkUVWoVYErucW81mgIuNIJ3aTYhC8J2G8zrfdrNAmfE9Cl3GXK51I+Y8sZp2wB9Ca+ojFlBEz7zPmAyuBBlbV9+LvM/NZHTSIyLAe77uSglzhoLw46OAen/6MfnJ/nYJc4WJ9+NLTD62rRydGtq94cXldh8HIXBu1gCINPqITxf9+pIvdjwuAGj/AzIuBduS1MITohi+D3FUZkBNOmkinfULoT7xfmHnmlhQQAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces\r | parse kind = regex EventText with * "resourceName=" resourceName ',' *\r | project resourceName\r \`\`\`\r \r **Output**\r \r |resourceName|\r |---|\r |PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01|\r |PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00|\r |PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01|\r |PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00|\r |PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00|\r \r You won't get the expected results, since the default mode is greedy.\r If you have a few records where the \`resourceName\` sometimes appears as lower-case and sometimes as upper-case, you may get nulls for some values.\r \r To get the wanted result, run the query with the non-greedy \`U\`, and disable case-sensitive \`i\` regex flags.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92UTUvDMBjH74V+h4de9kJhaeY2rfQg0ptWWbuTeMjaZ11c1pYknRP88GYtiIJ7ufRickjgeUl+PH/+AjUkkqWoIICMabOXAvvhDgud4F77oLTkRT6wLTDrpT2cJu5DVGq++ogFT3GOAplC6EtUZS1TjNgWg2deoeAFxukas1qgdEGXmommRAV05oI6XKN6u0QZ0LELokw3CTe1hI682YgSbwrk2r8iPvFckO0zxxMqiTte1urh7zbjG5M1cNxuObzJSQ5yjoNcxEE656Dkf8yD0uMc3jkO75J5NLTd62p6kuO0ri7mMLqyrddb22qNwbY+oWLS/H3Di8zYhMQc97ASLD+YxoLDt1vAO9drGIIzD+Onxfw+jO4ew8CBn8zQc3swbJrK8g1T/Sv6BX2O9haQBAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces\r | parse kind = regex flags = Ui EventText with * "RESOURCENAME=" resourceName ',' *\r | project resourceName\r \`\`\`\r \r **Output**\r \r |resourceName|\r |---|\r |PipelineScheduler|\r |PipelineScheduler|\r |PipelineScheduler|\r |PipelineScheduler|\r |PipelineScheduler|\r \r If the parsed string has newlines, use the flag \`s\`, to parse the text.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92UTVPCMBCG753pf9jJiTIqaVHQOh1P3hzGEW7WQygLRELCJCkfM/54Q5FaRT4uXEwO2U3eTfIkOyvQQk+zDA0kMGDW9b7A2uMcpe3h0sZgrOZyFPgeuPa6GUixHkNHWT5cdQXP8AUFMoNQ02hUrjPssCkmz3yGgkvsZmMc5AJ1Kq2yTBQhJonaqTRrs5NP+6iTqJlKobJJj7tYGjXCdiOiYQvobXxNYxqmUm+O2S+YaZxzlZunv7dp3jlVQC7OyxHeHOSgxzjoSRz07BwR/R//EUX7OcJjHOEp/1HQnj+vWgc5DufVyRwur3zv7d73NoXB9z5gxrS7+4TLQaJxhEsYCjYyiYGyUMCC2zHUgfzgI1B1t8UESO2q/hBUSQlUvBiEKlUlL4GtGa8rFVpnfWmq1OsjS29HuYNP4PdUNSZNAwLFA2j1jpm9ZAu2+ob+BOPecsY+BQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler\\ntotalSlices=27\\nsliceNumber=23\\nlockTime=02/17/2016 08:40:01\\nreleaseTime=02/17/2016 08:40:01\\npreviousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler\\ntotalSlices=27\\nsliceNumber=15\\nlockTime=02/17/2016 08:40:00\\nreleaseTime=02/17/2016 08:40:00\\npreviousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler\\ntotalSlices=27\\nsliceNumber=20\\nlockTime=02/17/2016 08:40:01\\nreleaseTime=02/17/2016 08:40:01\\npreviousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler\\ntotalSlices=27\\nsliceNumber=22\\nlockTime=02/17/2016 08:41:01\\nreleaseTime=02/17/2016 08:41:00\\npreviousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler\\ntotalSlices=27\\nsliceNumber=16\\nlockTime=02/17/2016 08:41:00\\nreleaseTime=02/17/2016 08:41:00\\npreviousLockTime=02/17/2016 08:40:00)"\r ];\r Traces\r | parse kind=regex flags=s EventText with * "resourceName=" resourceName: string "(.*?)totalSlices=" totalSlices: long "(.*?)lockTime=" lockTime: datetime "(.*?)releaseTime=" releaseTime: datetime "(.*?)previousLockTime=" previousLockTime: datetime "\\\\)" \r | project-away EventText\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|lockTime|releaseTime|previousLockTime|\r |---|---|---|---|---|\r |PipelineScheduler<br>|27|2016-02-17 08:40:00.0000000|2016-02-17 08:40:00.0000000|2016-02-17 08:39:00.0000000|\r |PipelineScheduler<br>|27|2016-02-17 08:40:01.0000000|2016-02-17 08:40:01.0000000|2016-02-17 08:39:01.0000000|\r |PipelineScheduler<br>|27|2016-02-17 08:40:01.0000000|2016-02-17 08:40:01.0000000|2016-02-17 08:39:01.0000000|\r |PipelineScheduler<br>|27|2016-02-17 08:41:00.0000000|2016-02-17 08:41:00.0000000|2016-02-17 08:40:00.0000000|\r |PipelineScheduler<br>|27|2016-02-17 08:41:01.0000000|2016-02-17 08:41:00.0000000|2016-02-17 08:40:01.0000000|\r \r ### Relaxed mode\r \r In this example for relaxed mode, \`totalSlices\` extended column must be of type \`long\`. However, in the parsed string, it has the value \`nonValidLongValue\`.\r In \`releaseTime\` extended column, the value \`nonValidDateTime\` can't be parsed as \`datetime\`.\r These two extended columns will get the value \`null\` while the other ones, such as \`sliceNumber\`, still get the correct values.\r \r If you use option \`kind = simple\` for the same query below, you'll get \`null\` for all extended columns. This option is strict on extended columns, and is the difference between relaxed and simple mode.\r \r > [!NOTE]\r > In relaxed mode, extended columns can be partially matched.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92Uz0/CMBTH70v2P7z0BGaGbijozG56I8QI8WI8lO0JldKStuNH4h9vNwIMp+gBPbge1rd9v6/99DVPoIWhZikaSCBj1o2RwMbdAqUd4srGYKzmctz0PXDP0+ZFyv8x9JXlL+uB4Ck+oEBmEBoajcp1in02w+Sez1FwiYN0glkuUAdglWWitJgk6gZgimk/n41QJ1E7AKHS6ZA7L41aYbcV0bAD9Cq+oDENA9CbZUqBVPKRCZ7dMlt+qMjmGhdc5ab3ebL2tVM1SfC7NOHlURp6nOZHEPTkENtt9JQcu0mOHypE/1OFouhrmrBGUxfQbzlK2r8uUtg5ikVPg+Xunu893/jepn/43hvMmXYoUy6zxK3AVpjBrpPAktsJnAE5ACVQDYEccpJqFDsmOS4yVFlJlXwv2eGT3UkUyavcpBrFRfMrJKRw1+hJ7UC2hqYzlOhavWJqz9mSrffQ7xu15UlfBQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=23, lockTime=02/17/2016 08:40:01, releaseTime=nonValidDateTime 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=nonValidDateTime, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=nonValidLongValue, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=nonValidDateTime 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=nonValidLongValue, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces\r | parse kind=relaxed EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" *\r | project-away EventText\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|sliceNumber|lockTime|releaseTime|previousLockTime|\r |---|---|---|---|---|---|\r |PipelineScheduler|27|15|02/17/2016 08:40:00||2016-02-17 08:39:00.0000000|\r |PipelineScheduler|27|23|02/17/2016 08:40:01||2016-02-17 08:39:01.0000000|\r |PipelineScheduler||20|02/17/2016 08:40:01||2016-02-17 08:39:01.0000000|\r |PipelineScheduler||16|02/17/2016 08:41:00|2016-02-17 08:41:00.0000000|2016-02-17 08:40:00.0000000|\r |PipelineScheduler|27|22|02/17/2016 08:41:01|2016-02-17 08:41:00.0000000|2016-02-17 08:40:01.0000000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parseoperator","parseoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_csv","Splits a given string representing a single record of comma-separated values and returns a string array with these values.",`## Syntax\r \r \`parse_csv(\`*csv_text*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *csv_text* | string | ✓ | A single record of comma-separated values. |\r \r > [!NOTE]\r >\r > * Embedded line feeds, commas, and quotes may be escaped using the double quotation mark ('"').\r > * This function doesn't support multiple records per row (only the first record is taken).\r \r ## Returns\r \r A string array that contains the split values.`,`### Filter by count of values in record\r \r Count ADX conference sessions with more than three participants.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3POz0tLLUrNS04NTi0uzszPK+aqUSjPAAopJBYVJVbG56TmpZdkaBQkFhWnxicXl4FYJZnJmQWJeSXFmpoKdgrGQB0pmcUlmXnJJQpaAB0oOCtRAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r ConferenceSessions\r | where array_length(parse_csv(participants)) > 3\r | distinct *\r \`\`\`\r \r **Output**\r \r |sessionid|...|participants|\r |--|--|--|\r |CON-PRT157|...|Guy Reginiano, Guy Yehudy, Pankaj Suri, Saeed Copty|\r |BRK3099|...|Yoni Leibowitz, Eric Fleischman, Robert Pack, Avner Aharoni|\r \r ### Use escaping quotes\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAxXFMQqAMAwF0KuUv1Qhi46CozdwFCSWIIVSa5N6fpU3vFJjNldFW7K5cFXZgz6dZyYc9AGFQFg0cIn5dHe7THRywBotCQBCilmGLf+N8P0LWIqWMVMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result=parse_csv('aa,"b,b,b",cc,"Escaping quotes: ""Title""","line1\\nline2"')\r \`\`\`\r \r **Output**\r \r |result|\r |---|\r |[<br> "aa",<br> "b,b,b",<br> "cc",<br> "Escaping quotes: \\"Title\\"",<br> "line1\\nline2"<br>]|\r \r ### CSV with multiple records\r \r Only the first record is taken since this function does not support multiple records. \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKYnPBRKZ8UWpyflFKbYFiUXFqfHJxWUa6hARQ51EnSSd5Jg8CNdIp0KnUqdKXRMAyO6RzEMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print result_multi_record=parse_csv('record1,a,b,c\\nrecord2,x,y,z')\r \`\`\`\r \r **Output**\r \r |result_multi_record|\r |---|\r |[<br> "record1",<br> "a",<br> "b",<br> "c"<br>]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parsecsvfunction","parsecsvfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_ipv4","Converts IPv4 string to a signed 64-bit wide long number representation in big-endian order.",`## Syntax\r \r \`parse_ipv4(\`*ip*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip* | string | ✓ | The IPv4 that will be converted to long. The value may include net-mask using [IP-prefix notation](#ip-prefix-notation).|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r If conversion is successful, the result will be a long number.\r If conversion isn't successful, the result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcyC+OKSosy8dCsFCK3JFc2lAATqhpZGeoZmFnqGeobqOihcfSMTkIiRqakeEtY3NlTniuWqUUitKEnNS1EAmpyTn5euYKtQkFhUnBqfWVBmgrBOEwD8UomugwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip_string: string)\r [\r '192.168.1.1', '192.168.1.1/24', '255.255.255.255/31'\r ]\r | extend ip_long = parse_ipv4(ip_string)\r \`\`\`\r \r **Output**\r \r |ip_string|ip_long|\r |---|---|\r |192.168.1.1|3232235777|\r |192.168.1.1/24|3232235776|\r |255.255.255.255/31|4294967294|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-ipv4function","parse-ipv4function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_ipv4_mask","Converts the input string of IPv4 and netmask to a signed, 64-bit wide, long number representation in big-endian order.",`## Syntax\r \r \`parse_ipv4_mask(\`*ip* \`,\` *prefix*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip*| string | ✓ | The IPv4 address to convert to a long number.|\r | *prefix*| int | ✓ | An integer from 0 to 32 representing the number of most-significant bits that are taken into account.|\r \r ## Returns\r \r If conversion is successful, the result will be a [long](scalar-data-types/long.md) number.\r If conversion isn't successful, the result will be \`null\`.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShILCpOjc8sKDOJz00sztZQMjQy1zMAQkMlHQUjE00AwjOPByYAAAA=" target="_blank">Run the query</a>\r\n\r\n```\r\nprint parse_ipv4_mask("127.0.0.1", 24)\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-ipv4-maskfunction","parse-ipv4-maskfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_ipv6","Converts IPv6 or IPv4 string to a canonical IPv6 string representation.",`## Syntax\r \r \`parse_ipv6(\`*ip*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip* | string | ✓ | The IPv6/IPv4 network address that will be converted to canonical IPv6 representation. The value may include net-mask using [IP-prefix notation](#ip-prefix-notation).|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r If conversion is successful, the result will be a string representing a canonical IPv6 network address.\r If conversion isn't successful, the result will be an empty string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjcyCMhMrheKSosy8dE2uaC4FIFA3tDTSMzSz0DMyNQVhdR0MIX0jE5AolAdXyBXLVaOQWlGSmpeiADTZTMFWoSCxqDg1HsQB26UJANsJke17AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ipv4: string)\r [\r '192.168.255.255', '192.168.255.255/24', '255.255.255.255'\r ]\r | extend ipv6 = parse_ipv6(ipv4)\r \`\`\`\r \r **Output**\r \r | ipv4 | ipv6 |\r |--------------------|-----------------------------------------|\r | 192.168.255.255 | 0000:0000:0000:0000:0000:ffff:c0a8:ffff |\r | 192.168.255.255/24 | 0000:0000:0000:0000:0000:ffff:c0a8:ff00 |\r | 255.255.255.255 | 0000:0000:0000:0000:0000:ffff:ffff:ffff |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-ipv6function","parse-ipv6function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_ipv6_mask","Converts IPv6/IPv4 string and netmask to a canonical IPv6 string representation.",`## Syntax\r \r \`parse_ipv6_mask(\`*ip*\`,\` *prefix*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ip*| string | | The IPv6/IPv4 network address to convert to canonical IPv6 representation. The value may include net-mask using [IP-prefix notation](#ip-prefix-notation).|\r | *prefix*| int | | An integer from 0 to 128 representing the number of most-significant bits that are taken into account.|\r \r [!INCLUDE [ip-prefix-notation](../../includes/ip-prefix-notation.md)]\r \r ## Returns\r \r If conversion is successful, the result will be a string representing a canonical IPv6 network address.\r If conversion isn't successful, the result will be an empty string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA61S0U7DIBR971fct7qkriuhSEn8AN98N6Zh5TqJFUhh0wc/XtqOmenmfBBCIMA599x7rpIhznWPV9q1PgzabATMewEGw6v0LwJ6azaL7CGDOMoS7u53FKRSA3qPfrrNq4YsK8aXpK7HlRdQkVUxfY+H67UOiQ60h61HdRJXEjpB6a/QAqQ/UgHKojd5GF9h6xwOwCEC9+L25EfieIrAz4qbU2XfU31CvhKC10ogJ51oKGXipmnogRYuMp/lKGPGqQAXSpfUvenwPBfD2GimtmYOIcQpT/6Q9k9kcoX/lyuP2Qfge0CjQDvWdtJYozvZwy04OXhstduxdiT/6stDPy4+ATm+kta1AgAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(ip_string: string, netmask: long)\r [\r // IPv4 addresses\r '192.168.255.255', 120, // 120-bit netmask is used\r '192.168.255.255/24', 124, // 120-bit netmask is used, as IPv4 address doesn't use upper 8 bits\r '255.255.255.255', 128, // 128-bit netmask is used\r // IPv6 addresses\r 'fe80::85d:e82c:9446:7994', 128, // 128-bit netmask is used\r 'fe80::85d:e82c:9446:7994/120', 124, // 120-bit netmask is used\r // IPv6 with IPv4 notation\r '::192.168.255.255', 128, // 128-bit netmask is used\r '::192.168.255.255/24', 128, // 120-bit netmask is used, as IPv4 address doesn't use upper 8 bits\r ]\r | extend ip6_canonical = parse_ipv6_mask(ip_string, netmask)\r \`\`\`\r \r **Output**\r \r |ip_string|netmask|ip6_canonical|\r |---|---|---|\r |192.168.255.255|120|0000:0000:0000:0000:0000:ffff:c0a8:ff00|\r |192.168.255.255/24|124|0000:0000:0000:0000:0000:ffff:c0a8:ff00|\r |255.255.255.255|128|0000:0000:0000:0000:0000:ffff:ffff:ffff|\r |fe80::85d:e82c:9446:7994|128|fe80:0000:0000:0000:085d:e82c:9446:7994|\r |fe80::85d:e82c:9446:7994/120|124|fe80:0000:0000:0000:085d:e82c:9446:7900|\r |::192.168.255.255|128|0000:0000:0000:0000:0000:ffff:c0a8:ffff|\r |::192.168.255.255/24|128|0000:0000:0000:0000:0000:ffff:c0a8:ff00|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-ipv6-maskfunction","parse-ipv6-maskfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_json","Interprets a `string` as a JSON value and returns the value as `dynamic`. If possible, the value is converted into relevant [data types](scalar-data-types/index.md). For strict parsing with no data type conversion, use [extract()](extractfunction.md) or [extract_json()](extractjsonfunction.md) functions.",`It's better to use the parse_json() function over the [extract_json()](./extractjsonfunction.md) function when you need to extract more than one element of a JSON compound object. Use [dynamic()](./scalar-data-types/dynamic.md) when possible.\r \r > **Deprecated aliases:** parsejson(), toobject(), todynamic()\r \r ## Syntax\r \r \`parse_json(\`*json*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *json* | string | ✓ | The string in the form of a [JSON-formatted value](https://json.org/) or a [dynamic](./scalar-data-types/dynamic.md) property bag to parse as JSON.|\r \r ## Returns\r \r An object of type \`dynamic\` that is determined by the value of *json*:\r \r * If *json* is of type \`dynamic\`, its value is used as-is.\r * If *json* is of type \`string\`, and is a [properly formatted JSON string](https://json.org/), then the string is parsed, and the value produced is returned.\r * If *json* is of type \`string\`, but it isn't a [properly formatted JSON string](https://json.org/), then the returned value is an object of type \`dynamic\` that holds the original \`string\` value.`,'In the following example, when `context_custom_metrics` is a `string`\r\nthat looks like this:\r\n\r\n```json\r\n{"duration":{"value":118.0,"count":5.0,"min":100.0,"max":150.0,"stdDev":0.0,"sampledValue":118.0,"sum":118.0}}\r\n```\r\n\r\nthen the following query retrieves the value of the `duration` slot\r\nin the object, and from that it retrieves two slots, `duration.value` and\r\n `duration.min` (`118.0` and `110.0`, respectively).\r\n\r\n```\r\nT\r\n| extend d=parse_json(context_custom_metrics) \r\n| extend duration_value=d.duration.value, duration_min=d["duration"]["min"]\r\n```\r\n\r\n**Notes**\r\n\r\nIt\'s common to have a JSON string describing a property bag in which\r\none of the "slots" is another JSON string. \r\n\r\nFor example:\r\n\r\n```\r\nlet d=\'{"a":123, "b":"{\\\\"c\\\\":456}"}\';\r\nprint d\r\n```\r\n\r\nIn such cases, it isn\'t only necessary to invoke `parse_json` twice, but also\r\nto make sure that in the second call, `tostring` is used. Otherwise, the\r\nsecond call to `parse_json` will just pass on the input to the output as-is,\r\nbecause its declared type is `dynamic`.\r\n\r\n```\r\nlet d=\'{"a":123, "b":"{\\\\"c\\\\":456}"}\';\r\nprint d_b_c=parse_json(tostring(parse_json(d).b)).c\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/parsejsonfunction","parsejsonfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_path","Parses a file path `string` and returns a [`dynamic`](./scalar-data-types/dynamic.md) object that contains the following parts of the path:",`* Scheme\r * RootPath\r * DirectoryPath\r * DirectoryName\r * Filename\r * Extension\r * AlternateDataStreamName\r \r In addition to the simple paths with both types of slashes, the function supports paths with:\r \r * Schemas. For example, "file://..."\r * Shared paths. For example, "\\\\shareddrive\\users..."\r * Long paths. For example, "\\\\?\\C:...""\r * Alternate data streams. For example, "file1.exe:file2.exe"\r \r ## Syntax\r \r \`parse_path(\`*path*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *path* | string | ✓ | The file path.|\r \r ## Returns\r \r An object of type \`dynamic\` that included the path components as listed above.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22NQQrDIBBF94J3EFcJFN0LhUKOUUMwOE0Ek4ozASk9fOMiLYHOrOY95n/vaN8xQpMMUg7r1ArO7pyJfW6yM5ZgSfYRIigqJC+H+YtlBUbrzujq9eENPhdQUOD3by3OLoO3G0LGc4uaXt9EvWHWMYznQMlZz9lbQCFYvUiO5iG5TCiu+5ERhoqa1H4A8WAkd+AAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(p:string) \r [\r @"C:\\temp\\file.txt",\r @"temp\\file.txt",\r "file://C:/temp/file.txt:some.exe",\r @"\\\\shared\\users\\temp\\file.txt.gz",\r "/usr/lib/temp/file.txt"\r ]\r | extend path_parts = parse_path(p)\r \`\`\`\r \r **Output**\r \r |p|path_parts\r |---|---\r |C:\\temp\\file.txt|{"Scheme":"","RootPath":"C:","DirectoryPath":"C:\\\\temp","DirectoryName":"temp","Filename":"file.txt","Extension":"txt","AlternateDataStreamName":""}\r |temp\\file.txt|{"Scheme":"","RootPath":"","DirectoryPath":"temp","DirectoryName":"temp","Filename":"file.txt","Extension":"txt","AlternateDataStreamName":""}\r |file://C:/temp/file.txt:some.exe|{"Scheme":"file","RootPath":"C:","DirectoryPath":"C:/temp","DirectoryName":"temp","Filename":"file.txt","Extension":"txt","AlternateDataStreamName":"some.exe"}\r |\\\\shared\\users\\temp\\file.txt.gz|{"Scheme":"","RootPath":"","DirectoryPath":"\\\\\\\\shared\\\\users\\\\temp","DirectoryName":"temp","Filename":"file.txt.gz","Extension":"gz","AlternateDataStreamName":""}\r |/usr/lib/temp/file.txt|{"Scheme":"","RootPath":"","DirectoryPath":"/usr/lib/temp","DirectoryName":"temp","Filename":"file.txt","Extension":"txt","AlternateDataStreamName":""}`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parsepathfunction","parsepathfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_url","Parses an absolute URL `string` and returns a `dynamic` object contains URL parts.",`> **Deprecated aliases:** parseurl()\r \r ## Syntax\r \r \`parse_url(\`*url*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *url* | string | ✓ | An absolute URL, including its scheme, or the query part of the URL. For example, use the absolute \`https://bing.com\` instead of \`bing.com\`.|\r \r ## Returns\r \r An object of type [dynamic](./scalar-data-types/dynamic.md) that included the URL components: Scheme, Host, Port, Path, Username, Password, Query Parameters, Fragment.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAw3GUQpAQBAA0KuIEl/TLl9q4wwuoIlhhbXNzHJ96n28yHvQbCRJp7qILDQlPqtcZk8XdQBJiAP+jSjy3rwM/hbtjG1aUL8L/BAiqu8P4x5THtY9tlgZt4uC5vUH0Z3WuWIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Result=parse_url("scheme://username:password@host:1234/this/is/a/path?k1=v1&k2=v2#fragment")\r \`\`\`\r \r **Output**\r \r |Result|\r |--|\r |{"Scheme":"scheme", "Host":"host", "Port":"1234", "Path":"this/is/a/path", "Username":"username", "Password":"password", "Query Parameters":"{"k1":"v1", "k2":"v2"}", "Fragment":"fragment"}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parseurlfunction","parseurlfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_urlquery","Returns a `dynamic` object that contains the query parameters.",`> **Deprecated aliases:** parseurlquery()\r \r ## Syntax\r \r \`parse_urlquery(\`*query*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *query* | string | ✓ | The query part of the URL. The format must follow URL query standards (key=value& ...).|\r \r ## Returns\r \r An object of type [dynamic](./scalar-data-types/dynamic.md) that includes the query parameters.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUQhKLS7NKbEtSCwqTo0vLcopLE0tqtRQyja0LTNUyzayLTNSyza2LTNW0gQABqxVODAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Result=parse_urlquery("k1=v1&k2=v2&k3=v3")\r \`\`\`\r \r **Output**\r \r |Result|\r |--|\r |{ "Query Parameters":"{"k1":"v1", "k2":"v2", "k3":"v3"}" }|\r \r The following example uses a function to extract specific query parameters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WPwQrCMBBE74X+w9KDaaAV9abSf9CDXkqRgksppLVuNlVR/900oVDxYC7Jzs6bIQoZKuS9QXrsSiqbY6kMQgbxdZA0U91WG/B3At1gGUcJzzAAe5QNcRttQfvQeDKkXMA0Rm69nS9+jj2TR64dXD0yko6Kee52hQyDt6U6a2c4kPLODERf4y3rdbpaLNezjlAj9Zg6lcmgCIMX4J2xPcMgWuT3l/EYmPg8ISfUmPmX/CoX8gPcEHXrUQEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let getQueryParamValue = (querystring: string, param: string) {\r let params = parse_urlquery(querystring);\r tostring(params["Query Parameters"].[param])\r };\r print UrlQuery = 'view=vs-2019&preserve-view=true'\r | extend view = getQueryParamValue(UrlQuery, 'view')\r | extend preserve = getQueryParamValue(UrlQuery, 'preserve-view')\r \`\`\`\r \r **Output**\r \r | UrlQuery | view | preserve |\r |--|--|--|\r |view=vs-2019&preserve-view=true|vs-2019|true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parseurlqueryfunction","parseurlqueryfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_user_agent","Interprets a user-agent string, which identifies the user's browser and provides certain system details to servers hosting the websites the user visits. The result is returned as [`dynamic`](./scalar-data-types/dynamic.md).",`## Syntax\r \r \`parse_user_agent(\`*user-agent-string*, *look-for*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *user-agent-string*| string | ✓ | The user-agent string to parse.|\r | *look-for*| string or dynamic | ✓ | The value to search for in *user-agent-string*. The possible options are "browser", "os", or "device". If only a single parsing target is required, it can be passed a \`string\` parameter. If two or three targets are required, they can be passed as a \`dynamic\` array.|\r \r ## Returns\r \r An object of type \`dynamic\` that contains the information about the requested parsing targets.\r \r Browser: Family, MajorVersion, MinorVersion, Patch\r \r OperatingSystem: Family, MajorVersion, MinorVersion, Patch, PatchMinor\r \r Device: Family, Brand, Model\r \r > [!WARNING]\r > The function implementation is built on regex checks of the input string against a huge number of predefined patterns. Therefore the expected time and CPU consumption is high.\r When the function is used in a query, make sure it runs in a distributed manner on multiple machines.\r If queries with this function are frequently used, you may want to pre-create the results via [update policy](../management/updatepolicy.md), but you need to take into account that using this function inside the update policy will increase the ingestion latency.`,`### Look-for parameter as string\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz3OsQrCMBSF4d2nuGRKoSZWySDFoZNK7aKWjiWxFwkNSUgqFvHhjQ5uZ/jhOz5oO8EjYpB3TGsHpHEvbYzkgq2AdtoO7hlLaEtAu2wvGVTeG+xQ1XriYlOwLdD6cG1OORg9IuzxNrpUDU5hdTzzNROsIIs34DyhHWBOhpchYv9V+x9L/wdyICokEAPJPkPKisOcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print useragent = "Mozilla/5.0 (Windows; U; en-US) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.5.1"\r | extend x = parse_user_agent(useragent, "browser") \r \`\`\`\r \r Expected result is a dynamic object:\r \r {\r "Browser": {\r "Family": "AdobeAIR",\r "MajorVersion": "2",\r "MinorVersion": "5",\r "Patch": "1"\r }\r }\r \r ### Look-for parameter as dynamic array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2PQUvDQBCF7/6KYU8JJNlsUkUpHiQFlTa1EKWHImWSTMqQ7W7YpNqKP97Vgzx4DA/e8L3BsZngNJLDA/nrHkRpv1hrlNdJCkF1OdaM5qWSd0k2h7c5VOSYxptU5omCte0Z17cqzqVKE688g42zHWuS5fNiE2f+SWFNx4eTw4mtkcVqUcTKd0N4GAZNW6qXPMmZyiFYPr2Wqwg09wSP1PQ2hAo7dCxn4uob6DyRaeHsKQd0I+1/ufd/4MH/hAjai8EjN8FO1M5++lxEwo7eWvrghsR7GP4AbEGfNfcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print useragent = "Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN81-3/10.0.032 Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/4"\r | extend x = parse_user_agent(useragent, dynamic(["browser","os","device"])) \r \`\`\`\r \r Expected result is a dynamic object:\r \r {\r "Browser": {\r "Family": "Nokia OSS Browser",\r "MajorVersion": "3",\r "MinorVersion": "1",\r "Patch": ""\r },\r "OperatingSystem": {\r "Family": "Symbian OS",\r "MajorVersion": "9",\r "MinorVersion": "2",\r "Patch": "",\r "PatchMinor": ""\r },\r "Device": {\r "Family": "Nokia N81",\r "Brand": "Nokia",\r "Model": "N81-3"\r }\r }`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-useragentfunction","parse-useragentfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_version","Converts the input string representation of the version to a comparable decimal number.",`## Syntax\r \r \`parse_version\` \`(\`*version*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *version* | string | ✓ | The version to be parsed.|\r \r > [!NOTE]\r >\r > * *version* must contain from one to four version parts, represented as numbers and separated with dots ('.').\r > * Each part of *version* may contain up to eight digits, with the max value at 99999999.\r > * If the number of parts is less than four, all the missing parts are considered as trailing. For example, \`1.0\` == \`1.0.0.0\`.\r \r ## Returns\r \r If conversion is successful, the result will be a decimal.\r If conversion is unsuccessful, the result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA11QYU/DIBD93l/x7CeITdcyF6MG/4gxC1txZWtpAwyd8cd7UJeod8nx7t3jcWHQAV2ARKcC5W7QLD7CB2fsgRegeMm1bOqUm7Ja4H3dXOF6AWI52losowTW9V2GqTz8RPZpyuL1qehC8YXZTUe9D4itjBW2J32RLYg/TsbiZGwnjbXagdGav9TiqqbdW47J5obuvffaaXLDjSQVEf48jsqZz0xKjOqDxZZXNEydsSwKjt0FrFe+TyPcYoGCc6xWcHqcIv0HuvM8mL0KZrL+z+bJrEJvDvT2NmrnSUHmxryxWTmvr1x2f8Y/TqRlsgf/Bt4b/NePAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let dt = datatable(v: string)\r [\r "0.0.0.5", "0.0.7.0", "0.0.3", "0.2", "0.1.2.0", "1.2.3.4", "1", "99999999.0.0.0"\r ];\r dt\r | project v1=v, _key=1 \r | join kind=inner (dt | project v2=v, _key = 1) on _key\r | where v1 != v2\r | summarize v1 = max(v1), v2 = min(v2) by (hash(v1) + hash(v2)) // removing duplications\r | project v1, v2, higher_version = iif(parse_version(v1) > parse_version(v2), v1, v2)\r \`\`\`\r \r **Output**\r \r |v1|v2|higher_version|\r |---|---|---|\r |99999999.0.0.0|0.0.0.5|99999999.0.0.0|\r |1|0.0.0.5|1|\r |1.2.3.4|0.0.0.5|1.2.3.4|\r |0.1.2.0|0.0.0.5|0.1.2.0|\r |0.2|0.0.0.5|0.2|\r |0.0.3|0.0.0.5|0.0.3|\r |0.0.7.0|0.0.0.5|0.0.7.0|\r |99999999.0.0.0|0.0.7.0|99999999.0.0.0|\r |1|0.0.7.0|1|\r |1.2.3.4|0.0.7.0|1.2.3.4|\r |0.1.2.0|0.0.7.0|0.1.2.0|\r |0.2|0.0.7.0|0.2|\r |0.0.7.0|0.0.3|0.0.7.0|\r |99999999.0.0.0|0.0.3|99999999.0.0.0|\r |1|0.0.3|1|\r |1.2.3.4|0.0.3|1.2.3.4|\r |0.1.2.0|0.0.3|0.1.2.0|\r |0.2|0.0.3|0.2|\r |99999999.0.0.0|0.2|99999999.0.0.0|\r |1|0.2|1|\r |1.2.3.4|0.2|1.2.3.4|\r |0.2|0.1.2.0|0.2|\r |99999999.0.0.0|0.1.2.0|99999999.0.0.0|\r |1|0.1.2.0|1|\r |1.2.3.4|0.1.2.0|1.2.3.4|\r |99999999.0.0.0|1.2.3.4|99999999.0.0.0|\r |1.2.3.4|1|1.2.3.4|\r |99999999.0.0.0|1|99999999.0.0.0|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-versionfunction","parse-versionfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"parse_xml","Interprets a `string` as an XML value, converts the value to a JSON, and returns the value as `dynamic`.",`## Syntax\r \r \`parse_xml(\`*xml*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *xml*| string | ✓ | The XML-formatted string value to parse.|\r \r ## Returns\r \r An object of type [dynamic](./scalar-data-types/dynamic.md) that is determined by the value of *xml*, or null, if the XML format is invalid.\r \r The conversion is done as follows:\r \r XML |JSON |Access\r -----------------------------------|------------------------------------------------|--------------\r \`<e/>\` | { "e": null } | o.e\r \`<e>text</e>\` | { "e": "text" } | o.e\r \`<e name="value" />\` | { "e":{"@name": "value"} } | o.e["@name"]\r \`<e name="value">text</e>\` | { "e": { "@name": "value", "#text": "text" } } | o.e["@name"] o.e["#text"]\r \`<e> <a>text</a> <b>text</b> </e>\` | { "e": { "a": "text", "b": "text" } } | o.e.a o.e.b\r \`<e> <a>text</a> <a>text</a> </e>\` | { "e": { "a": ["text", "text"] } } | o.e.a[0] o.e.a[1]\r \`<e> text <a>text</a> </e>\` | { "e": { "#text": "text", "a": "text" } } | 1\`o.e["#text"] o.e.a\r \r > [!NOTE]\r >\r > * Maximal input \`string\` length for \`parse_xml\` is 1 MB (1,048,576 bytes). Longer strings interpretation will result in a null object.\r > * Only element nodes, attributes and text nodes will be translated. Everything else will be skipped.`,`In the following example, when \`context_custom_metrics\` is a \`string\` that looks like this:\r \r \`\`\`xml\r <?xml version="1.0" encoding="UTF-8"?>\r <duration>\r <value>118.0</value>\r <count>5.0</count>\r <min>100.0</min>\r <max>150.0</max>\r <stdDev>0.0</stdDev>\r <sampledValue>118.0</sampledValue>\r <sum>118.0</sum>\r </duration>\r \`\`\`\r \r then the following CSL Fragment translates the XML to the following JSON:\r \r \`\`\`json\r {\r "duration": {\r "value": 118.0,\r "count": 5.0,\r "min": 100.0,\r "max": 150.0,\r "stdDev": 0.0,\r "sampledValue": 118.0,\r "sum": 118.0\r }\r }\r \`\`\`\r \r and retrieves the value of the \`duration\` slot\r in the object, and from that it retrieves two slots, \`duration.value\` and\r \`duration.min\` (\`118.0\` and \`100.0\`, respectively).\r \r \`\`\`\r T\r | extend d=parse_xml(context_custom_metrics) \r | extend duration_value=d.duration.value, duration_min=d["duration"]["min"]\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-xmlfunction","parse-xmlfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"parse-kv","Extracts structured information from a string expression and represents the information in a key/value form.","The following extraction modes are supported:\r\n\r\n* [**Specified delimeter**](#specified-delimeter): Extraction based on specified delimiters that dictate how keys/values and pairs are separated from each other.\r\n* [**Non-specified delimeter**](#non-specified-delimiter): Extraction with no need to specify delimiters. Any non-alphanumeric character is considered a delimiter.\r\n* [**Regex**](#regex): Extraction based on [RE2](re2.md) regular expression.\r\n\r\n## Syntax\r\n\r\n### Specified delimeter\r\n\r\n*T* `|` `parse-kv` *Expression* `as` `(` *KeysList* `)` `with` `(` `pair_delimiter` `=` *PairDelimiter* `,` `kv_delimiter` `=` *KvDelimiter* [`,` `quote` `=` *QuoteChars* ... [`,` `escape` `=` *EscapeChar* ...]] [`,` `greedy` `=` `true`] `)`\r\n\r\n### Non-specified delimiter\r\n\r\n*T* `|` `parse-kv` *Expression* `as` `(` *KeysList* `)` `with` `(` [`quote` `=` *QuoteChars* ... [`,` `escape` `=` *EscapeChar* ...]] `)`\r\n\r\n### Regex\r\n\r\n*T* `|` `parse-kv` *Expression* `as` `(` *KeysList* `)` `with` `(` `regex` `=` *RegexPattern*`)` `)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*Expression*|string|✓|The expression from which to extract key values.|\r\n|*KeysList*|string|✓|A comma-separated list of key names and their value data types. The order of the keys doesn't have to match the order in which they appear in the text.|\r\n|*PairDelimiter*|string||A delimiter that separates key value pairs from each other.|\r\n|*KvDelimiter*|string||A delimiter that separates keys from values.|\r\n|*QuoteChars*|string||A one- or two-character string literal representing opening and closing quotes that key name or the extracted value may be wrapped with. The parameter can be repeated to specify a separate set of opening/closing quotes.|\r\n|*EscapeChar*|string||A one-character string literal describing a character that may be used for escaping special characters in a quoted value. The parameter can be repeated if multiple escape characters are used.|\r\n|*RegexPattern*|string||A [RE2](re2.md) regular expression containing two capturing groups exactly. The first group represents the key name, and the second group represents the key value.|\r\n\r\n## Returns\r\n\r\nThe original input tabular expression *T*, extended with columns per specified keys to extract.\r\n\r\n> [!NOTE]\r\n>\r\n> * If a key doesn't appear in a record, the corresponding column value will either be `null` or an empty string, depending on the column type.\r\n> * Only keys that are listed in the operator are extracted.\r\n> * The first appearance of a key is extracted, and subsequent values are ignored.\r\n> * When extracting keys and values, leading and trailing white spaces are ignored.",`### Extraction with well-defined delimiters\r \r In the following example, keys and values are separated by well defined delimiters. These delimeters are comma and colon characters.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02N0QqCMBiF73uKH29UmGClFAMfQKiuvI/h/tqfNmVbs6CHz1FCl+cczveNhrQD60wVNcqgkLXkRbnfFeVus2VwFK0ijfw0SMzzNYMGn45DoxAsGk8tAll4jAwO6LHnUOvLEK3eMApjMet8QIOwkHyPcyJ9nTGLqx9CXDS/PYWJnIJkFGTOEnu6k0NTxSxm0Pn/hsdpkJnhhq3LxCReAfEBrq2ju9UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"\r | parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')\r | project-away str\r \`\`\`\r \r **Output**\r \r |Text| ThreadId| Machine|\r |--|--|--|\r |The service is up| 458745723| Node001\r \r ### Extraction with value quoting\r \r Sometimes key names or values are wrapped in quotes, which allows the values themselves to contain delimiter characters. The following examples show how a \`quote\` argument is used for extracting such values.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02Py6oCMQyG9z5F6KYKM9KOuin0LdwdROpM1OjYzmnjiODD24qoJIs/9y9DJM+QOFqZYmu1mutizQK6xN9wCbs7Y7K6WcHeUX+NaEUbvMeWKXhwuxAZOwECR8wLmS4obKMaXavia62MUma1lJMHDC4mrM9jOQsuwfRPfqfkxnSOscgKMpLJTeQPVeH56BeM6UPRb5x3bQY34iNMB0dx22FPF2LMz4Gs4Dz+ZmzO/F8Do5VCzgpWDKf8Tu1u7l7QnivUg0kbAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'\r | parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')\r | project-away str\r \`\`\`\r \r **Output**\r \r |event time| src| dst| bytes| failure|\r |--|--|--|--|--|\r |2021-01-01 10:00:54.0000000| 10.1.1.123| 10.1.1.124| 125| connection aborted|\r \r The following example uses different opening and closing quotes:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02PzU7DMAzH7zyFb0mkFiVlu0TKk0zTlLUGzLqkJF6nSTw8MQIV2Qf//fnzUigxVC5B1TIGZ5+d2PACU+VN7uD8YKzBDXt4jTTfCgY95pRwZMoJ4jkXxsmAxhXbQqYrmqAHO7jeioOz3lq/3xn19AVLLBX7yyqHIVbQB7XNqaOHKTJK3EGj8tJG6a0Tpk38EHmYs4hfqL+qgTvxO+glUjlNONOVGNuPoDq4rP8zoWU+b5kxKG2UEbiSP9pbfbzHh6z7BsDEnzAjAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'\r | parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')\r | project-away str\r \`\`\`\r \r **Output**\r \r |event time| src| dst| bytes| failure|\r |--|--|--|--|--|\r |2021-01-01 10:00:54.0000000| 10.1.1.123| 10.1.1.124| 125| connection aborted|\r \r The values themselves may contain properly escaped quote characters, as the following example shows:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02PzW7CMAyA73sKr5eA1KKk0EukvAW3FU2h9WigpV1iQJX28NgIwZRI+fwj+8sUw5kgUXQqxcYZvTJyyjW0id7hBvYzYXKmrODHh/4S0WXUIUQcRkLoxsRTkEfVdbaf8ZOfDCgM6EpdmkLL3RpttbbVRn38weRjwuJ0ld3gEyy+lLSrnW09oWAObGS5HM6HXHRe/HCx/Sj8tHnWlnAL1MFi8iF+t9iHIRDy30DlcLr+zzjO/F7Y3amMEVPjJ+a6Vkuxi+MRGyr8zc9ieAfsfwfSJwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\\\"bye!\\\\"" time=2021-01-01T10:00:54'\r | parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\\\')\r | project-away str\r \`\`\`\r \r **Output**\r \r |time| src| dst| bytes| failure|\r |--|--|--|--|--|\r |2021-01-01 10:00:54.0000000| 10.1.1.123| 10.1.1.124| 125| the remote host sent "bye!"|\r \r ### Extraction in greedy mode\r \r There are cases when unquoted values may contain pair delimiters. In this case, use the \`greedy\` mode to indicate to the operator to scan until the next key appearance (or end of string) when looking for the value ending.\r \r The following examples compare how the operator works with and without the \`greedy\` mode specified:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NMQvCMBBGd3/FbWmhHbMI2Zwc3J3kqIc5Y5NwORoK/fE2KOLywfvg8bJwVCgqzkScyZ2Tj3BKBNmnSM5aC7bNxLq6C1W4JgnmsEFGKTSGpbmABbqmH3fg+Bg+9o+a/IUeKquHLiPL7U4vnllpj4MZICz/jzN9y0h60qQjVlxb6g1YjlF0sAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print str='name=John Doe phone=555 5555 city=New York'\r | parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')\r | project-away str\r \`\`\`\r \r **Output**\r \r |name| phone| city|\r |--|--|--|\r |John| 555| New\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NMQvCMBBGd3/FbWmhHbMI2Zwc3J0ktEdzxibhejYE/PEmKOLywfvg8RJTENiEjQp2RXOOLsApIiQXAxqtNeg2E0kxF8xwjezV4QXJ8oaj35sLdoOu6ccKFJbhY/+oyV/oIZM46JIlvs34oJUEaxzUAH7/f0x9FkacixF+Yt+aHO84yWizLa37BiIpW9a9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print str='name=John Doe phone=555 5555 city=New York'\r | parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)\r | project-away str\r \`\`\`\r \r **Output**\r \r |name| phone| city|\r |--|--|--|\r |John Doe| 555 5555| New York|\r \r ### Extraction with no well-defined delimiters\r \r In the following example, any non-alphanumeric character is considered a valid delimiter:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSguKbJVMjIwMtQ1AKEQQwMrAwMrYxOFaE8/N/9YhZCMotTEFM8UKxNTC3MTU3MjYx0F38TkjMy8VCu//JRUAwNDHYWQ1IoSK4XgksSiktQUJa4ahYLEouJU3ewykPEKicUKGhAVQF5mXroOwtCcfBAXZh5UXhNkQFF+VmpyiW5ieWIlSBgATRrnIq0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"\r | parse-kv str as (Text: string, ThreadId:long, Machine: string)\r | project-away str\r \`\`\`\r \r **Output**\r \r |Text| ThreadId| Machine|\r |--|--|--|\r |Started| 458745723| Node001|\r \r Values quoting and escaping is allowed in this mode as shown in the following example:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WNTQuCQBRF9/2Kx2xGYYTxC2PAbeAi27jLFoM+cirUZkYt6MfnUBHczeVy7hm16i0Yq3MS8SgMuEsVcsG5iBM4FuXucIKq0yjbohVJus2SNItiBnvZdKpHUQ4tch4yqPBhBdCqQzCoZ9Ug1DUFZWAaKdm8YJTaYHCdnQ6kAe9DrE31Z/aX3AZXf//f3YdF2Q68+zRYzAklDNA0csScrhbf3evhgo0N5CKfDnoDfs645tsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\\\' is up'"\r | parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\\\')\r | project-away str\r \`\`\`\r \r **Output**\r \r |Text| ThreadId| Machine|\r |--|--|--|\r |The service ' is up| 458745723| Node001|\r \r ### Extraction using regex\r \r When no delimiters define text structure well enough, regular expression-based extraction can be useful.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA32QQW6DMBBF9z3FyBtDEofWoES1hNJ7ECq59gBOGiBjE1qph6/ZVMmmi9m8ma95+iO5PoAPVL7xihE2SEgw0aeCLoTRqyzrBh96fcGtGS4ZoXWEJhws+lBmh658kXnBNhCz1ymyf7J3x9rekILz8ZezCmTRYPNhtDCN3IvC7qTQO5kLWbwaqW3+bPY5q/nTD4yaPIrzbVEG7SGp+J00r1Xkrm83sPA/oQf+8DtuoJ2cTWF2oYOEsMWv2AVLquMM9To9+pWKk1TvrF6ljKeLBA2n2IHQs/5eRH4Blp2dfEUBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'\r | parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\\w ]+)\\s*:\\s*([^"]*)"')\r | project-away str\r \`\`\`\r \r **Output**\r \r |referer url| request url| advertiser id|\r |--|--|--|\r |\`https://hostname.com/redirect?dest=/?h=1234\`| \`https://hostname.com/?h=1234\`| 24fefbca-cf27-4d62-a623-249c2ad30c73|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parse-kv-operator","parse-kv-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"parse-where","Evaluates a string expression, and parses its value into one or more calculated columns. The result is only the successfully parsed strings.","`parse-where` parses the strings in the same way as [parse](parseoperator.md), and filters out strings that were not parsed successfully.\r\n\r\nSee [parse operator](parseoperator.md), which produces nulls for unsuccessfully parsed strings.\r\n\r\n## Syntax\r\n\r\n*T* `| parse-where` [`kind=`*kind* [`flags=` *regexFlags*]] *expression* `with` `*` (*stringConstant* *columnName* [`:` *columnType*]) `*`...\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input to parse.|\r\n| *kind* | string | ✓ | One of the [supported kind values](#supported-kind-values). The default value is `simple`.|\r\n| *regexFlags* | string | |If *kind* is `regex`, then you can specify regex flags to be used like `U` for ungreedy, `m` for multi-line mode, `s` for match new line `\\n`, and `i` for case-insensitive. More flags can be found in [RE2 flags](re2.md).|\r\n| *expression* | string | ✓ | An expression that evaluates to a string.|\r\n| *stringConstant* | string | ✓ | A string constant for which to search and parse.|\r\n| *columnName* | string | ✓ | The name of a column to assign a value to, extracted from the string expression. |\r\n| *columnType* | string | | The scalar value that indicates the type to convert the value to. The default is the `string`.|\r\n\r\n>[!NOTE]\r\n>\r\n> * Use [project](projectoperator.md) if you also want to drop or rename some columns.\r\n> * Use `*` in the pattern to skip junk values. This value can't be used after `string` column.\r\n> * The parse pattern may start with *ColumnName*, in addition to *StringConstant*.\r\n> * If the parsed *expression* isn't of type `string`, it will be converted to type `string`.\r\n\r\n### Supported kind values\r\n\r\n|Text|Description|\r\n|--|--|\r\n| `simple` | This is the default value. *stringConstant* is a regular string value and the match is strict. All string delimiters should appear in the parsed string, and all extended columns must match the required types.|\r\n| `regex` | *stringConstant* may be a regular expression and the match is strict. All string delimiters, which can be a regex for this mode, should appear in the parsed string, and all extended columns must match the required types.|\r\n\r\n### Regex mode\r\n\r\nIn regex mode, parse will translate the pattern to a regex and use [RE2 syntax](re2.md) in order to do the matching using numbered captured groups that are handled internally. For example:\r\n\r\n```\r\nparse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long\r\n```\r\n\r\nThe regex that will be generated by the parse internally is `.*?<regex1>(.*?)<regex2>(\\-\\d+)`.\r\n\r\n* `*` was translated to `.*?`.\r\n* `string` was translated to `.*?`.\r\n* `long` was translated to `\\-\\d+`.\r\n\r\n## Returns\r\n\r\nThe input table, which is extended according to the list of columns that are provided to the operator.\r\n\r\n> [!NOTE]\r\n> Only successfully parsed strings will be in the output. Strings that don't match the pattern will be filtered out.",`The \`parse-where\` operator provides a streamlined way to \`extend\` a table by using multiple \`extract\` applications on the same \`string\` expression. This is most useful when the table has a \`string\` column that contains several values that you want to break into individual columns. For example, you can break up a column that was produced by a developer trace ("\`printf\`"/"\`Console.WriteLine\`") statement.\r \r ### Using \`parse\`\r \r In the example below, the column \`EventText\` of table \`Traces\` contains strings of the form \`Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})\`. The operation below will extend the table with six columns: \`resourceName\` , \`totalSlices\`, \`sliceNumber\`, \`lockTime\`, \`releaseTime\`, \`previousLockTime\`, \`Month\`, and \`Day\`.\r \r A few of the strings don't have a full match.\r \r Using \`parse\`, the calculated columns will have nulls.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92UTU/DMAyG75X6H6ycNlRpaYENinrkhibEdkMIZZ3ZAlk7JekAiR9P0i/SARuH7UJ7aOy+cfzEiQVqmEqWooIE5kybdyawd73BTE/xTcegtOTZou97YJ776kPK/zGMc82f3ieCp3iHAplC6ElUeSFTHLMVJrd8jYJnOEmXOC8EygB0rpkop6gkGgWg7HBcrGYoE55tmODzx6w0AxB5+jLlJg6NBuFoENFwCPQiPqMxDQOQ1ZK/C9YSNzwv1M3PYU4vjapPguMyhec7OWiXo9kBUwrUxvEnCHp0iIj+j2JE0e8c4T6OsKzWHo6S9uAc2xejc8CGO5noYZjMGfO9hyvfq7sF+N4HrJk0JG2zgFeul3ACpINGwDWBdMmIa8UGJFvYCC4gcXG/JC0zafFtcBeWuFZs+5uVEDv7GzJpdqHxNPq+1Ve4Mn/GVFeldaHqajsktcdJvPY0qQZNlDa/2rOVxSekEWJPoQUAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces \r | parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previouLockTime: date ")" * \r | project\r resourceName,\r totalSlices,\r sliceNumber,\r lockTime,\r releaseTime,\r previouLockTime\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|sliceNumber|lockTime|releaseTime|previousLockTime|\r |---|---|---|---|---|---|\r |||||||\r |||||||\r |||||||\r |PipelineScheduler|27|20|02/17/2016 08:40:01|2016-02-17 08:40:01.0000000|2016-02-17 08:39:01.0000000|\r |PipelineScheduler|27|22|02/17/2016 08:41:01|2016-02-17 08:41:00.0000000|2016-02-17 08:40:01.0000000|\r \r ### Using \`parse-where\`\r \r Using 'parse-where' will filter-out unsuccessfully parsed strings from the result.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92UzU7DMAyA75X6DlZOGypaWmCDoh65oQmx3RBCWWe2QNZOSbqBxMOT/pJubOOwXWgOrR3b9WcnFqhhLFmMCiKYMm3WRGDnboWJHuOHDkFpyZNZ13XAPE/lixT7IQxTzV8/R4LH+IgCmULoSFRpJmMcsgVGD3yJgic4iuc4zQRKD3SqmShcVBQMPFD55zBbTFBGPFkxwacvSSF6INL4fcxNHBr0/EEvoH4f6HV4SUPqeyDLX+42WEpc8TRT97+HubgxVl3inZbJv9rLQdscdQVMK1AbxZ8g6MkhAvo/mhEEuzn8Qxx+0a0DHAXt0Tk2L0brgPX3MtHjMJkz5jrPt65TTQtwnS9YMqnwfD1HidCMDFhzPYczIC1AArYIpM1HbCk0OMksj2BjEhv6x6QhJ00R8uA2MrGlMJ9yuQnJvbfAyVYtaodu7lBSy/QNY1122Kaqmm6hVBor80pT5+rVUZoEK81mGt84KDIhqQUAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces \r | parse-where EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" * \r | project\r resourceName,\r totalSlices,\r sliceNumber,\r lockTime,\r releaseTime,\r previousLockTime\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|sliceNumber|lockTime|releaseTime|previousLockTime|\r |---|---|---|---|---|---|\r |PipelineScheduler|27|20|02/17/2016 08:40:01|2016-02-17 08:40:01.0000000|2016-02-17 08:39:01.0000000|\r |PipelineScheduler|27|22|02/17/2016 08:41:01|2016-02-17 08:41:00.0000000|2016-02-17 08:40:01.0000000|\r \r ### Regex mode using regex flags\r \r To get the resourceName and totalSlices, use the following query:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92Uz0/CMBTH70v2P7z0BGaGbiLozA7G7KbTAJ6MIWV7QqW0pO0AE/94y5YYMPLjgBfbQw/fb1/z6fvmCbQw0CxHAwkUzLo9EthIFyjtAFc2BmM1l+Om74FbL/VBKj2GTFn+9tEXPMceCmQGoaHRqFLnmLEZJk98joJL7OcTLEqBOgCrLBPVFZNIJYcLJngx5NLieC2btZKVsxHqJAwDECqfDrgrRaNW2G1FNOwAvYrbNKZO1fWruw1zjQuuSnP/e5mLa+dqkuC0WFH3B8flXg56iIMexUFPznGgPe32/2hPFO3mCA9xhMe0p6L9+5h19nLsj9nRHC5mvvd643v12PC9T5gzbfB8OUGNMOWycKNEu7is4HuMwJLbCZwB6aX9x+feXZrdPqQJgU1cIAFZWzYRySZw7OjkuLZVz2r1jrndKrL1Q1+VQ2/Q3QQAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces\r | parse-where kind = regex EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *\r | project resourceName, totalSlices\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|\r |--|--|\r ||\r \r ### \`parse-where\` with case-insensitive regex flag\r \r In the above query, the default mode was case-sensitive, so the strings were parsed successfully. No result was obtained.\r \r To get the required result, run \`parse-where\` with a case-insensitive (\`i\`) regex flag.\r \r Only three strings will be parsed successfully, so the result is three records (some totalSlices hold invalid integers).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA92Uz0/CMBTH70v2P7zsBGaGbiLozA7G7KbTAJ6MIWV7jEppSdsBJv7xlC0xYOTHAS+2hx6+377m0/fN42hgoGiGGmLIqbF7xLGRLFCYAa5MBNooJoqm64Bdb/XhVXoEqTRs/NnnLMMecqQaoaFQy1JlmNIZxi9sjpwJ7GcTzEuOygcjDeXVFR0LKYYLylk+ZMJgsZH1RknL2QhVHAQ+cJlNB8yWImEr6LZCEnSA3ERtEhGrqvrV/Ya5wgWTpX78vczVrXU1Pf+8WGH3B8f1QQ5yjIOcxEHOznGkPe32/2hPGO7nCI5xBKe0p6L9+5h1DnIcjtnJHDZmrvN+5zr12HCdL5hTpfFyOUGFMGUit6NE2bisYMxpoWMG3+MElsxM4AK8XtJ/fu09JOn9UxJ7sI0Nnu9tLNuo3jZ4ZClFUduq55X8wMzsFNn5qTU3KKnV5QQAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Traces = datatable(EventText: string)\r [\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",\r "Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"\r ];\r Traces\r | parse-where kind = regex flags=i EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *\r | project resourceName, totalSlices\r \`\`\`\r \r **Output**\r \r |resourceName|totalSlices|\r |---|---|\r |PipelineScheduler|27|\r |PipelineScheduler|27|\r |PipelineScheduler|27|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/parsewhereoperator","parsewhereoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"Partition","The partition operator partitions the records of its input table into multiple subtables according to values in a key column. The operator runs a subquery on each subtable, and produces a single output table that is the union of the results of all subqueries. This operator is useful when you need to perform a subquery only on a subset of rows that belongs to the same partition key, and not query the whole dataset. These subqueries could include aggregate functions, window functions, top N and others.","The partition operator supports several strategies of subquery operation:\r\n\r\n* [Native](#native-strategy) - use with an implicit data source with thousands of key partition values.\r\n* [Shuffle](#shuffle-strategy) - use with an implicit source with millions of key partition values.\r\n* [Legacy](#legacy-strategy) - use with an implicit or explicit source for 64 or less key partition values.\r\n\r\n## Native strategy\r\n\r\nThis subquery is a tabular transformation that doesn't specify a tabular source. The source is implicit and is assigned according to the subtable partitions. It should be applied when the number of distinct values of the partition key isn't large, roughly in the thousand. Use `hint.strategy=native` for this strategy. There's no restriction on the number of partitions.\r\n\r\n## Shuffle strategy\r\n\r\nThis subquery is a tabular transformation that doesn't specify a tabular source. The source is implicit and will be assigned according to the subtable partitions. The strategy applies when the number of distinct values of the partition key is large, in the millions. Use `hint.strategy=shuffle` for this strategy. There's no restriction on the number of partitions. For more information about shuffle strategy and performance, see [shuffle](shufflequery.md).\r\n\r\n## Native and shuffle strategy operators\r\n\r\nThe difference between `hint.strategy=native` and `hint.strategy=shuffle` is mainly to allow the caller to indicate the cardinality and execution strategy of the subquery, and can affect the execution time. There's no other semantic difference\r\nbetween the two.\r\n\r\nFor `native` and `shuffle` strategy, the source of the subquery is implicit, and can't be referenced by the subquery. This strategy supports a limited set of operators: `project`, `sort`, `summarize`, `take`, `top`, `order`, `mv-expand`, `mv-apply`, `make-series`, `limit`, `extend`, `distinct`, `count`, `project-away`, `project-keep`, `project-rename`, `project-reorder`, `parse`, `parse-where`, `reduce`, `sample`, `sample-distinct`, `scan`, `search`, `serialize`, `top-nested`, `top-hitters` and `where`.\r\n\r\nOperators like `join`, `union`, `external_data`, `evaluate` (plugins), or any other operator that involves table source that isn't the subtable partitions, aren't allowed.\r\n\r\n## Legacy strategy\r\n\r\nLegacy subqueries can use the following sources:\r\n\r\n* Implicit - The source is a tabular transformation that doesn't specify a tabular source. The source is implicit and will be assigned according to the subtable partitions. This scenario applies when there are 64 or less key values. \r\n* Explicit - The subquery must include a tabular source explicitly. Only the key column of the input table is available in the subquery, and referenced by using its name in the `toscalar()` function.\r\n\r\nFor both implicit and explicit sources, the subquery type is used for legacy purposes only, and indicated by the use of `hint.strategy=legacy`, or by not including any strategy indication.\r\n\r\nAny other reference to the source is taken to mean the entire input table, for example, by using the [as operator](asoperator.md) and calling up the value again.\r\n\r\n> [!NOTE]\r\n> It is recommended to use the native or shuffle strategies rather than the legacy strategy, since the legacy strategy is limited to 64 partitions and is less efficient.\r\n> The legacy partition operator is currently limited by the number of partitions.\r\n> The operator will yield an error if the partition column (*Column*) has more than 64 distinct values.\r\n\r\n## All strategies\r\n\r\nFor native, shuffle and legacy subqueries, the result must be a single tabular result. Multiple tabular results and the use of the `fork` operator aren't supported. A subquery can't include other statements, for example, it can't have a `let` statement.\r\n\r\n## Syntax\r\n\r\n*T* `|` `partition` [`hint.strategy=` *strategy*] [ *PartitionParameters* ] `by` *Column* `(` *TransformationSubQuery* `)`\r\n\r\n*T* `|` `partition` [ *PartitionParameters* ] `by` *Column* `{` *ContextFreeSubQuery* `}`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular source whose data is to be processed by the operator.|\r\n| *strategy*| | | The partition strategy, `native`, `shuffle` or `legacy`. `native` strategy is used with an implicit source with thousands of key partition values. `shuffle` strategy is used with an implicit source with millions of key partition values. `legacy` strategy is used with an explicit or implicit source with 64 or less key partition values.|\r\n| *Column*| | ✓ | The name of a column in *T* whose values determine how the input table is to be partitioned.|\r\n| *TransformationSubQuery*| | ✓ | A tabular transformation expression, whose source is implicitly the subtables produced by partitioning the records of *T*, each subtable being homogenous on the value of *Column*.|\r\n| *ContextFreeSubQuery*| | ✓ | A tabular expression that includes its own tabular source, such as a table reference. The expression can reference a single column from *T*, being the key column *Column* using the syntax `toscalar(`*Column*`)`.|\r\n| *PartitionParameters*| | | Zero or more space-separated parameters in the form of: *HintName* `=` *Value* that control the behavior of the operator. See the [supported hints](#supported-hints).\r\n\r\n### Supported hints\r\n\r\n|HintName|Type|Description|Native/Shuffle/Legacy strategy|\r\n|--|--|--|--|\r\n|`hint.strategy`| string | The value `legacy`, `shuffle`, or `native`. This hint defines the execution strategy of the partition operator.|Native, Shuffle, Legacy|\r\n|`hint.shufflekey`| string | The partition key. Runs the partition operator in shuffle strategy where the shuffle key is the specified partition key.|Shuffle|\r\n|`hint.materialized`| bool |If set to `true`, will materialize the source of the `partition` operator. The default value is `false`. |Legacy|\r\n|`hint.concurrency`| int |Hints the system how many partitions to run in parallel. The default value is 16.|Legacy|\r\n|`hint.spread`| int |Hints the system how to distribute the partitions among cluster nodes. For example, if there are N partitions and the spread hint is set to P, then the N partitions will be processed by P different cluster nodes equally in parallel/sequentially depending on the concurrency hint. The default value is 1.|Legacy|\r\n\r\n## Returns\r\n\r\nThe operator returns a union of the results of the individual subqueries.",`### Native strategy examples\r \r Use \`hint.strategy=native\` for this strategy. See the following examples:\r \r This query returns foreach InjuriesDirect, the count of events and total injuries in each State that starts with 'W'.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WOvQoCMRCEe59iu0tAfAFJp4X1FdbxWMwKSWR3cseJD29UECyH+eZnRNV8nLnANk9aEivTiAgmQ1TYIkg0nIdu3rsWSC2UpGBn0I5d11AiZGa6rHQqt6bCdhDlCeSs5RxVHkzfhTDVVuD89keGjrj/mH83fS74/QtdD0E9ngAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith 'W'\r | partition hint.strategy=native by InjuriesDirect (summarize Events=count(), Injuries=sum(InjuriesDirect) by State);\r \`\`\`\r \r **Output** \r \r |State|Events|Injuries|\r |---|---|---|\r |WISCONSIN|4|4|\r |WYOMING|5|5|\r |WEST VIRGINIA|1|1|\r |WASHINGTON|2|2|\r |WEST VIRGINIA|756|0|\r |WYOMING|390|0|\r |WASHINGTON|256|0|\r |WISCONSIN|1845|0|\r |WYOMING|1|4|\r |WASHINGTON|1|5|\r |WISCONSIN|1|2|\r |WASHINGTON|1|2|\r |WASHINGTON|1|10|\r \r This query returns the top 2 EventType by total injuries for each State that starts with 'W':\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WOsQ7CMAxE936Ft7YLAzsbDMytxJwiixiRpHKurYL68STphAdLp+d78oCg7rayR2x22iwr0wADpgijiJvAUvtoM5xzFkjwZMXjFKH57JXoQt5AVqYpHdWG8nR1x8U5o/JlGgPM5+7fC6twzKWMupJLvIryE30x1F/GNB+WnRBmOhfwL6i0/wEF39OovgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith 'W'\r | partition hint.strategy = native by State\r (\r summarize TotalInjueries = sum(InjuriesDirect) by EventType\r | top 2 by TotalInjueries\r )\r \`\`\`\r \r **Output** \r \r |EventType|TotalInjueries|\r |---|---|\r |Tornado|4|\r |Hail|1|\r |Thunderstorm Wind|1|\r |Excessive Heat|0|\r |High Wind|13|\r |Lightning|5|\r |High Wind|5|\r |Avalanche|3|\r \r ### Shuffle strategy example\r \r Use \`hint.strategy=shuffle\` for this strategy. See the following example:\r \r This query will return the top 3 DamagedProperty foreach EpisodeId, it returns also the columns EpisodeId and State.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22OsQ6DMBBDd77iRiohFuZuZeiGxBcEOCAV5KKLQYrUjyewsODBi+0ntxBd650dQvYnbxQWVhzN1qEMUAOe4jvM2zguTF2k2tsgA3+HjJLyyyGeqjP8mNVM3Kh4VsQrS1CVH/e4lwW1SNziqf5KL3rZHA7GAN74mQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | partition hint.strategy=shuffle by EpisodeId\r (\r top 3 by DamageProperty\r | project EpisodeId, State, DamageProperty\r )\r | count\r \`\`\`\r \r **Output** \r \r |Count|\r |---|\r |22345|\r \r ### Legacy strategy with explicit source\r \r This strategy is for legacy purposes only, and indicated by the use of \`hint.strategy=legacy\` or by not including a strategy indication at all. See the following example:\r \r This query will run two subqueries:\r \r * When x == 1, the query will return all rows from StormEvents that have InjuriesIndirect == 1.\r * When x == 2, the query will return all rows from StormEvents that have InjuriesIndirect == 2.\r \r \r the final result is the union of these 2 subqueries.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAxXMwRGCMBAF0LtV/AqcwXuOHjhbQYxrCCO7zOajZsDehQLe86hZ8MXTbUIHGi6olBndacMcnYXFFENRnis9UnILL8kxNdzbDtcbzafrW5QVGz6D+PGFgF7HxYvUXh/FJfG3j8kW5R+3ariUdAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 2 step 1\r | partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}\r | count \r \`\`\`\r \r **Output** \r \r |Count|\r |---|\r |113|\r \r ### Partition operator\r \r In some cases, it's more performant and easier to write a query using the \`partition\` operator than using the [\`top-nested\` operator](topnestedoperator.md). The following example runs a subquery calculating \`summarize\` and \`top\` for each of States starting with \`W\`: (WYOMING, WASHINGTON, WEST VIRGINIA, WISCONSIN)\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2NsQ6CQBBEe75iOyAhNtZ0WlhjYn2Sjbcm3JHdOQiGj/cEdYtJJvN2pkPU4TxxgBUrzZ6VqYMDk8EpbBZ4Km9lDsfsBRIDeQk4GDRjj6UNDjIx3ZfvY0H5qk0tDYNTeTHtE20fU0BVN3QJz6TC1mak+pmTKPeoP1Ubf11GbvbWrW4lxJGO/9z2rfoN+O3/98UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith 'W'\r | partition hint.strategy=native by State \r (\r summarize Events=count(), Injuries=sum(InjuriesDirect) by EventType, State\r | top 3 by Events \r ) \r \`\`\`\r \r **Output** \r \r |EventType|State|Events|Injuries|\r |---|---|---|---|\r |Hail|WYOMING|108|0|\r |High Wind|WYOMING|81|5|\r |Winter Storm|WYOMING|72|0|\r |Heavy Snow|WASHINGTON|82|0|\r |High Wind|WASHINGTON|58|13|\r |Wildfire|WASHINGTON|29|0|\r |Thunderstorm Wind|WEST VIRGINIA|180|1|\r |Hail|WEST VIRGINIA|103|0|\r |Winter Weather|WEST VIRGINIA|88|0|\r |Thunderstorm Wind|WISCONSIN|416|1|\r |Winter Storm|WISCONSIN|310|0|\r |Hail|WISCONSIN|303|1|\r \r ### Partition reference\r \r The following example shows how to use the [as operator](asoperator.md) to give a "name" to each data partition and then reuse that name within the subquery. This approach is only relevant to the legacy strategy.\r \r \`\`\`\r T\r | partition by Dim\r (\r as Partition\r | extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))\r )\r \`\`\`\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # partition operator - Internal\r \r ## Limitless partitions (preview)\r \r The partition operator now supports (in preview mode) "limitless" partitions.\r This alternative implementation lifts the limit on the number of partitions\r that the operator can process, and performs better in all scenarios.\r \r To enable this alternative implementation, add the following to the list of\r the operator's *PartitionParamteres*:\r \r \`hint.strategy\` \`=\` \`native\`\r \r For example, the following query will return the two highest mountains in each continent:\r \r \`\`\`kusto\r datatable (Name:string, Summit:long, Continent:string)\r [\r // Asia\r 'Everest', 8848, 'Asia',\r 'K2', 8611, 'Asia',\r 'Kangchenjunga', 8586, 'Asia',\r // Europe\r 'Elbrus', 5642, 'Europe',\r 'Dykh-Tau', 5205, 'Europe',\r 'Shkhara', 5201, 'Europe'\r // Etc..\r ]\r | partition hint.strategy=native by Continent\r (top 2 by Summit desc)\r \`\`\`\r \r |Name|Summit|Continent|\r |---|---|---|\r |Everest|8848|Asia|\r |K2|8611|Asia|\r |Elbrus|5642|Europe|\r |Dykh-Tau|5205|Europe|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/partitionoperator","partitionoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"percentile","The `percentile()` function calculates an estimate for the specified [nearest-rank percentile](#nearest-rank-percentile) of the population defined by *expr*.\r\nThe accuracy depends on the density of population in the region of the percentile.",`\`percentiles()\` works similarly to \`percentile()\`. However, \`percentiles()\` can calculate multiple percentile values at once, which is more efficient than calculating each percentile value separately.\r \r To calculate weighted percentiles, see [percentilesw()](percentilesw-aggfunction.md).\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`percentile(\`*expr*\`,\` *percentile*\`)\`\r \r \`percentiles(\`*expr*\`,\` *percentiles*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression to use for aggregation calculation.|\r |*percentile*| int or long | ✓| A constant that specifies the percentile.|\r |*percentiles* | int or long | ✓ | One or more comma-separated percentiles.|\r \r ## Returns\r \r Returns a table with the estimates for *expr* of the specified percentiles in the group, each in a separate column.\r \r > [!NOTE]\r > To return the percentiles in a single column, see [Return percentiles as an array](#return-percentiles-as-an-array).`,`### Calculate single percentile\r \r The following example shows the value of \`DamageProperty\` being larger than 95% of the sample set and smaller than 5% of the sample set.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRKC7NzU0syqxKVShILUoGCmbmpGq4JOYmpqcGFOUDxUoqdRQsTTUVkioVgksSS1IBgwSa1j8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | summarize percentile(DamageProperty, 95) by State\r \`\`\`\r \r **Output**\r \r The results table shown includes only the first 10 rows.\r \r | State | percentile_DamageProperty_95 |\r |--|--|\r | ATLANTIC SOUTH | 0 |\r | FLORIDA | 40000 |\r | GEORGIA | 143333 |\r | MISSISSIPPI | 80000 |\r | AMERICAN SAMOA | 250000 |\r | KENTUCKY | 35000 |\r | OHIO | 150000 |\r | KANSAS | 51392 |\r | MICHIGAN | 49167 |\r | ALABAMA | 50000 |\r \r ### Calculate multiple percentiles\r \r The following example shows the value of \`DamageProperty\` simultaneously calculated using 5, 50 (median) and 95.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRKC7NzU0syqxKVShILUoGCmbmpBZruCTmJqanBhTlAwVLKnUUTIHIQEfB0lRTIalSIbgksSQVAL6yeg1HAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | summarize percentiles(DamageProperty, 5, 50, 95) by State\r \`\`\`\r \r **Output**\r \r The results table shown includes only the first 10 rows.\r \r | State | percentile_DamageProperty_5 | percentile_DamageProperty_50 | percentile_DamageProperty_95 |\r |--|--|--|--|\r | ATLANTIC SOUTH | 0 | 0 | 0 |\r | FLORIDA | 0 | 0 | 40000 |\r | GEORGIA | 0 | 0 | 143333 |\r | MISSISSIPPI | 0 | 0 | 80000 |\r | AMERICAN SAMOA | 0 | 0 | 250000 |\r | KENTUCKY | 0 | 0 | 35000 |\r | OHIO | 0 | 2000 | 150000 |\r | KANSAS | 0 | 0 | 51392 |\r | MICHIGAN | 0 | 0 | 49167 |\r | ALABAMA | 0 | 0 | 50000 |\r |...|...|\r \r ## Return percentiles as an array\r \r Instead of returning the values in individual columns, use the \`percentiles_array()\` function to return the percentiles in a single column of dynamic array type.\r \r ### Syntax\r \r \`percentiles_array(\`*expr*\`,\` *percentiles*\`)\`\r \r ### Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression to use for aggregation calculation.|\r |*percentiles*| int, long, or dynamic | ✓| One or more comma-separated percentiles or a dynamic array of percentiles. Each percentile can be an integer or long value.|\r \r ### Returns\r \r Returns an estimate for *expr* of the specified percentiles in the group as a single column of dynamic array type.\r \r ### Examples\r \r #### Comma-separated percentiles\r \r Multiple percentiles can be obtained as an array in a single dynamic column, instead of in multiple columns as with [percentiles()](percentiles-aggfunction.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAAwspSswrTssvyk1NCU7NK84vKnZJLEnk5apRKC7NzU0syqxKVShILUpOzSvJzEktjk8sKkqs1AhLzClN1VEw1VEwAmJTAx0FcyBtaaqpo5BYlg6R1lRIqlSAmOmXmJsKANY0tLFpAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r TransformedSensorsData\r | summarize percentiles_array(Value, 5, 25, 50, 75, 95), avg(Value) by SensorName\r \`\`\`\r \r **Output**\r \r The results table displays only the first 10 rows.\r \r |SensorName|percentiles_Value|avg_Value |\r |--|--|--|\r |sensor-82|["0.048141473520867069","0.24407515500271132","0.48974511106780577","0.74160998970950343","0.94587903204190071"]|0.493950914|\r |sensor-130|["0.049200214398937764","0.25735850440187535","0.51206374010048239","0.74182335059053839","0.95210342463616771"]|0.505111463|\r |sensor-56|["0.04857779335488676","0.24709868149337144","0.49668762923789589","0.74458470404241883","0.94889104840865857"]|0.497955018|\r |sensor-24|["0.051507199150534679","0.24803904945640423","0.50397070213183581","0.75653888126010793","0.9518782718727431"]|0.501084379|\r |sensor-47|["0.045991246974755672","0.24644331118208851","0.48089197707088743","0.74475142784472248","0.9518322864959039"]|0.49386228|\r |sensor-135|["0.05132897529660399","0.24204987641954018","0.48470113942206461","0.74275730068433621","0.94784079559229406"]|0.494817619|\r |sensor-74|["0.048914714739047828","0.25160926036445724","0.49832498850160978","0.75257887767110776","0.94932261924236094"]|0.501627252|\r |sensor-173|["0.048333149363009836","0.26084250046756496","0.51288012531934613","0.74964772791583412","0.95156058795294"]|0.505401226|\r |sensor-28|["0.048511161184567046","0.2547387968731824","0.50101318228599656","0.75693845702682039","0.95243122486483989"]|0.502066244|\r |sensor-34|["0.049980293859462954","0.25094722564949412","0.50914023067384762","0.75571549713447961","0.95176564809278674"]|0.504309494|\r |...|...|...|\r \r #### Dynamic array of percentiles\r \r Percentiles for \`percentiles_array\` can be specified in a dynamic array of integer or floating-point numbers. The array must be constant but doesn't have to be literal.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAAwspSswrTssvyk1NCU7NK84vKnZJLEnkqlEoLs3NTSzKrEpVKEgtSk7NK8nMSS2OTywqSqzUCEvMKU3VUUipzEvMzUzWiDbVUTACYlMDHQVzIG1pGqupqaOQWJYOUampkFSpADHdLzE3FQAgg+RhcwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r TransformedSensorsData\r | summarize percentiles_array(Value, dynamic([5, 25, 50, 75, 95])), avg(Value) by SensorName\r \`\`\`\r \r **Output**\r \r The results table displays only the first 10 rows.\r \r |SensorName|percentiles_Value|avg_Value |\r |--|--|--|\r |sensor-82|["0.048141473520867069","0.24407515500271132","0.48974511106780577","0.74160998970950343","0.94587903204190071"]|0.493950914|\r |sensor-130|["0.049200214398937764","0.25735850440187535","0.51206374010048239","0.74182335059053839","0.95210342463616771"]|0.505111463|\r |sensor-56|["0.04857779335488676","0.24709868149337144","0.49668762923789589","0.74458470404241883","0.94889104840865857"]|0.497955018|\r |sensor-24|["0.051507199150534679","0.24803904945640423","0.50397070213183581","0.75653888126010793","0.9518782718727431"]|0.501084379|\r |sensor-47|["0.045991246974755672","0.24644331118208851","0.48089197707088743","0.74475142784472248","0.9518322864959039"]|0.49386228|\r |sensor-135|["0.05132897529660399","0.24204987641954018","0.48470113942206461","0.74275730068433621","0.94784079559229406"]|0.494817619|\r |sensor-74|["0.048914714739047828","0.25160926036445724","0.49832498850160978","0.75257887767110776","0.94932261924236094"]|0.501627252|\r |sensor-173|["0.048333149363009836","0.26084250046756496","0.51288012531934613","0.74964772791583412","0.95156058795294"]|0.505401226|\r |sensor-28|["0.048511161184567046","0.2547387968731824","0.50101318228599656","0.75693845702682039","0.95243122486483989"]|0.502066244|\r |sensor-34|["0.049980293859462954","0.25094722564949412","0.50914023067384762","0.75571549713447961","0.95176564809278674"]|0.504309494|\r |...|...|...|\r \r ## Nearest-rank percentile\r \r *P*-th percentile (0 < *P* <= 100) of a list of ordered values, sorted in ascending order, is the smallest value in the list. The *P* percent of the data is less or equal to *P*-th percentile value ([from Wikipedia article on percentiles](https://en.wikipedia.org/wiki/Percentile#The_Nearest_Rank_method)).\r \r Define *0*-th percentiles to be the smallest member of the population.\r \r >[!NOTE]\r > Given the approximating nature of the calculation, the actual returned value may not be a member of the population.\r > Nearest-rank definition means that *P*=50 does not conform to the [interpolative definition of the median](https://en.wikipedia.org/wiki/Median). When evaluating the significance of this discrepancy for the specific application, the size of the population and an [estimation error](#estimation-error-in-percentiles) should be taken into account.\r \r ## Estimation error in percentiles\r \r The percentiles aggregate provides an approximate value using [T-Digest](https://github.com/tdunning/t-digest/blob/master/docs/t-digest-paper/histo.pdf).\r \r >[!NOTE]\r >\r > * The bounds on the estimation error vary with the value of the requested percentile. The best accuracy is at both ends of the [0..100] scale. Percentiles 0 and 100 are the exact minimum and maximum values of the distribution. The accuracy gradually decreases towards the middle of the scale. It's worst at the median and is capped at 1%.\r > * Error bounds are observed on the rank, not on the value. Suppose percentile(X, 50) returned a value of Xm. The estimate guarantees that at least 49% and at most 51% of the values of X are less or equal to Xm. There is no theoretical limit on the difference between Xm and the actual median value of X.\r > * The estimation may sometimes result in a precise value but there are no reliable conditions to define when it will be the case.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/percentiles-aggfunction","percentiles-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"percentile_array_tdigest","Calculates the percentile result from the `tdigest` results (which was generated by [tdigest()](tdigest-aggfunction.md) or [tdigest_merge()](tdigest-merge-aggfunction.md))","## Syntax\r\n\r\n`percentiles_array_tdigest(`*tdigest*`,` *percentile1* [`,` *percentile2*`,` ...]`)`\r\n\r\n`percentiles_array_tdigest(`*tdigest*`,` *Dynamic array* [`,` *typeLiteral* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *tdigest*| string | ✓ | The [`tdigest`](tdigest-aggfunction.md) or [tdigest_merge()](tdigest-merge-aggfunction.md) results used to calculate the percentiles.|\r\n| *percentile* | real | ✓ | A value or comma-separated list of values that specifies the percentiles.|\r\n| *Dynamic array*| dynamic | ✓ | A dynamic array of real numbers that specify the percentiles.|\r\n| *typeLiteral*| string | | A type literal. For example, `typeof(long)`. If provided, the result set will be of this type.|\r\n\r\n## Returns\r\n\r\nThe percentile/percentiles value of each value in *tdigest*.\r\n\r\n>[!TIP]\r\n>\r\n>* The function must receive at least one percent (and maybe more, see the syntax above: *percentile1* [`,` *percentile2*] ...[`,` *percentileN*]) and the result will be\r\na dynamic array that includes the results. (such like [`percentiles()`](percentiles-aggfunction.md))\r\n>* If only one percent was provided, and the type was provided also, then the result will be a column of the same type provided with the results of that percent. In this case, all `tdigest` functions must be of that type.\r\n>* If *tdigest* includes `tdigest` functions of different types, don't provide the type. The result will be of type dynamic. See below examples.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WMuwoCMRBFe79iygRSxMLSTntxP2AZ12uImAeTWSHix5tmsblwuJwzaZF0fiNr232prSmxxA9I7zGg6RWNjhuYEycOuEipEO2Wbp0mZcUwq5QnFqXxLCMWX2gzi3CfN/lfdCScA4x3tPdjDt460l5RHiZmtfYHKGdLI5UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize tdigestRes = tdigest(DamageProperty) by State\r | project percentiles_array_tdigest(tdigestRes, range(0, 100, 50), typeof(int))\r \`\`\`\r \r **Output**\r \r |percentile_tdigest_tdigestRes|\r |---|\r |[0,0,0]|\r |[0,0,62000000]|\r |[0,0,110000000]|\r |[0,0,1200000]|\r |[0,0,250000]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/percentile-array-tdigestfunction","percentile-array-tdigestfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"percentile_tdigest","Calculates the percentile result from the `tdigest` results (which was generated by [tdigest()](tdigest-aggfunction.md) or [tdigest_merge()](tdigest-merge-aggfunction.md))",`## Syntax\r \r \`percentile_tdigest(\`*expr*\`,\` *percentile1* \`,\` *typeLiteral*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*expr*|string|✓|An expression that was generated by [\`tdigest\`](tdigest-aggfunction.md) or [tdigest_merge()](tdigest-merge-aggfunction.md).|\r |*percentile*|long|✓|The value that specifies the percentile.|\r |*typeLiteral*|string||A type literal. If provided, the result set will be of this type. For example, \`typeof(long)\` will cast all results to type \`long\`.\r \r ## Returns\r \r The percentile value of each value in *expr*.\r \r >[!TIP]\r >\r >* If the type was provided, the result will be a column of the same type provided with the results of the percentile. In this case, all \`tdigest\` functions must be of that type.\r >* If *expr* includes \`tdigest\` functions of different types, don't provide the type. The result will be of type dynamic. See below examples.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVShJyUxPLS4JSi1WsIVxNFwScxPTUwOK8gtSi0oqNRWSKhWCSxJLUoE6C4rys1KTSxSAMslAwzJzUuNhuhBG6SgYGhhoAgDlVqxicwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize tdigestRes = tdigest(DamageProperty) by State\r | project percentile_tdigest(tdigestRes, 100)\r \`\`\`\r \r **Output**\r \r |percentile_tdigest_tdigestRes|\r |---|\r |0|\r |62000000|\r |110000000|\r |1200000|\r |250000|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4XNsQrCQBAE0N6v2DIHFvED0plePHs5kyGsuHdhbxOI5OO9JlxpOTDzxltS6VdEy6ed8iISlL8gG3lCtjsydUdorkHChJumGWqbo9dG3oKhLJfIKVLjK0d/uT6ODxZUxxVo1vTGYFQuhsLwB8+jX5EzXdrW/QA/si5TvAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize tdigestRes = tdigest(DamageProperty) by State\r | union (StormEvents | summarize tdigestRes = tdigest(EndTime) by State)\r | project percentile_tdigest(tdigestRes, 100)\r \`\`\`\r \r **Output**\r \r |percentile_tdigest_tdigestRes|\r |---|\r |[0]|\r |[62000000]|\r |["2007-12-20T11:30:00.0000000Z"]|\r |["2007-12-31T23:59:00.0000000Z"]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/percentile-tdigestfunction","percentile-tdigestfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"percentilew","The `percentilew()` function calculates a weighted estimate for the specified [nearest-rank percentile](percentiles-aggfunction.md#nearest-rank-percentile) of the population defined by *expr*. `percentilesw()` works similarly to `percentilew()`. However, `percentilesw()` can calculate multiple weighted percentile values at once, which is more efficient than calculating each weighted percentile value separately.",`Weighted percentiles calculate percentiles in a dataset by giving each value in the input dataset a weight. In this method, each value is considered to be repeated a number of times equal to its weight, which is then used to calculate the percentile. By giving more importance to certain values, weighted percentiles provide a way to calculate percentiles in a "weighted" manner.\r \r To calculate unweighted percentiles, see [percentiles()](percentiles-aggfunction.md).\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`percentilew(\`*expr*\`,\` *weightExpr*\`,\` *percentile*\`)\`\r \r \`percentilesw(\`*expr*\`,\` *weightExpr*\`,\` *percentiles*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression to use for aggregation calculation.|\r |*percentile*| int or long | ✓| A constant that specifies the percentile.|\r |*percentiles* | int or long | ✓ | One or more comma-separated percentiles.|\r |*weightExpr*|long|✓|The weight to give each value.|\r \r ## Returns\r \r Returns a table with the estimates for *expr* of the specified percentiles in the group, each in a separate column.\r \r > [!NOTE]\r > To return the percentiles in a single column, see [Return percentiles as an array](#return-percentiles-as-an-array).`,`### Calculate weighted percentiles\r \r Assume you repetitively measure the time (Duration) it takes an action to complete. Instead of recording every value of the measurement, you record each value of Duration, rounded to 100 msec, and how many times the rounded value appeared (BucketSize).\r \r Use \`summarize percentilesw(Duration, BucketSize, ...)\` to calculate the given\r percentiles in a "weighted" way. Treat each value of Duration as if it was repeated BucketSize times in the input, without actually needing to materialize those records.\r \r The following example shows weighted percentiles.\r Using the following set of latency values in milliseconds:\r \`{ 1, 1, 2, 2, 2, 5, 7, 7, 12, 12, 15, 15, 15, 18, 21, 22, 26, 35 }\`.\r \r To reduce bandwidth and storage, do pre-aggregation to the\r following buckets: \`{ 10, 20, 30, 40, 50, 100 }\`. Count the number of events in each bucket to produce the following table:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVHISSxJzUuuDElMyklVsFVISSwBQhBbIyi10Dm/NK/EKic/L11HwQei0Kk0OTsVIqapwBWtwKUABBY6CoYGOhC2mY6CEYxtrKNgDGMb6iiYGChwxVpzIVsJAGDD8KqDAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let latencyTable = datatable (ReqCount:long, LatencyBucket:long) \r [ \r 8, 10, \r 6, 20, \r 3, 30, \r 1, 40 \r ];\r latencyTable\r \`\`\`\r \r The table displays:\r \r * Eight events in the 10-ms bucket (corresponding to subset \`{ 1, 1, 2, 2, 2, 5, 7, 7 }\`)\r * Six events in the 20-ms bucket (corresponding to subset \`{ 12, 12, 15, 15, 15, 18 }\`)\r * Three events in the 30-ms bucket (corresponding to subset \`{ 21, 22, 26 }\`)\r * One event in the 40-ms bucket (corresponding to subset \`{ 35 }\`)\r \r \r At this point, the original data is no longer available. Only the number of events in each bucket. To compute percentiles from this data, use the \`percentilesw()\` function.\r For the 50, 75, and 99.9 percentiles, use the following query:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WOMQvCMBCF9/yKN7ZwSGutGsVFVydxE4cYDymmqbYJovjjjYSA3i0fj8d9Z9jBKMdWP/fqZBgrnJUL++Vsx/dN561bmM5eCNtYXHt95ZjlEAcIhJkTyoIiTwnjxBWhSlwSJgXEcSl+leKNwbet6psX48a9Zusaw8Mj+/MR0jeEOlyc1QQpRzL/AMC/VMrDAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let latencyTable = datatable (ReqCount:long, LatencyBucket:long) \r [ \r 8, 10, \r 6, 20, \r 3, 30, \r 1, 40 \r ];\r latencyTable\r | summarize percentilesw(LatencyBucket, ReqCount, 50, 75, 99.9)\r \`\`\`\r \r **Output**\r \r | percentile_LatencyBucket_50 | percentile_LatencyBucket_75 | percentile_LatencyBucket_99_9 |\r |--|--|--|\r | 20 | 20 | 40 |\r \r ## Return percentiles as an array\r \r Instead of returning the values in individual columns, use the \`percentilesw_array()\` function to return the percentiles in a single column of dynamic array type.\r \r ### Syntax\r \r \`percentilesw_array(\`*expr*\`,\` *weightExpr*\`,\` *percentiles*\`)\`\r \r ### Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression to use for aggregation calculation.|\r |*percentiles*| int, long, or dynamic | ✓| One or more comma-separated percentiles or a dynamic array of percentiles. Each percentile can be an integer or long value.|\r |*weightExpr*|long|✓|The weight to give each value.|\r \r ### Returns\r \r Returns an estimate for *expr* of the specified percentiles in the group as a single column of dynamic array type.\r \r ### Examples\r \r #### Comma-separated percentiles\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAA1WOQQuCQBCF7/sr3lFhCM2sLLrUtVN0i4hpG0Ja11pXwujHZ8hCzVw+Ho/5xoiHYS9Wd3s+G8EKF/b9fjnayWNTt9YvTG2vhO1QXLf6JkMWQx2g0M+ckCY08JQwDpwRssApYZJAHZfqV6neaNqqYle+BHdxWqwvjTTPEzvHXfRnJYSfCHl/d5YTimJUxB+W4nlIyQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let latencyTable = datatable (ReqCount:long, LatencyBucket:long) \r [ \r 8, 10, \r 6, 20, \r 3, 30, \r 1, 40 \r ];\r latencyTable\r | summarize percentilesw_array(LatencyBucket, ReqCount, 50, 75, 99.9)\r \`\`\`\r \r **Output**\r \r | percentile_LatencyBucket |\r |---|---|---|\r | [20, 20, 40] |\r \r #### Dynamic array of percentiles\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAA1WOQQuCQBCF7/sr3lFhiMysLLrUtVN0E4lpHUJa11pXwujHZ4hQ8y4fjwffGPEw7MXq7sQXI9iiYN/ny8FRHvu6tX5tanslHIbhrtU3GboQKoNCfytCNKWBF4TZyDEhHjkizKdQ+Ub9KtUbTVtV7MqX4C5Oi/WlkeZ5Zue4C/6shPEnQtFZrkodZEkvWCaENJ2keRh+AIIR/2/UAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let latencyTable = datatable (ReqCount:long, LatencyBucket:long) \r [ \r 8, 10, \r 6, 20, \r 3, 30, \r 1, 40 \r ];\r latencyTable\r | summarize percentilesw_array(LatencyBucket, ReqCount, dynamic([50, 75, 99.9]))\r \`\`\`\r \r **Output**\r \r | percentile_LatencyBucket |\r |---|---|---|\r | [20, 20, 40] |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/percentilesw-aggfunction","percentilesw-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"percentrank_tdigest",`Calculates the approximate rank of the value in a set, where rank is expressed as a percentage of the set's size.\r This function can be viewed as the inverse of the percentile.`,`## Syntax\r \r \`percentrank_tdigest(\`*digest*\`,\` *value*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*digest*|string|✓| An expression that was generated by [tdigest()](tdigest-aggfunction.md) or [tdigest_merge()](tdigest-merge-aggfunction.md).|\r |*value*|scalar|✓|An expression representing a value to be used for percentage ranking calculation.|\r \r > [!NOTE]\r > The type of *value* and the type of the elements in *digest* should be the same.\r \r ## Returns\r \r The percentage rank of value in a dataset.`,`Getting the percentrank_tdigest() of the damage property that valued 4490$ is ~85%:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVShJyUxPLS4JSi1WsIVxNFwScxPTUwOK8gtSi0oqNYEaCorys1KTSxSAAslAM4oS87LjYaoRRugomJhYGmgCANhtajhsAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize tdigestRes = tdigest(DamageProperty)\r | project percentrank_tdigest(tdigestRes, 4490)\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |85.0015237192293|\r \r Using percentile 85 over the damage property should give 4490$:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVShJyUxPLS4JSi1WsIVxNFwScxPTUwOK8gtSi0oqNYEaCorys1KTSxSAAslAMzJzUuNhihEm6ChYmOoolFQWpOanaeTk56VragIAa7SLZXcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize tdigestRes = tdigest(DamageProperty)\r | project percentile_tdigest(tdigestRes, 85, typeof(long))\r \`\`\`\r \r **Output**\r \r |percentile_tdigest_tdigestRes|\r |---|\r |4490|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/percentrank-tdigestfunction","percentrank-tdigestfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"pi","Returns the constant value of Pi.",`## Syntax\r \r \`pi()\`\r \r ## Returns\r \r The double value of Pi (3.1415926...)`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/pifunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"pivot","Rotates a table by turning the unique values from one column in the input table into multiple columns in the output table and performs aggregations as required on any remaining column values that will appear in the final output.","> [!NOTE]\r\n> If the OutputSchema is not specified, the output schema of the `pivot` plugin is based on the input data. Therefore, multiple executions of the plugin using different data inputs, may produce different output schema. This also means that the query that is referencing unpacked columns may become 'broken' at any time. For this reason, we do not recommend using this plugin for automation jobs without specifying the OutputSchema function.\r\n\r\n## Syntax\r\n\r\n`T | evaluate pivot(`*pivotColumn*`[, `*aggregationFunction*`] [,`*column1* `[,`*column2* ... `]])` [`:` *OutputSchema*]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *pivotColumn* | string | ✓ | The column to rotate. Each unique value from this column will be a column in the output table.|\r\n| *aggregationFunction* | string | | An aggregation function used to aggregate multiple rows in the input table to a single row in the output table. Currently supported functions: `min()`, `max()`, `take_any()`, `sum()`, `dcount()`, `avg()`, `stdev()`, `variance()`, `make_list()`, `make_bag()`, `make_set()`, `count()`. The default is `count()`. |\r\n| *column1*, *column2*, ... | string | | A column name or comma-separated list of column names. The output table will contain an additional column per each specified column. The default is all columns other than the pivoted column and the aggregation column. |\r\n| *OutputSchema* | | | The names and types for the expected columns of the `pivot` plugin output.<br /><br />**Syntax**: `(` *ColumnName* `:` *ColumnType* [`,` ...] `)`<br /><br />Specifying the expected schema optimizes query execution by not having to first run the actual query to explore the schema. An error is raised if the run-time schema doesn't match the *OutputSchema* schema. |\r\n\r\n## Returns\r\n\r\nPivot returns the rotated table with specified columns (*column1*, *column2*, ...) plus all unique values of the pivot columns. Each cell for the pivoted columns will contain the aggregate function computation.",`### Pivot by a column\r \r For each EventType and State starting with 'AL', count the number of events of this type in this state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKCjKz0pNLlEILkksSdVRAIuHVBakAqXKM1KLUiESCsUliUUlxeWZJRkKSo4+SnBZuHqFjMRiBaXwzLwUkGRqWWJOKUhfQWZZfokG2AxNABd5uxJ5AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project State, EventType\r | where State startswith "AL"\r | where EventType has "Wind"\r | evaluate pivot(State)\r \`\`\`\r \r **Output**\r \r |EventType|ALABAMA|ALASKA|\r |---|---|---|\r |Thunderstorm Wind|352|1|\r |High Wind|0|95|\r |Extreme Cold/Wind Chill|0|10|\r |Strong Wind|22|0|\r \r ### Pivot by a column with aggregation function\r \r For each EventType and State starting with 'AR', display the total number of direct deaths.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLElVKC5JLCopLs8syVBQcgxSAsoWFOVnpSaXQOR1FMC6QioLgEyX1MSSjGKXzCKgNNwYZEEFOwUDoERqWWJOKcjwgsyy/BINqEHFpbkayIo1NQH4o/xAlgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith "AR"\r | project State, EventType, DeathsDirect\r | where DeathsDirect > 0\r | evaluate pivot(State, sum(DeathsDirect))\r \`\`\`\r \r **Output**\r \r |EventType|ARKANSAS|ARIZONA|\r |---|---|---|\r |Heavy Rain|1|0|\r |Thunderstorm Wind|1|0|\r |Lightning|0|1|\r |Flash Flood|0|6|\r |Strong Wind|1|0|\r |Heat|3|0|\r \r ### Pivot by a column with aggregation function and a single additional column\r \r Result is identical to previous example.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLElVKC5JLCopLs8syVBQcgxSAsoWFOVnpSaXQOR1FMC6QioLgEyX1MSSjGKXzCKgNNwYZEEFOwUDoERqWWJOKcjwgsyy/BINqEHFpbkayIo1kczWBAB7xf6goQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith "AR"\r | project State, EventType, DeathsDirect\r | where DeathsDirect > 0\r | evaluate pivot(State, sum(DeathsDirect), EventType)\r \`\`\`\r \r **Output**\r \r |EventType|ARKANSAS|ARIZONA|\r |---|---|---|\r |Heavy Rain|1|0|\r |Thunderstorm Wind|1|0|\r |Lightning|0|1|\r |Flash Flood|0|6|\r |Strong Wind|1|0|\r |Heat|3|0|\r \r ### Specify the pivoted column, aggregation function, and multiple additional columns\r \r For each event type, source, and state, sum the number of direct deaths.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03NOwqAMBCE4d5TLFYKFp5AEPQCxgsEWUhAjexOIoKH91GI9Tc/YxBk6ROv0Oyk3bEwGVgwKaxAdw9HeTvkn3Zs4bTzwhOoofoGTnaOT7P5FFC8fUUal+I/Lit6j8Zju9WEKBOXFzKrwnaAAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith "AR"\r | where DeathsDirect > 0\r | evaluate pivot(State, sum(DeathsDirect), EventType, Source)\r \`\`\`\r \r **Output**\r \r |EventType|Source|ARKANSAS|ARIZONA|\r |---|---|---|---|\r |Heavy Rain|Emergency Manager|1|0|\r |Thunderstorm Wind|Emergency Manager|1|0|\r |Lightning|Newspaper|0|1|\r |Flash Flood|Trained Spotter|0|2|\r |Flash Flood|Broadcast Media|0|3|\r |Flash Flood|Newspaper|0|1|\r |Strong Wind|Law Enforcement|1|0|\r |Heat|Newspaper|3|0|\r \r ### Pivot with a query-defined output schema\r \r The following example selects specific columns in the StormEvents table.\r It uses an explicit schema definition that allows various optimizations to be evaluated before running the actual query.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKCjKz0pNLlEILkksSdVRAIuHVBakAqXKM1KLUhEiChmJxQpK4Zl5KUpAydSyxJxSoBaFgsyy/BINsHZNKwUNuHKr4pKizLx0HQVHH0cnR19Hq5x8KC/YG8LRBADkMGe5igAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project State, EventType\r | where EventType has "Wind"\r | evaluate pivot(State): (EventType:string, ALABAMA:long, ALASKA:long)\r \`\`\`\r \r **Output**\r \r |EventType|ALABAMA|ALASKA|\r |---|---|---|\r |Thunderstorm Wind|352|1|\r |High Wind|0|95|\r |Marine Thunderstorm Wind|0|0|\r |Strong Wind|22|0|\r |Extreme Cold/Wind Chill|0|10|\r |Cold/Wind Chill|0|0|\r |Marine Strong Wind|0|0|\r |Marine High Wind|0|0|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/pivotplugin","pivotplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"postgresql_request","The `postgresql_request` plugin sends a SQL query to a PostgreSQL Server network endpoint and returns the first rowset in the results. The query may return more than one rowset, but only the first rowset is made available for the rest of the Kusto query.",`The plugin is invoked with the [\`evaluate\`](evaluateoperator.md) operator.\r \r > [!IMPORTANT]\r > The \`postgresql_request\` plugin is disabled by default.\r > To enable the plugin, run the [\`.enable plugin postgresql_request\` command](../management/enable-plugin.md). To see which plugins are enabled, use [\`.show plugin\` management commands](../management/show-plugins.md).\r \r ## Syntax\r \r \`evaluate\` \`postgresql_request\` \`(\` *ConnectionString* \`,\` *SqlQuery* [\`,\` *SqlParameters*] \`)\` [\`:\` *OutputSchema*]\r \r ## Parameters\r \r | Name | Type | Required| Description |\r |---|---|---|---|\r | *ConnectionString* | string | ✓ | The connection string that points at the PostgreSQL Server network endpoint. See [authentication](#username-and-password-authentication) and how to specify the [network endpoint](#specify-the-network-endpoint). |\r | *SqlQuery* | string | ✓ | The query that is to be executed against the SQL endpoint. Must return one or more row sets. Only the first set is made available for the rest of the query. |\r | *SqlParameters* | dynamic | | A property bag object that holds key-value pairs to pass as parameters along with the query. |\r | *OutputSchema* | | | The names and types for the expected columns of the \`postgresql_request\` plugin output.<br /><br />**Syntax**: \`(\` *ColumnName* \`:\` *ColumnType* [\`,\` ...] \`)\`|\r \r > [!NOTE]\r >\r > * Specifying the *OutputSchema* is highly recommended, as it allows the plugin to be used in scenarios that might otherwise not work without it, such as a cross-cluster query. The *OutputSchema* can also enable multiple query optimizations.\r > * An error is raised if the run-time schema of the first row set returned by the SQL network endpoint doesn't match the *OutputSchema* schema.\r \r ## Authentication and authorization\r \r To authorize a PostgreSQL Server network endpoint, you must specify the authorization information in the connection string. The supported authorization method is via username and password.\r \r ## Set callout policy\r \r The plugin makes callouts to the PostgreSQL database. Make sure that the cluster's [callout policy](../management/calloutpolicy.md) enables calls of type \`postgresql\` to the target *PostgreSqlDbUri*.\r \r The following example shows how to define the callout policy for PostgreSQL databases. We recommend restricting the callout policy to specific endpoints (\`my_endpoint1\`, \`my_endpoint2\`).\r \r \`\`\`\r [\r {\r "CalloutType": "postgresql",\r "CalloutUriRegex": "my_endpoint1\\\\.postgres\\\\.database\\\\.azure\\\\.com",\r "CanCall": true\r },\r {\r "CalloutType": "postgresql",\r "CalloutUriRegex": "my_endpoint2\\\\.postgres\\\\.database\\\\.azure\\\\.com",\r "CanCall": true\r }\r ]\r \`\`\`\r \r The following example shows a \`.alter callout policy\` command for \`postgresql\` *CalloutType*:\r \r \`\`\`\r .alter cluster policy callout @'[{"CalloutType": "postgresql", "CalloutUriRegex": "\\\\.postgresql\\\\.database\\\\.azure\\\\.com", "CanCall": true}]'\r \`\`\`\r \r ## Username and password authentication\r \r The \`postgresql_request\` plugin only supports username and password authentication to the PostgreSQL server endpoint and doesn't integrate with Azure Active Directory authentication.\r \r The username and password are provided as part of the connections string using the following parameters:\r \r \`User ID=...; Password=...;\`\r \r > [!WARNING]\r > Confidential or guarded information should be obfuscated from connection strings and queries so that they are omitted from any Kusto tracing.\r > For more information, see [obfuscated string literals](scalar-data-types/string.md#obfuscated-string-literals).\r \r ## Encryption and server validation\r \r For security, \`SslMode\` is unconditionally set to \`Required\` when connecting to a PostgreSQL server network endpoint. As a result, the server must be configured with a valid SSL/TLS server certificate.\r \r ## Specify the network endpoint\r \r Specify the PostgreSQL network endpoint as part of the connection string.\r \r **Syntax**:\r \r \`Host\` \`=\` *FQDN* [\`Port\` \`=\` *Port*]\r \r Where:\r \r * *FQDN* is the fully qualified domain name of the endpoint.\r * *Port* is the TCP port of the endpoint.`,`### SQL query to Azure PostgreSQL DB\r \r The following example sends a SQL query to an Azure PostgreSQL database. It retrieves all records from \`public."Table"\`, and then processes the results.\r \r > [!NOTE]\r > This example shouldn't be taken as a recommendation to filter or project data in this manner. SQL queries should be constructed to return the smallest data set possible.\r \r \`\`\`\r evaluate postgresql_request(\r 'Host=contoso.postgres.database.azure.com; Port = 5432;'\r 'Database=Fabrikam;'\r h'User Id=USERNAME;'\r h'Password=PASSWORD;',\r 'select * from public."Table"') : (Id: int, Name: string)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### SQL query to an Azure PostgreSQL database with modifications\r \r The following example sends a SQL query to an Azure PostgreSQL database\r retrieving all records from \`public."Table"\`, while appending another \`datetime\` column,\r and then processes the results on the Azure Data Explorer side.\r It specifies a SQL parameter (\`@param0\`) to be used in the SQL query.\r \r \`\`\`\r evaluate postgresql_request(\r 'Server=contoso.postgres.database.azure.com; Port = 5432;'\r 'Database=Fabrikam;'\r h'User Id=USERNAME;'\r h'Password=PASSWORD;',\r 'select *, @param0 as dt from public."Table"',\r dynamic({'param0': datetime(2020-01-01 16:47:26.7423305)})) : (Id: int, Name: string, dt: datetime)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### SQL query to an Azure PostgreSQL database without a query-defined output schema\r \r The following example sends a SQL query to an Azure PostgreSQL database without an output schema. This is not recommended unless the schema is unknown, as it may impact the performance of the query\r \r \`\`\`\r evaluate postgresql_request(\r 'Host=contoso.postgres.database.azure.com; Port = 5432;'\r 'Database=Fabrikam;'\r h'User Id=USERNAME;'\r h'Password=PASSWORD;',\r 'select * from public."Table"')\r | where Id > 0\r | project Name\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/postgresql-request-plugin","postgresql-request-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"pow","Returns a result of raising to power",`## Syntax\r \r \`pow(\`*base*\`,\` *exponent* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *base*| int, real, or long | ✓ | The base value.|\r | *exponent*| int, real, or long | ✓ | The exponent value.|\r \r ## Returns\r \r Returns base raised to the power exponent: base ^ exponent.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKbEtyC/XMNJRMNYEAGG04SkWAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print result=pow(2, 3)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |8|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/powfunction","powfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"prev",`Returns the value of a specific column in a specified row.\r The specified row is at a specified offset from the current row in a [serialized row set](./windowsfunctions.md#serialized-row-set).`,"## Syntax\r\n\r\n`prev(`*column*`,` [ *offset* ]`,` [ *default_value* ] `)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *column*| string | ✓ | The column from which to get the values.|\r\n| *offset*| int | | The offset to go back in rows. The default is 1.|\r\n| *default_value*| scalar | | The default value to be used when there are no previous rows from which to take the value. The default is `null`.|",`### Filter data based on comparison between adjacent rows\r \r The following query returns rows that show breaks longer than a quarter of a second between calls to \`sensor-9\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAA3WOvQoCMRCEe8F32C53cIIKFhZndY2FNl4v62WDgUtyZBd/wIc30SI2djPzDcP0ET2bEB3pE3kOkTsUnM9ecL9SJPiGR3QEbQuKP3axVbmRlMDlCb11xIJuAuQhA3oIeQ2S8s4as/cHO46WaQheM7SgUSjDs060Uq5Q1ZS1BqZIt+rHr+q6PPuzvoP1ZvkGO/YBANYAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r TransformedSensorsData\r | where SensorName == 'sensor-9'\r | sort by Timestamp asc\r | extend timeDiffInMilliseconds = datetime_diff('millisecond', Timestamp, prev(Timestamp, 1))\r | where timeDiffInMilliseconds > 250\r \`\`\`\r \r **Output**\r \r |Timestamp|SensorName|Value|PublisherId|MachineId|timeDiff|\r |--|--|--|--|--|--|\r |2022-04-13T00:58:53.048506Z|sensor-9|0.39217481975439894|fdbd39ab-82ac-4ca0-99ed-2f83daf3f9bb|M100|251|\r |2022-04-13T01:07:09.63713Z|sensor-9|0.46645392778288297|e3ed081e-501b-4d59-8e60-8524633d9131|M100|313|\r |2022-04-13T01:07:10.858267Z|sensor-9|0.693091598493419|278ca033-2b5e-4f2c-b493-00319b275aea|M100|254|\r |2022-04-13T01:07:11.203834Z|sensor-9|0.52415808840249778|4ea27181-392d-4947-b811-ad5af02a54bb|M100|331|\r |2022-04-13T01:07:14.431908Z|sensor-9|0.35430645405452|0af415c2-59dc-4a50-89c3-9a18ae5d621f|M100|268|\r |...|...|...|...|...|...|\r \r ### Perform aggregation based on comparison between adjacent rows\r \r The following query calculates the average time difference in milliseconds between calls to \`sensor-9\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAA22NvQ6CQBCEexPfYbuDBAtLi+toLLSB3qzcopewB7ld8Sc+vBwWWNjNzDeZqSMGafvI5CoK0kcpUXG9esP9SpHgGx6RCawFI7Pd7ExqTErh/ITaM4kiD4DSJEAPpeBAp7z0bbsPB991XqjpgxOw4FApwZObaGZ4oaZY1goYIo3Zj9/m+fx7Y8boXwQ4XrL/L/kHqqI6JdkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r TransformedSensorsData\r | where SensorName == 'sensor-9'\r | sort by Timestamp asc\r | extend timeDiffInMilliseconds = datetime_diff('millisecond', Timestamp, prev(Timestamp, 1))\r | summarize avg(timeDiffInMilliseconds)\r \`\`\`\r \r **Output**\r \r |avg_timeDiffInMilliseconds|\r |--|\r |30.726900061254298\r \r ### Extend row with data from the previous row\r \r In the following query, as part of the serialization done with the [serialize operator](serializeoperator.md), a new column \`previous_session_type\` is added with data from the previous row. Since there was no session prior to the first session, the column is empty in the first row.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22NMQ7CMAwAd17hrSB1ADaGLvAEHhBFiRFGIYlspwjUx9cCqerA6POdfSn5how54BVFqGTZTPC6G4KwrGAYoDs3ShGO+8OpM0WQySf6IFTGkUoTJ78DTt/Vii/frtnOssrlgUFB6YnO5+hiY69m9LCopAlXo5X9/yczmplkXLwAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r ConferenceSessions\r | where conference == 'Build 2019'\r | serialize previous_session_type = prev(session_type)\r | project time_and_duration, session_title, session_type, previous_session_type\r \`\`\`\r \r **Output**\r \r | time_and_duration | session_title | session_type | previous_session_type |\r |---|---|---|---|\r | Mon, May 6, 8:30-10:00 am | Vision Keynote - Satya Nadella | Keynote | |\r | Mon, May 6, 1:20-1:40 pm | Azure Data Explorer: Advanced Time Series analysis | Expo Session | Keynote |\r | Mon, May 6, 2:00-3:00 pm | Azure's Data Platform - Powering Modern Applications and Cloud Scale Analytics at Petabyte Scale | Breakout | Expo Session |\r | Mon, May 6, 4:00-4:20 pm | How BASF is using Azure Data Services | Expo Session | Breakout |\r | Mon, May 6, 6:50 - 7:10 pm | Azure Data Explorer: Operationalize your ML models | Expo Session | Expo Session |\r | ... | ... | ... | ... |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/prevfunction","prevfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"preview","Returns a table with up to the specified number of rows from the input record set, and the total number of records in the input record set.",`## Syntax\r \r *T* \`|\` \`evaluate\` \`preview(\`*NumberOfRows*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*T*|string|✓|The table to preview.|\r |*NumberOfRows*| int| ✓ | The number of rows to preview from the table.|\r \r ## Returns\r \r The \`preview\` plugin returns two result tables:\r \r * A table with up to the specified number of rows.\r For example, the sample query above is equivalent to running \`T | take 50\`.\r * A table with a single row/column, holding the number of records in the\r input record set.\r For example, the sample query above is equivalent to running \`T | count\`.\r \r > [!TIP]\r > If \`evaluate\` is preceded by a tabular source that includes a complex filter, or a filter that references most of the source table columns, prefer to use the [\`materialize\`](materializefunction.md) function. For example:`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRSC1LzClNLElVKChKLctMLdcw1QQA4xlbCCEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | evaluate preview(5)\r \`\`\`\r \r **Table1**\r \r The following output table only includes the first 6 columns. To see the full result, run the query.\r \r |StartTime|EndTime|EpisodeId|EventId|State|EventType|...|\r |--|--|--|\r |2007-12-30T16:00:00Z|2007-12-30T16:05:00Z|11749|64588|GEORGIA| Thunderstorm Wind|...|\r |2007-12-20T07:50:00Z|2007-12-20T07:53:00Z|12554|68796|MISSISSIPPI| Thunderstorm Wind|...|\r |2007-09-29T08:11:00Z|2007-09-29T08:11:00Z|11091|61032|ATLANTIC SOUTH| Waterspout|...|\r |2007-09-20T21:57:00Z|2007-09-20T22:05:00Z|11078|60913|FLORIDA| Tornado|...|\r |2007-09-18T20:00:00Z|2007-09-19T18:00:00Z|11074|60904|FLORIDA| Heavy Rain|...|\r \r **Table2**\r \r |Count|\r |--|\r |59066|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/previewplugin","previewplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"print","Outputs a single row with one or more scalar expression results as columns.",`## Syntax\r \r \`print\` [*ColumnName* \`=\`] *ScalarExpression* [',' ...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *ColumnName* | string | | The name to assign to the output column.|\r | *ScalarExpression* | string | ✓ | The expression to evaluate.|\r \r ## Returns\r \r A table with one or more columns and a single row. Each column returns the corresponding value of the evaluated *ScalarExpression*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUTBQ0FYwBGIjIDYGYhMgNtVRqFCwVVAKzy9XVAIAppjMyScAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print 0 + 1 + 2 + 3 + 4 + 5, x = "Wow!"\r \`\`\`\r \r **Output**\r \r |print_0|x|\r |--|--|\r |15| Wow!|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhKzMtLLbItLilKTizRUPJIzcnJV9JRgKLw/KKcFEUlTQBf/iftLAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print banner=strcat("Hello", ", ", "World!")\r \`\`\`\r \r **Output**\r \r |banner|\r |--|\r |Hello, World!|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/printoperator","printoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"project","Select the columns to include, rename or drop, and insert new computed columns.",`The order of the columns in the result is specified by the order of the arguments. Only the columns specified in the arguments are included in the result. Any other columns in the input are dropped.\r \r ## Syntax\r \r *T* \`| project\` [*ColumnName* | \`(\`*ColumnName*[\`,\`]\`)\` \`=\`] *Expression* [\`,\` ...]\r \r or\r \r *T* \`| project\` *ColumnName* [\`=\` *Expression*] [\`,\` ...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *T* | string | ✓ | The tabular input for which to project certain columns. |\r | *ColumnName* | string | | A column name or comma-separated list of column names to appear in the output. |\r | *Expression* | string | | The scalar expression to perform over the input. |\r \r * Either *ColumnName* or *Expression* must be specified.\r * If there's no *Expression*, then a column of *ColumnName* must appear in the input.\r * If *ColumnName* is omitted, the output column name of *Expression* will be automatically generated.\r * If *Expression* returns more than one column, a list of column names can be specified in parentheses. If a list of the column names isn't specified, all *Expression*'s output columns with generated names will be added to the output.\r \r > [!NOTE]\r > It's not recommended to return a new calculated column with the same name as an existing column in the input.\r \r ## Returns\r \r A table with columns that were named as arguments. Contains same number of rows as the input table.`,`### Only show specific columns\r \r Only show the \`EventId\`, \`State\`, \`EventType\` of the \`StormEvents\` table.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKCjKz0pNLlEAC3im6CgElySWpOpA+CGVBakAzXMiTy8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project EventId, State, EventType\r \`\`\`\r \r The results table shows only the top 10 results.\r \r |EventId|State|EventType|\r |--|--|--|\r |61032| ATLANTIC SOUTH| Waterspout|\r |60904| FLORIDA| Heavy Rain|\r |60913| FLORIDA| Tornado|\r |64588| GEORGIA| Thunderstorm Wind|\r |68796| MISSISSIPPI| Thunderstorm Wind|\r |68814| MISSISSIPPI| Tornado|\r |68834| MISSISSIPPI| Thunderstorm Wind|\r |68846| MISSISSIPPI| Hail|\r |73241| AMERICAN SAMOA| Flash Flood|\r |64725| KENTUCKY| Flood|\r |...|...|...|\r \r ### Potential manipulations using project\r \r The following query renames the \`BeginLocation\` column and creates a new column called \`TotalInjuries\` from a calculation over two existing columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwvJL0nM8czLKi3KTC1WsFWAMV0yi1KTSxS04QKeeSlgIQBwTr1bMQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project StartLocation = BeginLocation, TotalInjuries = InjuriesDirect + InjuriesIndirect\r | where TotalInjuries > 5\r \`\`\`\r \r The following table shows only the first 10 results.\r \r |StartLocation| TotalInjuries|\r |--|--|\r |LYDIA| 15|\r |ROYAL| 15|\r |GOTHENBURG| 9|\r |PLAINS| 8|\r |KNOXVILLE| 9|\r |CAROL STREAM| 11|\r |HOLLY| 9|\r |RUFFIN| 9|\r |ENTERPRISE MUNI ARPT| 50|\r |COLLIERVILLE| 6|\r |...|...|\r \r ## See also\r \r * [\`extend\`](extendoperator.md)\r * [series_stats](series-statsfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/projectoperator","projectoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"project-away","Select what columns from the input table to exclude from the output table.",`## Syntax\r \r *T* \`| project-away\` *ColumnNameOrPattern* [\`,\` ...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input from which to remove columns. |\r | *ColumnNameOrPattern* | string | ✓ | One or more column names or column wildcard-patterns to be removed from the output.|\r \r ## Returns\r \r A table with columns that weren't named as arguments. Contains same number of rows as the input table.\r \r > [!TIP]\r > You can \`project-away\` any columns that are present in the original table or that were computed as part of the query.\r \r > [!NOTE]\r > The order of the columns in the result is determined by their original order in the table. Only the columns that were specified as arguments are dropped. The other columns are included in the result.`,`The input table \`PopulationData\` has 2 columns: \`State\` and \`Population\`. Project-away the \`Population\` column and you're left with a list of state names.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwvILyjNSSzJzM9zSSxJ5OWqUSgoys9KTS7RTSxPrFQIgEsDAH2sb1kpAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r PopulationData\r | project-away Population\r \`\`\`\r \r The following table shows only the first 10 results.\r \r |State|\r |---|\r |ALABAMA|\r |ALASKA|\r |ARIZONA|\r |ARKANSAS|\r |CALIFORNIA|\r |COLORADO|\r |CONNECTICUT|\r |DELAWARE|\r |DISTRICT OF COLUMBIA|\r |FLORIDA|\r |...|\r \r ### Project-away using a column name pattern\r \r The following query removes columns starting with the word "session".\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3POz0tLLUrNS04NTi0uzszPK+blqlEoKMrPSk0u0U0sT6xUKIZIaAEAV4MJgSsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r ConferenceSessions\r | project-away session*\r \`\`\`\r \r The following table shows only the first 10 results.\r \r |conference|owner|participants|URL|level|starttime|duration|time_and_duration|kusto_affinity|\r |---|---|---|---|---|---|---|---|---|\r |PASS Summit 2019| Avner Aharoni| |<https://www.eventbrite.com/e/near-real-time-interact-analytics-on-big-data-using-azure-data-explorer-fg-tickets-77532775619>| |2019-11-07T19:15:00Z| |Thu, Nov 7, 11:15 AM-12:15 PM PST |Focused|\r |PASS Summit| Rohan Kumar| Ariel Pisetzky|<https://www.pass.org/summit/2018/Learn/Keynotes.aspx>| |2018-11-07T08:15:00Z| 90 |Wed, Nov 7, 8:15-9:45 am |Mention|\r |Intelligent Cloud 2019| Rohan Kumar| Henning Rauch| | |2019-04-09T09:00:00Z| 90| Tue, Apr 9, 9:00-10:30 AM |Mention|\r |Ignite 2019| Jie Feng| | \`https://myignite.techcommunity.microsoft.com/sessions/83940\` | 100| 2019-11-06T14:35:00Z| 20 |Wed, Nov 6, 9:35 AM - 9:55 AM| Mention|\r |Ignite 2019| Bernhard Rode| Le Hai Dang, Ricardo Niepel |\`https://myignite.techcommunity.microsoft.com/sessions/81596\` | 200 |2019-11-06T16:45:00Z| 45| Wed, Nov 6, 11:45 AM-12:30 PM |Mention|\r |Ignite 2019| Tzvia Gitlin| Troyna| \`https://myignite.techcommunity.microsoft.com/sessions/83933\` | 400 |2019-11-06T17:30:00Z| 75| Wed, Nov 6, 12:30 PM-1:30 PM |Focused|\r |Ignite 2019| Jie Feng | \`https://myignite.techcommunity.microsoft.com/sessions/81057\` | 300| 2019-11-06T20:30:00Z| 45 |Wed, Nov 6, 3:30 PM-4:15 PM |Mention|\r |Ignite 2019| Manoj Raheja| | \`https://myignite.techcommunity.microsoft.com/sessions/83939\` | 300| 2019-11-07T18:15:00Z| 20 |Thu, Nov 7, 1:15 PM-1:35 PM| Focused|\r |Ignite 2019| Uri Barash| | \`https://myignite.techcommunity.microsoft.com/sessions/81060\` | 300| 2019-11-08T17:30:00Z| 45 |Fri, Nov8, 10:30 AM-11:15 AM| Focused|\r |Ignite 2018| Manoj Raheja| |<https://azure.microsoft.com/resources/videos/ignite-2018-azure-data-explorer-%E2%80%93-query-billions-of-records-in-seconds/>| 200| |20| |Focused|\r |...|...|...|...|...|...|...|...|...|\r \r ## See also\r \r * To choose what columns from the input to keep in the output, use [project-keep](project-keep-operator.md).\r * To rename columns, use [\`project-rename\`](projectrenameoperator.md).\r * To reorder columns, use [\`project-reorder\`](projectreorderoperator.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/projectawayoperator","projectawayoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"project-keep","Select what columns from the input to keep in the output. Only the columns that are specified as arguments will be shown in the result. The other columns are excluded.",`## Syntax\r \r *T* \`| project-keep\` *ColumnNameOrPattern* [\`,\` ...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input from which to keep columns.|\r | *ColumnNameOrPattern* | string | ✓ | One or more column names or column wildcard-patterns to be kept in the output.|\r \r ## Returns\r \r A table with columns that were named as arguments. Contains same number of rows as the input table.\r \r > [!TIP]\r > You can \`project-keep\` any columns that are present in the original table or that were computed as part of the query.\r \r > [!NOTE]\r > The order of the columns in the result is determined by their original order in the table. Only the columns that were specified as arguments are kept. The other columns are excluded from the result.`,`The following query returns columns from the \`ConferenceSessions\` table that contain the word "session".\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3POz0tLLUrNS04NTi0uzszPK+blqlEoKMrPSk0u0c1OTS1QKIZIaAEAWs65FysAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r ConferenceSessions\r | project-keep session*\r \`\`\`\r \r The following table shows only the first 10 results.\r \r |sessionid|session_title|session_type|session_location|\r |--|--|--|--|\r |COM64| Focus Group: Azure Data Explorer |Focus Group|Online|\r |COM65| Focus Group: Azure Data Explorer |Focus Group|Online|\r |COM08| Ask the Team: Azure Data Explorer|Ask the Team|Online|\r |COM137| Focus Group: Built-In Dashboard and Smart Auto Scaling Capabilities in Azure Data Explorer|Focus Group| Online|\r |CON-PRT157| Roundtable: Monitoring and managing your Azure Data Explorer deployments|Roundtable|Online|\r |CON-PRT103| Roundtable: Advanced Kusto query language topics|Roundtable| Online|\r |CON-PRT157| Roundtable: Monitoring and managing your Azure Data Explorer deployments|Roundtable|Online|\r |CON-PRT103| Roundtable: Advanced Kusto query language topics|Roundtable|Online|\r |CON-PRT130| Roundtable: Data exploration and visualization with Azure Data Explorer |Roundtable |Online|\r |CON-PRT130| Roundtable: Data exploration and visualization with Azure Data Explorer |Roundtable |Online|\r |...|...|...|...|\r \r ## See also\r \r * To choose what columns from the input to exclude from the output, use [project-away](projectawayoperator.md).\r * To rename columns, use [\`project-rename\`](projectrenameoperator.md).\r * To reorder columns, use [\`project-reorder\`](projectreorderoperator.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/project-keep-operator","project-keep-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"project-rename","Renames columns in the output table.",`## Syntax\r \r *T* \`| project-rename\` *NewColumnName* = *ExistingColumnName* [\`,\` ...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The input tabular data.|\r | *NewColumnName* | string | ✓ | The new column name.|\r | *ExistingColumnName* | string | ✓ | The name of the existing column to rename.|\r \r ## Returns\r \r A table that has the columns in the same order as in an existing table, with columns renamed.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUi0VU9U11FIslVPAlLJturJ6rxcNQoFRflZqcklukWpeYm5qQp5qeXxSbZJOmBGom0iALIWMhk8AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print a='a', b='b', c='c'\r | project-rename new_b=b, new_a=a\r \`\`\`\r \r **Output**\r \r |new_a|new_b|c|\r |---|---|---|\r |a|b|c|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/projectrenameoperator","projectrenameoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"project-reorder","Reorders columns in the output table.","## Syntax\r\n\r\n*T* `| project-reorder` *ColumnNameOrPattern* [`asc` | `desc` | `granny-asc` | `granny-desc`] [`,` ...]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The input tabular data.|\r\n| *ColumnNameOrPattern* | string | ✓ | The name of the column or column wildcard pattern by which to order the columns. |\r\n| `asc`, `desc`, `granny-asc`, `granny-desc` | string | | Indicates how to order the columns when a wildcard pattern is used. `asc` or `desc` orders columns by column name in ascending or descending manner, respectively. `granny-asc` or `granny-desc` orders by ascending or descending, respectively, while secondarily sorting by the next numeric value. For example, `a100` comes before `a20` when `granny-asc` is specified.|\r\n\r\n> [!NOTE]\r\n>\r\n> * If no explicit ordering is specified, the order is determined by the matching columns as they appear in the source table.\r\n> * In ambiguous *ColumnNameOrPattern* matching, the column appears in the first position matching the pattern.\r\n> * Specifying columns for the `project-reorder` is optional. Columns that aren't specified explicitly appear as the last columns of the output table.\r\n> * To remove columns, use [`project-away`](projectawayoperator.md).\r\n> * To choose which columns to keep, use [`project-keep`](project-keep-operator.md).\r\n> * To rename columns, use [`project-rename`](projectrenameoperator.md).\r\n\r\n## Returns\r\n\r\nA table that contains columns in the order specified by the operator arguments. `project-reorder` doesn't rename or remove columns from the table, therefore, all columns that existed in the source table, appear in the result table.",`Reorder a table with three columns (a, b, c) so the second column (b) will appear first.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUi0VU9U11FIslVPAlLJturJ6rxcNQoKBUX5WanJJbpFqflFKalFCkkA1H2l7S8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print a='a', b='b', c='c'\r | project-reorder b\r \`\`\`\r \r **Output**\r \r |b|a|c|\r |---|---|---|\r |b|a|c|\r \r Reorder columns of a table so that columns starting with \`a\` will appear before other columns.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhSsFVQT1LXUUg0slVPNAIxjIEMYxDDEMgwVOflqlFQKCjKz0pNLtEtSs0vSkktUkjUUkgsTgYAJU2yOEMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print b = 'b', a2='a2', a3='a3', a1='a1'\r | project-reorder a* asc\r \`\`\`\r \r **Output**\r \r |a1|a2|a3|b|\r |---|---|---|---|\r |a1|a2|a3|b|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/projectreorderoperator","projectreorderoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"Python",`The Python plugin runs a user-defined function (UDF) using a Python script. The Python script gets tabular data as its input, and produces tabular output.\r The plugin's runtime is hosted in [sandboxes](../concepts/sandboxes.md), running on the cluster's nodes.`,"## Syntax\r\n\r\n*T* `|` `evaluate` [`hint.distribution` `=` (`single` | `per_node`)] `python(`*output_schema*`,` *script* [`,` *script_parameters*][`,` *external_artifacts*][`,` *spill_to_disk*]`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*output_schema*|string|✓|A `type` literal that defines the output schema of the tabular data, returned by the Python code. The format is: `typeof(`*ColumnName*`:` *ColumnType*[, ...]`)`. For example, `typeof(col1:string, col2:long)`. To extend the input schema, use the following syntax: `typeof(*, col1:string, col2:long)`.|\r\n|*script*|string|✓|The valid Python script to execute. To generate multi-line strings, see [Usage tips](#usage-tips).|\r\n|*script_parameters*|dynamic||A property bag of name value pairs to be passed to the Python script as the reserved `kargs` dictionary. For more information, see [Reserved Python variables](#reserved-python-variables).|\r\n|`hint.distribution`|string||A hint for the plugin's execution to be distributed across multiple cluster nodes. The default value is `single`. `single` means a single instance of the script will run over the entire query data. `per_node` means that if the query before the Python block is distributed, an instance of the script will run on each node, on the data that it contains.|\r\n|*external_artifacts*|dynamic||A property bag of name and URL pairs for artifacts that are accessible from cloud storage. See more in [Using external artifacts](#using-external-artifacts).|\r\n|*spill_to_disk*|bool||Specifies an alternative method for serializing the input table to the Python sandbox. For serializing big tables set it to `true` to speed up the serialization and significantly reduce the sandbox memory consumption. Default is `false` as this parameter is experimental.|\r\n\r\n## Reserved Python variables\r\n\r\nThe following variables are reserved for interaction between Kusto Query Language and the Python code.\r\n\r\n* `df`: The input tabular data (the values of `T` above), as a `pandas` DataFrame.\r\n* `kargs`: The value of the *script_parameters* argument, as a Python dictionary.\r\n* `result`: A `pandas` DataFrame created by the Python script, whose value becomes the tabular data that gets sent to the Kusto query operator that follows the plugin.\r\n\r\n## Enable the plugin\r\n\r\nThe plugin is disabled by default. Before you start, review the list of [prerequisites](../concepts/sandboxes.md#prerequisites-and-limitations).\r\n\r\nTo enable the plugin and select the version of the Python image, see [Enable language extensions on your cluster](../../language-extensions.md#enable-language-extensions-on-your-cluster).\r\n\r\n## Python sandbox image\r\n\r\nTo change the version of the Python image, see [Change the Python language extensions image on your cluster](../../language-extensions.md#change-the-python-language-extensions-image-on-your-cluster).\r\n\r\nTo see the list of packages for the different Python images, see [Python package reference](../../python-package-reference.md).\r\n\r\n> [!NOTE]\r\n>\r\n> * By default, the plugin imports *numpy* as **np** and *pandas* as **pd**. Optionally, you can import other modules as needed.\r\n> * Some packages might be incompatible with the limitations enforced by the sandbox where the plugin is run.\r\n\r\n## Use Ingestion from query and update policy\r\n\r\n* Use the plugin in queries that are:\r\n * Defined as part of an [update policy](../management/updatepolicy.md), whose source table is ingested to using *non-streaming* ingestion.\r\n * Run as part of a command that [ingests from a query](../management/data-ingestion/ingest-from-query.md), such as `.set-or-append`.\r\n In both these cases, verify that the volume and frequency of the ingestion, and the complexity and\r\n resources used by the Python logic, align with [sandbox parameters](../concepts/sandboxes.md#sandbox-parameters) and the cluster's available resources. Failure to do so may result in [throttling errors](../concepts/sandboxes.md#errors).\r\n* You can't use the plugin in a query that is defined as part of an update policy, whose source table is ingested using [streaming ingestion](../../ingest-data-streaming.md).",`~~~kusto\r range x from 1 to 360 step 1\r | evaluate python(\r //\r typeof(*, fx:double), // Output schema: append a new fx column to original table \r \`\`\`\r result = df\r n = df.shape[0]\r g = kargs["gain"]\r f = kargs["cycles"]\r result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)\r \`\`\`\r , bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters\r )\r | render linechart \r ~~~\r \r \r \r ~~~kusto\r print "This is an example for using 'external_artifacts'"\r | evaluate python(\r typeof(File:string, Size:string), \`\`\`if 1:\r import os\r result = pd.DataFrame(columns=['File','Size'])\r sizes = []\r path = '.\\\\\\\\Temp'\r files = os.listdir(path)\r result['File']=files\r for file in files:\r sizes.append(os.path.getsize(path + '\\\\\\\\' + file))\r result['Size'] = sizes\r \`\`\`,\r external_artifacts = \r dynamic({"this_is_my_first_file":"https://kustoscriptsamples.blob.core.windows.net/samples/R/sample_script.r",\r "this_is_a_script":"https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py"})\r )\r ~~~\r \r | File | Size |\r |-----------------------|------|\r | this_is_a_script | 120 |\r | this_is_my_first_file | 105 |\r \r ## Performance tips\r \r * Reduce the plugin's input data set to the minimum amount required (columns/rows).\r * Use filters on the source data set, when possible, with Kusto's query language.\r * To do a calculation on a subset of the source columns, project only those columns before invoking the plugin.\r * Use \`hint.distribution = per_node\` whenever the logic in your script is distributable.\r * You can also use the [partition operator](partitionoperator.md) for partitioning the input data set.\r * Use Kusto's query language whenever possible, to implement the logic of your Python script.\r \r \r ## Usage tips\r \r * To generate multi-line strings containing the Python script in \`Kusto.Explorer\`, copy your Python script from your favorite\r Python editor (*Jupyter*, *Visual Studio Code*, *PyCharm*, and so on).\r Now do one of:\r * Enclose the full script between lines containing three consecutive backticks, for example: \r \` \`\`\` \` \r \` python code\` \r \` \`\`\` \`\r * Press **F2** to open the *Edit in Python* window. Paste the script into this window. Select **OK**. The script will be\r decorated with quotes and new lines, so it's valid in Kusto, and automatically pasted into the query tab.\r * Paste the Python code directly into the query tab. Select those lines, and press **Ctrl+K**, **Ctrl+S** hot keys, to decorate them as\r above. To reverse, press **Ctrl+K**, **Ctrl+M** hot keys. See the full list of [Query Editor shortcuts](../tools/kusto-explorer-shortcuts.md#query-editor).\r * To avoid conflicts between Kusto string delimiters and Python string literals, use:\r * Single quote characters (\`'\`) for Kusto string literals in Kusto queries\r * Double quote characters (\`"\`) for Python string literals in Python scripts\r * Use the [\`externaldata\` operator](externaldata-operator.md) to obtain the content of a script that you've stored in an external location, such as Azure Blob storage.\r \r \r ### Example\r \r \`\`\`\r let script = \r externaldata(script:string)\r [h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']\r with(format = raw);\r range x from 1 to 360 step 1\r | evaluate python(\r typeof(*, fx:double),\r toscalar(script), \r bag_pack('gain', 100, 'cycles', 4))\r | render linechart \r \`\`\`\r \r ## Using External Artifacts\r \r External artifacts from cloud storage can be made available for the script and used at runtime.\r \r The URLs referenced by the external artifacts property must be:\r \r * Included in the cluster's [callout policy](../management/calloutpolicy.md).\r * In a publicly available location, or provide the necessary credentials, as explained in [storage connection strings](../api/connection-strings/storage-connection-strings.md).\r \r \r > [!NOTE]\r > When authenticating external artifacts using Managed Identities, the \`SandboxArtifacts\` usage must be defined on the cluster level [managed identity policy](../management/managed-identity-policy.md).\r \r The artifacts are made available for the script to consume from a local temporary directory, \`.\\Temp\`. The names provided in the property bag are used as the local file names. See [Examples](#examples).\r \r For information regarding referencing external packages, see [Install packages for the Python plugin](#install-packages-for-the-python-plugin).\r \r ## Install packages for the Python plugin\r \r You may need to install package(s) yourself, for the following reasons:\r \r * The package is private and is your own.\r * The package is public but isn't included in the plugin's base image.\r \r \r Install packages as follows:\r \r ### Prerequisites\r \r 1. Create a blob container to host the packages, preferably in the same place as your cluster. For example, \`https://artifactswestus.blob.core.windows.net/python\`, assuming your cluster is in West US.\r 1. Alter the cluster's [callout policy](../management/calloutpolicy.md) to allow access to that location.\r * This change requires [AllDatabasesAdmin](../management/access-control/role-based-access-control.md) permissions.\r \r * For example, to enable access to a blob located in \`https://artifactswestus.blob.core.windows.net/python\`, run the following command:\r \r \r \`\`\`\r .alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\\\.blob\\\\.core\\\\.windows\\\\.net/python/","CanCall": true } ]'\r \`\`\`\r \r \r ### Install packages\r \r 1. For public packages in [PyPi](https://pypi.org/) or other channels,\r download the package and its dependencies.\r \r * From a cmd window in your local Windows Python environment, run:\r \r \`\`\`python\r pip wheel [-w download-dir] package-name.\r \`\`\`\r \r 1. Create a zip file that contains the required package and its dependencies.\r \r * For private packages, zip the folder of the package and the folders of its dependencies.\r * For public packages, zip the files that were downloaded in the previous step.\r \r \r > [!NOTE]\r >\r > * Make sure to download the package that is compatible to the Python engine and the platform of the sandbox runtime (currently 3.6.5 on Windows)\r > * Make sure to zip the \`.whl\` files themselves, and not their parent folder.\r > * You can skip \`.whl\` files for packages that already exist with the same version in the base sandbox image.\r \r 1. Upload the zipped file to a blob in the artifacts location (from step 1).\r \r 1. Call the \`python\` plugin.\r * Specify the \`external_artifacts\` parameter with a property bag of name and reference to the zip file (the blob's URL, including a SAS token).\r * In your inline python code, import \`Zipackage\` from \`sandbox_utils\` and call its \`install()\` method with the name of the zip file.\r \r \r ### Example\r \r Install the [Faker](https://pypi.org/project/Faker/) package that generates fake data.\r \r ~~~kusto\r range ID from 1 to 3 step 1 \r | extend Name=''\r | evaluate python(typeof(*), \`\`\`if 1:\r from sandbox_utils import Zipackage\r Zipackage.install("Faker.zip")\r from faker import Faker\r fake = Faker()\r result = df\r for i in range(df.shape[0]):\r result.loc[i, "Name"] = fake.name()\r \`\`\`,\r external_artifacts=bag_pack('faker.zip', 'https://artifacts.blob.core.windows.net/kusto/Faker.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))\r ~~~\r \r | ID | Name |\r |----|--------------|\r | 1| Gary Tapia |\r | 2| Emma Evans |\r | 3| Ashley Bowen |\r \r ---\r \r ## See also\r \r For more examples of UDF functions that use the Python plugin, see the [Functions library](../functions-library/functions-library.md).\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # Python plugin (Preview) - Internal\r \r For questions or feedback about this plugin join the discussion at [Kusto Machine Learning DL](mailto:kustoML@microsoft.com).\r \r ## Installing packages for the Python plugin (experimental) - Internal\r \r The \`python\` plugin sandbox image is based on Anaconda 5.2.0 distribution with Python 3.6 engine. If you need a common public package that is not pre-installed, we recommend contacting [Kusto Machine Learning DL](mailto:kustoml@microsoft.com)to check if it can be added to the common image.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/pythonplugin","pythonplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"R","The R plugin runs a user-defined function (UDF) using an R script.","The script gets tabular data as its input, and produces tabular output.\r\nThe plugin's runtime is hosted in a [sandbox](../concepts/sandboxes.md) on the cluster's nodes. The sandbox provides an isolated and secure environment.\r\n\r\n## Syntax\r\n\r\n*T* `|` `evaluate` [`hint.distribution` `=` (`single` | `per_node`)] `r(`*output_schema*`,` *script* [`,` *script_parameters*] [`,` *external_artifacts*]`)`\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*output_schema*|string|✓|A `type` literal that defines the output schema of the tabular data, returned by the R code. The format is: `typeof(`*ColumnName*`:` *ColumnType*[, ...]`)`. For example: `typeof(col1:string, col2:long)`. To extend the input schema, use the following syntax: `typeof(*, col1:string, col2:long)`.|\r\n|*script*|string|✓|The valid R script to be executed.|\r\n|*script_parameters*|dynamic||A property bag of name and value pairs to be passed to the R script as the reserved `kargs` dictionary. For more information, see [Reserved R variables](#reserved-r-variables).|\r\n|`hint.distribution`|string||Hint for the plugin's execution to be distributed across multiple cluster nodes. The default value is `single`. `single` means that a single instance of the script will run over the entire query data. `per_node` means that if the query before the R block is distributed, an instance of the script will run on each node over the data that it contains.|\r\n|*external_artifacts*|dynamic||A property bag of name and URL pairs for artifacts that are accessible from cloud storage. They can be made available for the script to use at runtime. URLs referenced in this property bag are required to be included in the cluster's [callout policy](../management/calloutpolicy.md) and in a publicly available location, or contain the necessary credentials, as explained in [storage connection strings](../api/connection-strings/storage-connection-strings.md). The artifacts are made available for the script to consume from a local temporary directory, `.\\Temp`. The names provided in the property bag are used as the local file names. See [Example](#examples). For more information, see [Install packages for the R plugin](#install-packages-for-the-r-plugin).|\r\n\r\n## Reserved R variables\r\n\r\nThe following variables are reserved for interaction between Kusto Query Language and the R code:\r\n\r\n* `df`: The input tabular data (the values of `T` above), as an R DataFrame.\r\n* `kargs`: The value of the *script_parameters* argument, as an R dictionary.\r\n* `result`: An R DataFrame created by the R script. The value becomes the tabular data that gets sent to any Kusto query operator that follows the plugin.\r\n\r\n## Enable the plugin\r\n\r\n* The plugin is disabled by default.\r\n* Enable or disable the plugin in the Azure portal in the **Configuration** tab of your cluster. For more information, see [Manage language extensions in your Azure Data Explorer cluster (Preview)](../../language-extensions.md)\r\n\r\n## R sandbox image\r\n\r\n* The R sandbox image is based on *R 3.4.4 for Windows*, and includes packages from [Anaconda's R Essentials bundle](https://docs.anaconda.com/anaconda/packages/r-language-pkg-docs/).",`\`\`\`\r range x from 1 to 360 step 1\r | evaluate r(\r //\r typeof(*, fx:double), // Output schema: append a new fx column to original table \r //\r 'result <- df\\n' // The R decorated script\r 'n <- nrow(df)\\n'\r 'g <- kargs$gain\\n'\r 'f <- kargs$cycles\\n'\r 'result$fx <- g * sin(df$x / n * 2 * pi * f)'\r //\r , bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters\r )\r | render linechart \r \`\`\`\r \r \r \r ## Performance tips\r \r * Reduce the plugin's input data set to the minimum amount required (columns/rows).\r * Use filters on the source data set using the Kusto Query Language, when possible.\r * To make a calculation on a subset of the source columns, project only those columns before invoking the plugin.\r * Use \`hint.distribution = per_node\` whenever the logic in your script is distributable.\r * You can also use the [partition operator](partitionoperator.md) for partitioning the input data set.\r * Whenever possible, use the Kusto Query Language to implement the logic of your R script.\r \r For example:\r \r \r \`\`\`\r .show operations\r | where StartedOn > ago(1d) // Filtering out irrelevant records before invoking the plugin\r | project d_seconds = Duration / 1s // Projecting only a subset of the necessary columns\r | evaluate hint.distribution = per_node r( // Using per_node distribution, as the script's logic allows it\r typeof(*, d2:double),\r 'result <- df\\n'\r 'result$d2 <- df$d_seconds\\n' // Negative example: this logic should have been written using Kusto's query language\r )\r | summarize avg = avg(d2)\r \`\`\`\r \r \r ## Usage tips\r \r * To avoid conflicts between Kusto string delimiters and R string delimiters: \r * Use single quote characters (\`'\`) for Kusto string literals in Kusto queries.\r * Use double quote characters (\`"\`) for R string literals in R scripts.\r * Use the [external data operator](externaldata-operator.md) to obtain the content of\r a script that you've stored in an external location, such as Azure blob storage or a public GitHub repository.\r \r For example:\r \r \r \`\`\`\r let script = \r externaldata(script:string)\r [h'https://kustoscriptsamples.blob.core.windows.net/samples/R/sample_script.r']\r with(format = raw);\r range x from 1 to 360 step 1\r | evaluate r(\r typeof(*, fx:double),\r toscalar(script), \r bag_pack('gain', 100, 'cycles', 4))\r | render linechart \r \`\`\`\r \r \r ## Install packages for the R plugin\r \r Follow these step by step instructions to install package(s) that aren't included in the plugin's base image.\r \r ### Prerequisites\r \r 1. Create a blob container to host the packages, preferably in the same place as your cluster. For example, \`https://artifactswestus.blob.core.windows.net/r\`, assuming your cluster is in West US.\r 1. Alter the cluster's [callout policy](../management/calloutpolicy.md) to allow access to that location.\r * This change requires [AllDatabasesAdmin](../management/access-control/role-based-access-control.md) permissions.\r \r * For example, to enable access to a blob located in \`https://artifactswestus.blob.core.windows.net/r\`, run the following command:\r \r \r \`\`\`\r .alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\\\.blob\\\\.core\\\\.windows\\\\.net/r/","CanCall": true } ]'\r \`\`\`\r \r \r ### Install packages\r \r The example snips below assume local R machine on Windows environment.\r \r 1. Verify you're using the appropriate R version \u2013 current R Sandbox version is 3.4.4:\r \r \`\`\`\r > R.Version()["version.string"]\r \r $version.string\r [1] "R version 3.4.4 (2018-03-15)"\r \`\`\`\r \r If needed you can download it from [here](https://cran.r-project.org/).\r \r 1. Launch the x64 RGui\r \r 1. Create a new empty folder to be populated with all the relevant packages you would like to install. In this example we install the [brglm2 package](https://cran.r-project.org/web/packages/brglm2/index.html), so creating "C:\\brglm2".\r \r 1. Add the newly created folder path to lib paths:\r \r \`\`\`\r > .libPaths("C://brglm2")\r \`\`\`\r \r 1. Verify that the new folder is now the first path in .libPaths():\r \r \`\`\`\r > .libPaths()\r \r [1] "C:/brglm2" "C:/Program Files/R/R-3.4.4/library"\r \r \`\`\`\r \r 1. Once this setup is done, any package that we install shall be added to this new folder. Let's install the requested package and its dependencies:\r \r \`\`\`\r > install.packages("brglm2")\r \`\`\`\r \r In case the question "Do you want to install from sources the packages which need compilation?" pops up, answer "Y".\r \r 1. Verify that new folders were added to "C:\\brglm2":\r \r \r 1. Select all items in that folder and zip them to e.g. libs.zip (do not zip the parent folder). You should get an archive structure like this:\r \r libs.zip:\r \r * brglm2 (folder)\r * enrichwith (folder)\r * numDeriv (folder)\r \r 1. Upload libs.zip to the blob container that was set above\r \r 1. Call the \`r\` plugin.\r * Specify the \`external_artifacts\` parameter with a property bag of name and reference to the zip file (the blob's URL, including a SAS token).\r * In your inline r code, import \`zipfile\` from \`sandboxutils\` and call its \`install()\` method with the name of the zip file.\r \r \r ### Example\r \r Install the [brglm2 package](https://cran.r-project.org/web/packages/brglm2/index.html):\r \r ~~~kusto\r print x=1\r | evaluate r(typeof(*, ver:string),\r 'library(sandboxutils)\\n'\r 'zipfile.install("brglm2.zip")\\n'\r 'library("brglm2")\\n'\r 'result <- df\\n'\r 'result$ver <-packageVersion("brglm2")\\n'\r ,external_artifacts=bag_pack(brglm2.zip', 'https://artifactswestus.blob.core.windows.net/r/libs.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))\r ~~~\r \r | x | ver |\r |---|---------|\r | 1| 1.8.2 |\r \r Make sure that the archive's name (first value in pack pair) has the *.zip suffix to prevent collisions when unzipping folders whose name is identical to the archive name.\r \r ---\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # R plugin (Preview) - Internal\r \r ### Syntax\r \r *T* \`|\` \`evaluate\` [\`hint.distribution\` \`=\` (\`single\` | \`per_node\`)] \`r(\`*output_schema*\`,\` *script* [\`,\` *script_parameters*][\`,\` *external_artifacts*]\`)\`\r \r ### Arguments\r \r * *external_artifacts*: An optional (and **experimental**) \`dynamic\` literal which is a property bag of name/URL pairs of artifacts\r that are accessible from cloud storage and can be made available for the script to use at runtime.\r * Any URL that is referenced as part of this property bag is required to be included in the cluster's [Callout policy](../management/calloutpolicy.md).\r * The artifacts are made available for the script to consume from a local temporary directory, \`D:/Temp\`, and the names provided in the property bag are used as the local file names (see [example](#examples) below).\r \r \r ### Onboarding\r \r * Prerequisites for enabling the plugin are listed [here](../concepts/sandboxes.md#prerequisites).\r * The plugin is disabled by default.\r * *Interested in enabling the plugin on your cluster?*\r * Open a [support ticket](https://aka.ms/kustosupport) in which you should specify\r you've read and acknowledged all the prerequisites, and have approval from the cluster's owner(s).\r * Disabling the plugin requires opening a support ticket as well.\r \r \r ### Notes and Limitations\r \r * The R sandbox limits accessing the network, therefore the R code can't dynamically install additional packages that are not included in the image. Contact [Kusto Machine Learning DL](mailto:kustoml@microsoft.com) if you need specific packages.\r * **[Ingestion from query](../management/data-ingestion/ingest-from-query.md) and [Update policies](../management/updatepolicy.md)**\r * It is possible to use the plugin in queries which are:\r 1. Defined as part of an update policy, whose source table is ingested to using *non-streaming* ingestion.\r 1. Run as part of a command which ingests from a query (for example, \`.set-or-append\`).\r * In both the above cases, it's recommended to verify that the volume and frequency of the ingestion, as well as the complexity and\r resources utilization of the R logic are aligned with [sandbox limitations](../concepts/sandboxes.md#limitations), and the cluster's available resources.\r Failure to do so may result in [throttling errors](../concepts/sandboxes.md#errors).\r * It is *not* possible to use the plugin in a query which is defined as part of an update policy, whose source table is ingested to\r using [*streaming* ingestion](../management/streamingingestionpolicy.md).\r \r \r ### Examples\r \r \`\`\`\r print "This is an example for using 'external_artifacts'"\r | evaluate r(\r typeof(File:string),\r 'df <- as.data.frame(list(File=dir("D:/Temp", all.files = TRUE, recursive = TRUE, include.dirs = TRUE)));'\r 'result <- df',\r external_artifacts =\r dynamic({"this_is_my_first_file":"https://raw.githubusercontent.com/yonileibowitz/kusto.blog/master/resources/R/sample_script.r",\r "this_is_a_script":"https://raw.githubusercontent.com/yonileibowitz/kusto.blog/master/resources/python/sample_script.py"})\r )\r \`\`\`\r \r | File |\r |-----------------------|\r | this_is_a_script |\r | this_is_my_first_file |\r \r Please send feedback and questions about this plugin to [Kusto Machine Learning DL](mailto:kustoML@microsoft.com).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rplugin","rplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"radians","Converts angle value in degrees into value in radians, using formula `radians = (PI / 180 ) * angle_in_degrees`",`## Syntax\r \r \`radians(\`*degrees*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *degrees* | real | ✓ | The angle in degrees.|\r \r ## Returns\r \r The corresponding angle in radians for an angle specified in degrees.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKTMlMzCs2ULCFMTUsDTR1YBxDJHFDCyQJIyQJYzMDTQAGCoiHTgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print radians0 = radians(90), radians1 = radians(180), radians2 = radians(360) \r \`\`\`\r \r **Output**\r \r |radians0|radians1|radians2|\r |---|---|---|\r |1.5707963267949|3.14159265358979|6.28318530717959|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/radiansfunction","radiansfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"rand","Returns a random number.","```\r\nrand()\r\nrand(1000)\r\n```\r\n\r\n## Syntax\r\n\r\n* `rand()` - returns a value of type `real`\r\n with a uniform distribution in the range [0.0, 1.0).\r\n* `rand(` *N* `)` - returns a value of type `real`\r\n chosen with a uniform distribution from the set {0.0, 1.0, ..., *N* - 1}.","","https://docs.microsoft.com/azure/data-explorer/kusto/query/randfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"range","Generates a dynamic array holding a series of equally spaced values.",`## Syntax\r \r \`range(\`*start*\`,\` *stop* [\`,\` *step*]\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*start*|scalar|✓| The value of the first element in the resulting array. |\r |*stop*|scalar|✓| The maximum value of the last element in the resulting array, such that the last value in the series is less than or equal to the stop value. |\r |*step*|scalar||The difference between two consecutive elements of the array. The default value for *step* is \`1\` for numeric and \`1h\` for \`timespan\` or \`datetime\`.|\r \r ## Returns\r \r A dynamic array whose values are: *start*, *start* + *step*, ... up to and including *stop*. The array will be truncated if the maximum number of values is reached. \r \r > [!NOTE]\r > The maximum number of values is 1,048,576 (2^20).`,'The following example returns `[1, 4, 7]`:\r\n\r\n```\r\nT | extend r = range(1, 8, 3)\r\n```\r\n\r\nThe following example returns an array holding all days\r\nin the year 2015:\r\n\r\n```\r\nT | extend r = range(datetime(2015-01-01), datetime(2015-12-31), 1d)\r\n```\r\n\r\nThe following example returns `[1,2,3]`:\r\n\r\n```\r\nrange(1, 3)\r\n```\r\n\r\nThe following example returns `["01:00:00","02:00:00","03:00:00","04:00:00","05:00:00"]`:\r\n\r\n```\r\nrange(1h, 5h)\r\n```\r\n\r\nThe following example returns `1048576`:\r\n\r\n```\r\nprint r = range(1,1000000000) | mv-expand r | count\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/rangefunction","rangefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"range","Generates a single-column table of values.",`> [!NOTE]\r > This operator doesn't take a tabular input.\r \r ## Syntax\r \r \`range\` *columnName* \`from\` *start* \`to\` *stop* \`step\` *step*\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*columnName*|string|✓| The name of the single column in the output table.|\r |*start*|int, long, real, datetime, or timespan|✓| The smallest value in the output.|\r |*stop*|int, long, real, datetime, or timespan|✓| The highest value being generated in the output or a bound on the highest value if *step* steps over this value.|\r |*step*|int, long, real, datetime, or timespan|✓| The difference between two consecutive values.|\r \r > [!NOTE]\r > The values can't reference the columns of any table. If you want to compute the range based on an input table, use the [range](rangefunction.md) function potentially with the [mv-expand](mvexpandoperator.md) operator.\r \r ## Returns\r \r A table with a single column called *columnName*,\r whose values are *start*, *start* \`+\` *step*, ... up to and until *stop*.`,`The following example creates a table with entries for the current time stamp extended over the past seven days, once a day.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVfBJLC4JT03NVkgrys9VSEzP1zBP0VQoyVfIyy/X0FQoLkktUDBMAQDbz6iXLAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range LastWeek from ago(7d) to now() step 1d\r \`\`\`\r \r **Output**\r \r |LastWeek|\r |---|\r |2015-12-05 09:10:04.627|\r |2015-12-06 09:10:04.627|\r |...|\r |2015-12-12 09:10:04.627|\r \r The following example shows how to use the \`range\` operator with parameters, which are then extended and consumed as a table. \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21QQU7DMBC8+xV7TKSGJCKAIOICHLhUSBQe4OINjUjWlrNRGyh/Zx1a4UpYlizvzNgz0yED21dqdy9tj3ALieEboxlZrimoL1AgS6aQwXGelNdXRVaUstMUcigHUN+16uSt5bS0xJsVa8/y2hBO2/RhlpDdJmlaQ57/wraBGZiFK0Z3N4mkOrs4rzYza3TOekYD4dPBaRpmKpHQLquiKAILnu0W7u1IDE573SP79hPNwU1I1bUUknlN73g0+GhHD423/aljtjC7FOPoDp7UHnDHSCbWthR19ldgElHSBTxIYU/UhVjrlmJwURrBg+SAx76y/9iqjuPswXqDHtbTiVIPbwKx/kBp6Qf2xjgc3AEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let toUnixTime = (dt:datetime) \r { \r (dt - datetime(1970-01-01)) / 1s \r };\r let MyMonthStart = startofmonth(now()); //Start of month\r let StepBy = 4.534h; //Supported timespans\r let nn = 64000; // Row Count parametrized\r let MyTimeline = range MyMonthHour from MyMonthStart to now() step StepBy\r | extend MyMonthHourinUnixTime = toUnixTime(MyMonthHour), DateOnly = bin(MyMonthHour,1d), TimeOnly = MyMonthHour - bin(MyMonthHour,1d)\r ; MyTimeline | order by MyMonthHour asc | take nn\r \`\`\`\r \r **Output**\r \r | MyMonthHour | MyMonthHourinUnixTime | DateOnly | TimeOnly |\r |--------------|------------------------|---------------|------------------------------|\r | 2023-02-01 | 00:00:00.0000000 | 1675209600 | 2023-02-01 00:00:00.0000000 |\r | 2023-02-01 | 04:32:02.4000000 | 1675225922.4 | 2023-02-01 00:00:00.0000000 |\r | 2023-02-01 | 09:04:04.8000000 | 1675242244.8 | 2023-02-01 00:00:00.0000000 |\r | 2023-02-01 | 13:36:07.2000000 | 1675258567.2 | 2023-02-01 00:00:00.0000000 |\r | ... | ... | ... | ... |\r \r The following example creates a table with a single column called \`Steps\`\r whose type is \`long\` and whose values are \`1\`, \`4\`, and \`7\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVQguSS0oVkgrys9VMFQoyVewUCgGiigYAwBtHYQiHgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range Steps from 1 to 8 step 3\r \`\`\`\r \r The following example shows how the \`range\` operator can be used to create a small, ad-hoc, dimension table that is then used to introduce zeros where the source data has no values.\r \r \`\`\`\r range TIMESTAMP from ago(4h) to now() step 1m\r | join kind=fullouter\r (Traces\r | where TIMESTAMP > ago(4h)\r | summarize Count=count() by bin(TIMESTAMP, 1m)\r ) on TIMESTAMP\r | project Count=iff(isnull(Count), 0, Count), TIMESTAMP\r | render timechart \r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rangeoperator","rangeoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"reduce","Groups a set of strings together based on value similarity.","For each such group, the operator returns a `pattern`, `count`, and `representative`. The `pattern` best describes the group, in which the `*` character represents a wildcard. The `count` is the number of values in the group, and the `representative` is one of the original values in the group.\r\n\r\n## Syntax\r\n\r\n*T* `|` `reduce` [`kind` `=` *ReduceKind*] `by` *Expr* [`with` [`threshold` `=` *Threshold*] [`,` `characters` `=` *Characters*]]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *Expr* | string | ✓ | The value by which to reduce.|\r\n| *Threshold* | real | | A value between 0 and 1 that determines the minimum fraction of rows required to match the grouping criteria in order to trigger a reduction operation. The default value is 0.1.<br/><br/>We recommend setting a small threshold value for large inputs. With a smaller threshold value, more similar values are grouped together, resulting in fewer but more similar groups. A larger threshold value requires less similarity, resulting in more groups that are less similar. See [Examples](#examples).|\r\n| *Characters* | string | | A list of characters that separate between terms. The default is every non-ascii numeric character. For examples, see [Behavior of Characters parameter](#behavior-of-characters-parameter).|\r\n| *ReduceKind* | string | | The only valid value is `source`. If `source` is specified, the operator appends the `Pattern` column to the existing rows in the table instead of aggregating by `Pattern`.|\r\n\r\n## Returns\r\n\r\nA table with as many rows as there are groups and columns titled `pattern`, `count`, and `representative`. The `pattern` best describes the group, in which the `*` character represents a wildcard, or placeholder for an arbitrary insertion string. The `count` is the number of values in the group, and the `representative` is one of the original values in the group.\r\n\r\nFor example, the result of `reduce by city` might include:\r\n\r\n|Pattern |Count |Representative|\r\n|------------|------|--------------|\r\n| San * | 5182 |San Bernard |\r\n| Saint * | 2846 |Saint Lucy |\r\n| Moscow | 3726 |Moscow |\r\n| \\* -on- \\* | 2730 |One -on- One |\r\n| Paris | 2716 |Paris |",`### Small threshold value\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAzWNMQ7CMBAEe16xcmWkCNkPyA9IR5H2cI7YCOzochGJxOO5hq1WGu2sUJ0ZOx7S3ojQhhhCwKq8IJ6+WKQ9OSmG48a7ojciidS7gVIula9MUkudR9fZ2KB1r61U9UJ18jGcLSYSnrbEuB9/FT5FMzQLr7m9pj5cQojokDIJJWVZ7c2N7gefKNUWogAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 1000 step 1\r | project MyText = strcat("MachineLearningX", tostring(toint(rand(10))))\r | reduce by MyText with threshold=0.001 , characters = "X" \r \`\`\`\r \r **Output**\r \r |Pattern |Count|Representative |\r |----------------|-----|-----------------|\r |MachineLearning*|1000 |MachineLearningX4|\r \r ### Large threshold value\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleIoTData?query=H4sIAAAAAAAAAzWNMQ7CMBAEe16xcmWkCNklRX5AOoq0h3PERmBHl0MkEo/nGrZaabSzQnVmbLhLeyFCG2IIAavygnj4YpH24KQY9itvit6IJFLvBkq5VL4wSS11Hl1nY4PWvbZS1QvVycdwtJhIeHonxm3/q/ApmqFZeM3tOfXhdEaHlEkoKctqX250Px4hVlGgAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 1000 step 1\r | project MyText = strcat("MachineLearningX", tostring(toint(rand(10))))\r | reduce by MyText with threshold=0.9 , characters = "X" \r \`\`\`\r \r **Output**\r \r |Pattern |Count|Representative |\r |----------------|-----|-----------------|\r |MachineLearning*|177|MachineLearningX9|\r |MachineLearning*|102|MachineLearningX0|\r |MachineLearning*|106|MachineLearningX1|\r |MachineLearning*|96|MachineLearningX6|\r |MachineLearning*|110|MachineLearningX4|\r |MachineLearning*|100|MachineLearningX3|\r |MachineLearning*|99|MachineLearningX8|\r |MachineLearning*|104|MachineLearningX7|\r |MachineLearning*|106|MachineLearningX2|\r \r ### Behavior of Characters parameter\r \r If the *Characters* parameter is unspecified, then every non-ascii numeric character will be a term separator.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAxWKQQqAMAwEv7L0VMGDfYAf8VZrKgo2JUao4ONNLwMzjMSyExqy8IUAZYQJt1I1+VCFT0pqQTB3pqjeZWY3wi0GZYtH2X0bBvuFticR1re/P7YelSlbAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1 | project str = strcat("foo", "Z", tostring(x)) | reduce by str\r \`\`\`\r \r **Output**\r \r |Pattern|Count|Representative|\r |--|--|--|\r |others|10||\r \r However, if you specify that "Z" is a separator, then it's as if each value in \`str\` is 2 terms: \`foo\` and \`tostring(x)\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAx2LSQqAQAwEv9LMyQEP+gA/4m2McQMnEiMq+Hijl4IuujTlkXFhUFlRwwR1hd148/FgU1mYzIWi+UjJijCIhBKhdZi4nPNYXDH6X7k/iNHdf3HONoGmpImMdW+8eAEwpEQbbwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 10 step 1 | project str = strcat("foo", "Z", tostring(x)) | reduce by str with characters="Z"\r \`\`\`\r \r **Output**\r \r |Pattern|Count|Representative|\r |--|--|--|\r |foo*|10|fooZ1|\r \r ### Apply \`reduce\` to sanitized input\r \r The following example shows how one might apply the \`reduce\` operator to a "sanitized"\r input, in which GUIDs in the column being reduced are replaced prior to reducing\r \r \`\`\`\r // Start with a few records from the Trace table.\r Trace | take 10000\r // We will reduce the Text column which includes random GUIDs.\r // As random GUIDs interfere with the reduce operation, replace them all\r // by the string "GUID".\r | extend Text=replace_regex(Text, @"[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}", @"GUID")\r // Now perform the reduce. In case there are other "quasi-random" identifiers with embedded '-'\r // or '_' characters in them, treat these as non-term-breakers.\r | reduce by Text with characters="-_"\r \`\`\`\r \r ## See also\r \r [autocluster](./autoclusterplugin.md)\r \r > [!NOTE]\r > The implementation of \`reduce\` operator is largely based on the paper [A Data Clustering Algorithm for Mining Patterns From Event Logs](https://ristov.github.io/publications/slct-ipom03-web.pdf), by Risto Vaarandi.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/reduceoperator","reduceoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"regex_quote","Returns a string that escapes all regular expression characters.",`## Syntax\r \r \`regex_quote(\`*string*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *string* | string | ✓ | The string to escape.|\r \r ## Returns\r \r Returns *string* where all regex expression characters are escaped.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShKLS7NKVGwBTLSUyviC0vzS1I11DWK81VyU/VCUuMqSjTVNQH+BIvaKwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print result = regex_quote('(so$me.Te^xt)')\r \`\`\`\r \r **Output**\r \r | result |\r |---|\r | \`\\(so\\\\$me\\\\.Te\\\\^xt\\\\)\` |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/regexquotefunction","regexquotefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"render","Instructs the user agent to render a visualization of the query results.",'The render operator must be the last operator in the query, and can only be used with queries that produce a single tabular data stream result. The render operator does not modify data. It injects an annotation ("Visualization") into the result\'s extended properties. The annotation contains the information provided by the operator in the query. The interpretation of the visualization information is done by the user agent. Different agents, such as Kusto.Explorer or Azure Data Explorer web UI, may support different visualizations.\r\n\r\nThe data model of the render operator looks at the tabular data as if it has\r\nthree kinds of columns:\r\n\r\n* The x axis column (indicated by the `xcolumn` property).\r\n* The series columns (any number of columns indicated by the `series` property.) For each record, the combined values of these columns defines a single series, and the chart has as many series as there are distinct combined values.\r\n* The y axis columns (any number of columns indicated by the `ycolumns` property). For each record, the series has as many measurements ("points" in the chart) as there are y-axis columns.\r\n\r\n> [!TIP]\r\n>\r\n> * Use `where`, `summarize` and `top` to limit the volume that you display.\r\n> * Sort the data to define the order of the x-axis.\r\n> * User agents are free to "guess" the value of properties that are not specified\r\n by the query. In particular, having "uninteresting" columns in the schema of\r\n the result might translate into them guessing wrong. Try projecting-away such\r\n columns when that happens.\r\n\r\n## Syntax\r\n\r\n*T* `|` `render` *visualization* [`with` `(` *propertyName* `=` *propertyValue* [`,` ...]`)`]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n| -- | -- | -- | -- |\r\n| *T* | string | ✓ | Input table name.\r\n| *visualization* | string | ✓ | Indicates the kind of [visualization](#visualization) to use. Must be one of the supported values in the following list.|\r\n| *propertyName*, *propertyValue* | string | | A comma-separated list of key-value property pairs. See [supported properties](#supported-properties).|\r\n\r\n### Visualization\r\n\r\n| *visualization* | Description |\r\n|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\r\n| [ `anomalychart`](visualization-anomalychart.md) | Similar to timechart, but [highlights anomalies](./samples.md#get-more-from-your-data-by-using-kusto-with-machine-learning) using [series_decompose_anomalies](./series-decompose-anomaliesfunction.md) function. |\r\n| [`areachart`](visualization-areachart.md) | Area graph. |\r\n| [`barchart`](visualization-barchart.md) | displayed as horizontal strips. |\r\n| [`card`](visualization-card.md) | First result record is treated as set of scalar values and shows as a card. |\r\n| [`columnchart`](visualization-columnchart.md) | Like `barchart` with vertical strips instead of horizontal strips. |\r\n| [`ladderchart`](visualization-ladderchart.md) | Last two columns are the x-axis, other columns are y-axis. | \r\n| [`linechart`](visualization-linechart.md) | Line graph. |\r\n| [`piechart`](visualization-piechart.md) | First column is color-axis, second column is numeric. |\r\n| [`pivotchart`](visualization-pivotchart.md) | Displays a pivot table and chart. User can interactively select data, columns, rows and various chart types. |\r\n| [`scatterchart`](visualization-scatterchart.md) | Points graph. |\r\n| [`stackedareachart`](visualization-stackedareachart.md) | Stacked area graph. |\r\n| [`table`](visualization-table.md) | Default - results are shown as a table. |\r\n| [`timechart`](visualization-timechart.md) | Line graph. First column is x-axis, and must be datetime. Other (numeric) columns are y-axes. |\r\n| [`timepivot`](visualization-timepivot.md) | Interactive navigation over the events time-line (pivoting on time axis) |\r\n| [`treemap`](visualization-treemap.md) | Displays hierarchical data as a set of nested rectangles.\r\n\r\n> [!NOTE]\r\n> The ladderchart, pivotchart, timepivot, and treemap visualizations can be used in Kusto.Explorer but are not available in the Azure Data Explorer web UI.\r\n\r\n### Supported properties\r\n\r\n*PropertyName*/*PropertyValue* indicate additional information to use when rendering.\r\n All properties are optional. The supported properties are:\r\n\r\n|*PropertyName*|*PropertyValue* |\r\n|--------------|----------------------------------------------------------------------------------|\r\n|`accumulate` |Whether the value of each measure gets added to all its predecessors. (`true` or `false`)|\r\n|`kind` |Further elaboration of the visualization kind. For more information, see [`kind` property](#kind-property). |\r\n|`legend` |Whether to display a legend or not (`visible` or `hidden`). |\r\n|`series` |Comma-delimited list of columns whose combined per-record values define the series that record belongs to.|\r\n|`ymin` |The minimum value to be displayed on Y-axis. |\r\n|`ymax` |The maximum value to be displayed on Y-axis. |\r\n|`title` |The title of the visualization (of type `string`). |\r\n|`xaxis` |How to scale the x-axis (`linear` or `log`). |\r\n|`xcolumn` |Which column in the result is used for the x-axis. |\r\n|`xtitle` |The title of the x-axis (of type `string`). |\r\n|`yaxis` |How to scale the y-axis (`linear` or `log`). |\r\n|`ycolumns` |Comma-delimited list of columns that consist of the values provided per value of the x column.|\r\n|`ysplit` |How to split multiple the visualization. For more information, see [`y-split` property](#ysplit-property). |\r\n|`ytitle` |The title of the y-axis (of type `string`). |\r\n|`anomalycolumns`|Property relevant only for `anomalychart`. Comma-delimited list of columns, which will be considered as anomaly series and displayed as points on the chart|\r\n\r\n#### `kind` property\r\n\r\nThis visualization can be further elaborated by providing the `kind` property.\r\nThe supported values of this property are:\r\n\r\n|*Visualization*|`kind` |Description |\r\n|---------------|-------------------|-----------------------------------|\r\n|`areachart` |`default` |Each "area" stands on its own. |\r\n| |`unstacked` |Same as `default`. |\r\n| |`stacked` |Stack "areas" to the right. |\r\n| |`stacked100` |Stack "areas" to the right and stretch each one to the same width as the others.|\r\n|`barchart` |`default` |Each "bar" stands on its own. |\r\n| |`unstacked` |Same as `default`. |\r\n| |`stacked` |Stack "bars". |\r\n| |`stacked100` |Stack "bars" and stretch each one to the same width as the others.|\r\n|`columnchart` |`default` |Each "column" stands on its own. |\r\n| |`unstacked` |Same as `default`. |\r\n| |`stacked` |Stack "columns" one atop the other.|\r\n| |`stacked100` |Stack "columns" and stretch each one to the same height as the others.|\r\n|`scatterchart` |`map` |Expected columns are [Longitude, Latitude] or GeoJSON point. Series column is optional. For more information, see [Geospatial visualizations](geospatial-visualizations.md). |\r\n|`piechart` |`map` |Expected columns are [Longitude, Latitude] or GeoJSON point, color-axis and numeric. Supported in Kusto Explorer desktop. For more information, see [Geospatial visualizations](geospatial-visualizations.md).|\r\n\r\n#### `ysplit` property\r\n\r\nSome visualizations support splitting into multiple y-axis values:\r\n\r\n|`ysplit` |Description |\r\n|----------|------------------------------------------------------------------|\r\n|`none` |A single y-axis is displayed for all series data. (Default) |\r\n|`axes` |A single chart is displayed with multiple y-axes (one per series).|\r\n|`panels` |One chart is rendered for each `ycolumn` value (up to some limit).|\r\n\r\n## How to render continuous data\r\n\r\nSeveral visualizations are used for rendering sequences of values, for example, `linechart`, `timechart`, and `areachart`.\r\nThese visualizations have the following conceptual model:\r\n\r\n* One column in the table represents the x-axis of the data. This column can be explicitly defined using the\r\n `xcolumn` property. If not defined, the user agent will pick the first column that is appropriate for the visualization.\r\n * For example: in the `timechart` visualization, the user agent will use the first `datetime` column.\r\n * If this column is of type `dynamic` and it holds an array, the individual values in the array will be treated as the values of the x-axis.\r\n* One or more columns in the table represent one or more measures that vary by the x-axis.\r\n These columns can be explicitly defined using the `ycolumns` property. If not defined, the user agent will pick all columns that are appropriate for the visualization.\r\n * For example: in the `timechart` visualization, the user agent will use all columns with a numeric value that haven\'t been specified otherwise.\r\n * If the x-axis is an array, the values of each y-axis should also be an array of a similar length, with each y-axis occurring in a single column.\r\n* Zero or more columns in the table represent a unique set of dimensions that group together the measures. These columns can be specified by the `series` property, or the user agent will pick them automatically from the columns that are otherwise unspecified.\r\n\r\n## See also\r\n\r\n* [Rendering examples in the tutorial](tutorials/use-aggregation-functions.md#visualize-query-results)\r\n* [Anomaly detection](./samples.md#get-more-from-your-data-by-using-kusto-with-machine-learning)',"","https://docs.microsoft.com/azure/data-explorer/kusto/query/renderoperator","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"repeat","Generates a dynamic array containing a series comprised of repeated numbers.",`## Syntax\r \r \`repeat(\`*value*\`,\` *count*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | bool, int, long, real, datetime, string or timespan | ✓ | The value of the element in the resulting array.| \r | *count* | int | ✓ | The count of the elements in the resulting array.|\r \r ## Returns\r \r If *count* is equal to zero, an empty array is returned.\r If *count* is less than zero, a null value is returned.`,"The following example returns `[1, 1, 1]`:\r\n\r\n```\r\nT | extend r = repeat(1, 3)\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/repeatfunction","repeatfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"replace_regex","Replaces all regex matches with a specified pattern.",`> **Deprecated aliases:** replace()\r \r ## Syntax\r \r \`replace_regex(\`*source*\`,\`*lookup_regex*\`,\` *rewrite_pattern*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source*| string | ✓ | The text to search and replace.|\r | *lookup_regex*| string | ✓ | The [regular expression](re2.md) to search for in *text*. The expression can contain capture groups in parentheses.|\r | *rewrite_pattern*| string | ✓ | The replacement regex for any match made by *matchingRegex*. Use \`\\0\` to refer to the whole match, \`\\1\` for the first capture group, \`\\2\` and so on for subsequent capture groups.|\r \r ## Returns\r \r Returns the *source* after replacing all matches of *lookup_regex* with evaluations of *rewrite_pattern*. Matches do not overlap.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5KpRSK0oSc1LAfKLbIE4ObFEQ92vNDcptUghs1hBXQeoGiicmZeuUaGpiVBelFqQk5icmmILZcQXpaanVmgAleooOKgDdWrEpGhrqoM45YnFVgoxhuqaAA84qqaHAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | extend str=strcat('Number is ', tostring(x))\r | extend replaced=replace_regex(str, @'is (\\d+)', @'was: \\1')\r \`\`\`\r \r **Output**\r \r | x | str | replaced|\r |---|---|---|\r | 1 | Number is 1.000000 | Number was: 1.000000|\r | 2 | Number is 2.000000 | Number was: 2.000000|\r | 3 | Number is 3.000000 | Number was: 3.000000|\r | 4 | Number is 4.000000 | Number was: 4.000000|\r | 5 | Number is 5.000000 | Number was: 5.000000|\r \r ## See also\r \r * To replace a single string, see [replace_string()](replace-string-function.md).\r * To replace multiple strings, see [replace_strings()](replace-strings-function.md).\r * To replace a set of characters, see [translate()](translatefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/replace-regex-function","replace-regex-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"replace_string","Replaces all string matches with a specified string.",`> **Deprecated aliases:** replace()\r \r To replace multiple strings, see [replace_strings()](replace-strings-function.md).\r \r ## Syntax\r \r \`replace_string(\`*text*\`,\` *lookup*\`,\` *rewrite*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*text*|string|✓|The source string.|\r |*lookup*|string|✓|The string to be replaced.|\r |*rewrite*|string|✓|The replacement string.|\r \r ## Returns\r \r Returns the *text* after replacing all matches of *lookup* with evaluations of *rewrite*. Matches don't overlap.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WLOwqAMBBEe08x3RqwsbD0Cl5Boq4hoEnYREzh4d1CsBjmwxuxwTEqdoknepSIAblwQt884Fo4bNplVK22tDRd58ICn0Gd0jr74NpqzI8Lp8OuvI1fmD9IrQP5rEe6bSbzAkZqfYp8AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | extend str=strcat('Number is ', tostring(x))\r | extend replaced=replace_string(str, 'is', 'was')\r \`\`\`\r \r **Output:**\r \r | x | str | replaced|\r |---|---|---|\r | 1 | Number is 1.000000 | Number was 1.000000|\r | 2 | Number is 2.000000 | Number was 2.000000|\r | 3 | Number is 3.000000 | Number was 3.000000|\r | 4 | Number is 4.000000 | Number was 4.000000|\r | 5 | Number is 5.000000 | Number was 5.000000|\r \r ## See also\r \r * To replace multiple strings, see [replace_strings()](replace-strings-function.md).\r * To replace strings based on regular expression, see [replace_regex()](replace-regex-function.md).\r * To replace a set of characters, see [translate()](translatefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/replace-string-function","replace-string-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"replace_strings","Replaces all strings matches with specified strings.",`To replace an individual string, see [replace_string()](replace-string-function.md).\r \r ## Syntax\r \r \`replace_strings(\`*text*\`,\` *lookups*\`,\` *rewrites*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*text*|string|✓|The source string.|\r |*lookups*|dynamic|✓|The array that includes lookup strings. Array element that isn't a string is ignored.|\r |*rewrites*|dynamic|✓|The array that includes rewrites. Array element that isn't a string is ignored (no replacement made).|\r \r ## Returns\r \r Returns *text* after replacing all matches of *lookups* with evaluations of *rewrites*. Matches don't overlap.`,`### Simple replacement\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22NwQrCMBBE74X+w9BLWij0C3rwrghei0hIlxBqNiFJQcGPd4sFPbinYZj3NibHBSfKWVsamwO8ts6gJGcWGM0oa2JoiQWyDBLnYJu6eoEehXjGeS0meMKIRPGuDd2y0GxzW1fYb/f332Z+svbOtJMSs+qhxKquXY9hwDGEZY3YNf+YbSxMdJYCC7ZRl893T1x+mO4NCQvYwOEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Message="A magic trick can turn a cat into a dog"\r | extend Outcome = replace_strings(\r Message,\r dynamic(['cat', 'dog']), // Lookup strings\r dynamic(['dog', 'pigeon']) // Replacements\r )\r \`\`\`\r \r |Message|Outcome|\r |---|---|\r |A magic trick can turn a cat into a dog|A magic trick can turn a dog into a pigeon|\r \r ### Replacement with an empty string\r \r Replacement with an empty string removes the matching string.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22OywrCMBBF94X+w6WbtBDoF3ThXhHcisiQDCHUPEhSUPDjTbFgF87qMsw5c2OyvuDEOZPhqTvAkbEKJVk1Q5FHWZIH1VhQL0ONOpiubd7gZ2GvcV6KCo4xIXF8kOJ7rrQ3uW8bbLP55W+jX56cVf1VrA+EhNjpxW2QGEccQ5iXiM33D9Y2U4xMaTVUbKUu3xqOfdkxwwehFI6X6gAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print Message="A magic trick can turn a cat into a dog"\r | extend Outcome = replace_strings(\r Message,\r dynamic(['turn', ' into a dog']), // Lookup strings\r dynamic(['disappear', '']) // Replacements\r )\r \`\`\`\r \r |Message|Outcome|\r |---|---|\r |A magic trick can turn a cat into a dog|A magic trick can disappear a cat|\r \r ### Replacement order\r \r The order of match elements matters: the earlier match takes the precedence.\r Note the difference between Outcome1 and Outcome2: \`This\` vs \`Thwas\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8vPTTVSsFUoSi3ISUxOjS8uKcrMSy/W4OVSgALf1OLixPRUHYRISmVeYm5mska0emaxuo6CekgGkI7V1FHQ11fwyc/PLi1QgBqDTU95IrImkJ4giN25qXklSDo0AS8KRWGaAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print Message="This is an example of using replace_strings()"\r | extend Outcome1 = replace_strings(\r Message,\r dynamic(['This', 'is']), // Lookup strings\r dynamic(['This', 'was']) // Replacements\r ),\r Outcome2 = replace_strings(\r Message,\r dynamic(['is', 'This']), // Lookup strings\r dynamic(['was', 'This']) // Replacements\r )\r \`\`\`\r \r |Message|Outcome1|Outcome2|\r |---|---|---|\r |This is an example of using replace_strings()|This was an example of using replace_strings()|Thwas was an example of using replace_strings()|\r \r ### Nonstring replacement\r \r Replace elements that aren't strings aren't replaced and the original string is kept. The match is still considered being valid, and other possible replacements aren't performed on the matched string. In the following example, 'This' isn't replaced with the numeric \`12345\`, and it remains in the output unaffected by possible match with 'is'.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22NywrCMBBF94X+w6WbNlAovpb9A0UQdyIS2jEGmwdNggp+vCkGFHQYZnG5Z44dpfbYkHNcUFvsL9IhLtegO1d2IJgzgpNaYCQ78I5OzkdGuIoVefaMNU+6xzb4zihC+1PLM6RJlvqT9A/NleyqQzmJyxplvEdWo2mwNuYaLNKbP8xsvliuInLjEzMhu7dakfZfAHsBMAz0MeQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print Message="This is an example of using replace_strings()"\r | extend Outcome = replace_strings(\r Message,\r dynamic(['This', 'is']), // Lookup strings\r dynamic([12345, 'was']) // Replacements\r )\r \`\`\`\r \r |Message|Outcome|\r |---|---|\r |This is an example of using replace_strings()|This was an example of using replace_strings()|\r \r ## See also\r \r * For a replacement of a single string, see [replace_string()](replace-string-function.md).\r * For a replacement based on regular expression, see [replace_regex()](replace-regex-function.md).\r * For replacing a set of characters, see [translate()](translatefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/replace-strings-function","replace-strings-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"reverse","Function reverses the order of the input string.\r\nIf the input value isn't of type `string`, then the function forcibly casts the value to type `string`.",`## Syntax\r \r \`reverse(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | string | ✓ | input value.| \r \r ## Returns\r \r The reverse order of a string value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSguKVKwVVBydHJ2cXVz9/D08vbx9fMPCAwKDgkNC4+IjFLiqlFIrShJzUtRKIIoLkotSy0qTtUA8jQB/i1rL0UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\r | extend rstr = reverse(str)\r \`\`\`\r \r **Output**\r \r |str|rstr|\r |---|---|\r |ABCDEFGHIJKLMNOPQRSTUVWXYZ|ZYXWVUTSRQPONMLKJIHGFEDCBA|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUYhWB5LqsQq2CoZGxiamOkCBlPzSpJxUmJgeSJALKJpYklqSmQsRh3E0jAwMzXUNDXQNTYFqrQwMNEEGgGSKCxLzwEqNM7hqFAqK8rNSk0sUwFbaKhSllqUWFadqQC0HaiqCWIoiB3MHUJqrCGYjqgq4m0BGwKxFUYJwiyYA300QcvEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print ['int'] = 12345, ['double'] = 123.45, \r ['datetime'] = datetime(2017-10-15 12:00), ['timespan'] = 3h\r | project rint = reverse(['int']), rdouble = reverse(['double']), \r rdatetime = reverse(['datetime']), rtimespan = reverse(['timespan'])\r \`\`\`\r \r **Output**\r \r |rint|rdouble|rdatetime|rtimespan|\r |---|---|---|---|\r |54321|54.321|Z0000000.00:00:21T51-01-7102|00:00:30|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/reversefunction","reversefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"rolling_percentile","Returns an estimate for the specified percentile of the *ValueColumn* population in a rolling (sliding) *BinsPerWindow* size window per *BinSize*.",`The plugin is invoked with the [\`evaluate\`](evaluateoperator.md) operator.\r \r ## Syntax\r \r *T* \`| evaluate\` \`rolling_percentile(\`*ValueColumn*\`,\` *Percentile*\`,\` *IndexColumn*\`,\` *BinSize*\`,\` *BinsPerWindow* [\`,\` *dim1*\`,\` *dim2*\`,\` ...] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T*| string | ✓ | The input tabular expression.|\r | *ValueColumn*| string | ✓| The name of the column used to calculate the percentiles.|\r | *Percentile*| int, long, or real | ✓| Scalar with the percentile to calculate.|\r | *IndexColumn*| string | ✓| The name of the column over which to run the rolling window.|\r | *BinSize*| int, long, real, datetime, or timespan | ✓| Scalar with size of the bins to apply over the *IndexColumn*.|\r | *BinsPerWindow*| int | ✓| The number of bins included in each window.|\r | *dim1*, *dim2*, ... | string | | A list of the dimensions columns to slice by.|\r \r ## Returns\r \r Returns a table with a row per each bin (and combination of dimensions if specified) that has the rolling percentile of values in the window ending at the bin (inclusive).\r Output table schema is:\r \r |IndexColumn|dim1|...|dim_n|rolling_BinsPerWindow_percentile_ValueColumn_Pct\r |---|---|---|---|---|`,`### Rolling 3-day median value per day\r \r The next query calculates a 3-day median value in daily granularity. Each row in the output represents the median value for the last 3 bins (days), including the bin itself.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2OwQqDMAyG7z7FjzDQWaF1GwyGx529eB9io+uotdRueNjDL+5gCYSQ7/9SSxEtaiTgFzo3EoxeMYR5gkScUZ1xhJIoobBE8lB/9Asf5hf1nDYTLbGbPFt0FynynFVSXUupuHIUUE92sFbg09l68xe7htZITuP+IdeERmu2mGHIGMQBFeoaUiDd1il3BtL8lrRAwlGG3nwRYbbWuPHhKfTkorG05QUuHN2/J6C0wCn/AfIZwjfyAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let T = \r range idx from 0 to 24 * 10 - 1 step 1\r | project Timestamp = datetime(2018-01-01) + 1h * idx, val=idx + 1\r | extend EvenOrOdd = iff(val % 2 == 0, "Even", "Odd");\r T \r | evaluate rolling_percentile(val, 50, Timestamp, 1d, 3)\r \`\`\`\r \r **Output**\r \r |Timestamp|rolling_3_percentile_val_50|\r |---|---|\r |2018-01-01 00:00:00.0000000| 12|\r |2018-01-02 00:00:00.0000000| 24|\r |2018-01-03 00:00:00.0000000| 36|\r |2018-01-04 00:00:00.0000000| 60|\r |2018-01-05 00:00:00.0000000| 84|\r |2018-01-06 00:00:00.0000000| 108|\r |2018-01-07 00:00:00.0000000| 132|\r |2018-01-08 00:00:00.0000000| 156|\r |2018-01-09 00:00:00.0000000| 180|\r |2018-01-10 00:00:00.0000000| 204|\r \r ### Rolling 3-day median value per day by dimension\r \r Same example from above, but now also calculates the rolling window partitioned for each value of the dimension.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WOQQuDMAyF7/6KhzDQWaF1GwyGx529eB9io+uoVWonHvbjF3dwIRBC3vteLAXUKBGByzeuJxi9ovPjAIkwojjjCCWRQ2EONEH9pB9MfnxRy24z0ByaYWKKbgIF3pNCqmsuFXeKDOrJDMYKLI0tN362Y2gN5DTuC7nKV1ozxXRdwkIcUKAsIQXi7RzzZEGc3qIaiNjKojcnwo/WGtc/JvItuWAsbX6BC1v39wSUFjiJf1T6BZy1q2z9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let T = \r range idx from 0 to 24 * 10 - 1 step 1\r | project Timestamp = datetime(2018-01-01) + 1h * idx, val=idx + 1\r | extend EvenOrOdd = iff(val % 2 == 0, "Even", "Odd");\r T \r | evaluate rolling_percentile(val, 50, Timestamp, 1d, 3, EvenOrOdd)\r \`\`\`\r \r **Output**\r \r |Timestamp| EvenOrOdd| rolling_3_percentile_val_50|\r |---|---|---|\r |2018-01-01 00:00:00.0000000| Even| 12|\r |2018-01-02 00:00:00.0000000| Even| 24|\r |2018-01-03 00:00:00.0000000| Even| 36|\r |2018-01-04 00:00:00.0000000| Even| 60|\r |2018-01-05 00:00:00.0000000| Even| 84|\r |2018-01-06 00:00:00.0000000| Even| 108|\r |2018-01-07 00:00:00.0000000| Even| 132|\r |2018-01-08 00:00:00.0000000| Even| 156|\r |2018-01-09 00:00:00.0000000| Even| 180|\r |2018-01-10 00:00:00.0000000| Even| 204|\r |2018-01-01 00:00:00.0000000| Odd| 11|\r |2018-01-02 00:00:00.0000000| Odd| 23|\r |2018-01-03 00:00:00.0000000| Odd| 35|\r |2018-01-04 00:00:00.0000000| Odd| 59|\r |2018-01-05 00:00:00.0000000| Odd| 83|\r |2018-01-06 00:00:00.0000000| Odd| 107|\r |2018-01-07 00:00:00.0000000| Odd| 131|\r |2018-01-08 00:00:00.0000000| Odd| 155|\r |2018-01-09 00:00:00.0000000| Odd| 179|\r |2018-01-10 00:00:00.0000000| Odd| 203|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rolling-percentile-plugin","rolling-percentile-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"round","Returns the rounded number to the specified precision.","## Syntax\r\n\r\n`round(`*number* [`,` *precision*]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *number*| long or real | ✓ | The number to calculate the round on.|\r\n| *precision*| int | | The number of digits to round to. The default is 0.|\r\n\r\n## Returns\r\n\r\nThe rounded number to the specified precision.\r\n\r\nRound is different from the [`bin()`](binfunction.md) function in\r\nthat the `round()` function rounds a number to a specific number of digits while the `bin()` function rounds the value to an integer multiple of a given bin size. For example, `round(2.15, 1)` returns 2.2 while `bin(2.15, 1)` returns 2.","```\r\nround(2.98765, 3) // 2.988\r\nround(2.15, 1) // 2.2\r\nround(2.15) // 2 // equivalent to round(2.15, 0)\r\nround(-50.55, -2) // -100\r\nround(21.5, -1) // 20\r\n```","https://docs.microsoft.com/azure/data-explorer/kusto/query/roundfunction","roundfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"row_cumsum","Calculates the cumulative sum of a column in a [serialized row set](./windowsfunctions.md#serialized-row-set).",`## Syntax\r \r \`row_cumsum(\` *term* [\`,\` *restart*] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *term*| int, long, or real | ✓ | The expression indicating the value to be summed.|\r | *restart*| bool | | Indicates when the accumulation operation should be restarted, or set back to 0. It can be used to indicate partitions in the data.|\r \r ## Returns\r \r The function returns the cumulative sum of its argument.`,`The following example shows how to calculate the cumulative sum of the first\r few even integers.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAw3ITQqDMBBA4X1O8TYFhVmo1f5BTlJKGXVohaiQVITSwzfv271RP1kfjEJvhHV5ldwduVpohKPQCp1wEs7CRbgKdeUe7sf+tmgoBxq8p8orWZw0TF9jSD6u+3PY5rTNhZZ/2Wk/Y2kAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (a:long) [\r 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\r ]\r | where a%2==0\r | serialize cs=row_cumsum(a)\r \`\`\`\r \r a | cs\r -----|-----\r 2 | 2\r 4 | 6\r 6 | 12\r 8 | 20\r 10 | 30\r \r This example shows how to calculate the cumulative sum (here, of \`salary\`)\r when the data is partitioned (here, by \`name\`):\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WPSw6CQAxA95yisoJkFuBnIQkLvYYxZgYaJJmPmSkqiYe3A7qBtovm9TVpW0mcSiNkVhqsAvnedgKMs3SveksCgtTSj5V2tsuTSwIc6Un3DaYCSq6iKMRMz04xgwX9u1uutcu0PB6W7o7pfuVONLrX5APOt+hBjRDvBhma39Gx5TG+CW0L5Ejq2rvXrRlMGEw2fyPmrU0ND4/P6fU8/wKEiBU0DAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (name:string, month:int, salary:long)\r [\r "Alice", 1, 1000,\r "Bob", 1, 1000,\r "Alice", 2, 2000,\r "Bob", 2, 1950,\r "Alice", 3, 1400,\r "Bob", 3, 1450,\r ]\r | order by name asc, month asc\r | extend total=row_cumsum(salary, name != prev(name))\r \`\`\`\r \r name | month | salary | total\r -------|--------|---------|------\r Alice | 1 | 1000 | 1000\r Alice | 2 | 2000 | 3000\r Alice | 3 | 1400 | 4400\r Bob | 1 | 1000 | 1000\r Bob | 2 | 1950 | 2950\r Bob | 3 | 1450 | 4400`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rowcumsumfunction","rowcumsumfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"row_number","Returns the current row's index in a [serialized row set](./windowsfunctions.md#serialized-row-set).","The row index starts by default at `1` for the first row, and is incremented by `1` for each additional row.\r\nOptionally, the row index can start at a different value than `1`.\r\nAdditionally, the row index may be reset according to some provided predicate.\r\n\r\n## Syntax\r\n\r\n`row_number(` [*StartingIndex* [`,` *Restart*]] `)`\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *StartingIndex*| long | | The value of the row index to start at or restart to. The default value is 1.|\r\n| *restart*| bool | | Indicates when the numbering is to be restarted to the *StartingIndex* value. The default is `false`.|\r\n\r\n## Returns\r\n\r\nThe function returns the row index of the current row as a value of type `long`.",`The following example returns a table with two columns, the first column (\`a\`)\r with numbers from \`10\` down to \`1\`, and the second column (\`rn\`) with numbers\r from \`1\` up to \`10\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVUhUSCvKz1UwVCjJVzA0UCguSS1QMOSqUSjOLypRSKoEyqekFicDBVIrSlLzUhSK8myL8svj80pzk1KLNDQBtU8QmkUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range a from 1 to 10 step 1\r | sort by a desc\r | extend rn=row_number()\r \`\`\`\r \r The following example is similar to the above, only the second column (\`rn\`)\r starts at \`7\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVUhUSCvKz1UwVCjJVzA0UCguSS1QMOSqUSjOLypRSKoEyqekFicDBVIrSlLzUhSK8myL8svj80pzk1KLNMw1AXIfYP9GAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range a from 1 to 10 step 1\r | sort by a desc\r | extend rn=row_number(7)\r \`\`\`\r \r The last example shows how one can partition the data and number the rows\r per each partition. Here, we partition the data by \`Airport\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBQ3HzKKC/KISq+KSosy8dB0FID8nMy8VzndJLUgsKiktSi22ysnPS9fkiuZSUFAK8QlT0lFQ8vEAkoY6yCKRIBEDA7BYsKsjmiqoiBOINEJRA9JnwBXLVaNQDHSOQlKlAtRlConFycjOUEhJLU4GKkutKEnNS1EISszLti3KL4/PK81NSi3SMNRRKChKLYP5S1NB0RZmkiYA2Leu+/cAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Airport:string, Airline:string, Departures:long)\r [\r "TLV", "LH", 1,\r "TLV", "LY", 100,\r "SEA", "LH", 1,\r "SEA", "BA", 2,\r "SEA", "LY", 0\r ]\r | sort by Airport asc, Departures desc\r | extend Rank=row_number(1, prev(Airport) != Airport)\r \`\`\`\r \r Running this query produces the following result:\r \r Airport | Airline | Departures | Rank\r ---------|----------|-------------|------\r SEA | BA | 2 | 1\r SEA | LH | 1 | 2\r SEA | LY | 0 | 3\r TLV | LY | 100 | 1\r TLV | LH | 1 | 2`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rownumberfunction","rownumberfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"row_rank_dense","Returns the current row's dense rank in a [serialized row set](./windowsfunctions.md#serialized-row-set).",`The row rank starts by default at \`1\` for the first row, and is incremented by \`1\` whenever the provided *Term* is different than the previous row's *Term*.\r \r ## Syntax\r \r \`row_rank_dense\` \`(\` *Term* \`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*Term*|string|✓|An expression indicating the value to consider for the rank. The rank is increased whenever the *Term* changes.|\r | *restart*| bool | | Indicates when the numbering is to be restarted to the *StartingIndex* value. The default is \`false\`.|\r \r ## Returns\r \r Returns the row rank of the current row as a value of type \`long\`.`,`The following query shows how to rank the \`Airline\` by the number of departures from the SEA \`Airport\` using dense rank.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBQ3HzKKC/KISq+KSosy8dB0FID8nMy8VzndJLUgsKiktSi22ysnPS9fk5Yrm5VJQUAp2dVTSUVDy8QCSxjooQpFA0tDAAEUw1BFDnROINEIRcvUBqeLliuXlqlEoBjpLIakSyQUKicXJIJnUipLUvBSFoMS8bNui/PL4IiAjPiU1rzhVA6FYEwC7n6cO5QAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Airport:string, Airline:string, Departures:long)\r [\r "SEA", "LH", 3,\r "SEA", "LY", 100,\r "SEA", "UA", 3,\r "SEA", "BA", 2,\r "SEA", "EL", 3\r ]\r | sort by Departures asc\r | extend Rank=row_rank_dense(Departures)\r \`\`\`\r \r **Output**\r \r Airport | Airline | Departures | Rank\r ---------|----------|-------------|------\r SEA | BA | 2 | 1\r SEA | LH | 3 | 2\r SEA | UA | 3 | 2\r SEA | EL | 3 | 2\r SEA | LY | 100 | 3\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WQTQuCQBCG7wv+h8mTggetm+DBSOhgl6RDRIi6g0iyyuz2Bf341khtiYGXmYd3hpnhhdJRtghO3FDfkQqlokbUHui6bQRO9Qb7gtSVUIZtJ2rXYieLAdhZEtse2OlW68oz0FFr4PsGPMR/vvWgSwMl6eyKd9mEAgN9GgOLnS32AqmXh/IJ3zuAo6x+t4ZCVoMPHwoFh30hLhF195x0knMUEp3Z7EFPeBt/4sIiGue6b3gIxbszAQAA" target="_blank">Run the query</a>\r \r The following example shows how to rank the \`Airline\` by the number of departures per each partition. Here, we partition the data by \`Airport\`: \r \r \`\`\`\r datatable (Airport:string, Airline:string, Departures:long)\r [\r "SEA", "LH", 3,\r "SEA", "LY", 100,\r "SEA", "UA", 3,\r "SEA", "BA", 2,\r "SEA", "EL", 3,\r "AMS", "EL", 1,\r "AMS", "BA", 1\r ]\r | sort by Airport desc, Departures asc\r | extend Rank=row_rank_dense(Departures, prev(Airport) != Airport)\r \`\`\`\r \r **Output**\r \r Airport | Airline | Departures | Rank\r ---------|----------|-------------|------\r SEA | BA | 2 | 1\r SEA | LH | 3 | 2\r SEA | UA | 3 | 2\r SEA | EL | 3 | 2\r SEA | LY | 100 | 3\r AMS | EL | 1 | 1\r AMS | BA | 1 | 1`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rowrankdensefunction","rowrankdensefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"row_rank_min","Returns the current row's minimal rank in a [serialized row set](./windowsfunctions.md#serialized-row-set).",`The rank is the minimal row number that the current row's *Term* appears in.\r \r ## Syntax\r \r \`row_rank_min\` \`(\` *Term* \`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*Term*|string|✓|An expression indicating the value to consider for the rank. The rank is the minimal row number for *Term*.|\r | *restart*| bool | | Indicates when the numbering is to be restarted to the *StartingIndex* value. The default is \`false\`.|\r \r ## Returns\r \r Returns the row rank of the current row as a value of type \`long\`.`,`The following query shows how to rank the \`Airline\` by the number of departures from the SEA \`Airport\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBQ3HzKKC/KISq+KSosy8dB0FID8nMy8VzndJLUgsKiktSi22ysnPS9fk5Yrm5VJQUAp2dVTSUVDy8QCSxjooQpFA0tDAAEUw1BFDnROINEIRcvUBqeLliuXlqlEoBjpLIakSyQUKicXJIJnUipLUvBSFoMS8bNui/PL4IiAjPjczTwOhVBMA9lGyTeMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Airport:string, Airline:string, Departures:long)\r [\r "SEA", "LH", 3,\r "SEA", "LY", 100,\r "SEA", "UA", 3,\r "SEA", "BA", 2,\r "SEA", "EL", 3\r ]\r | sort by Departures asc\r | extend Rank=row_rank_min(Departures)\r \`\`\`\r \r **Output**\r \r Airport | Airline | Departures | Rank\r ---------|----------|-------------|------\r SEA | BA | 2 | 1\r SEA | LH | 3 | 2\r SEA | UA | 3 | 2\r SEA | EL | 3 | 2\r SEA | LY | 100 | 5`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rowrankminfunction","rowrankminfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"row_window_session","Calculates session start values of a column in a [serialized row set](./windowsfunctions.md#serialized-row-set).","## Syntax\r\n\r\n`row_window_session` `(` *`Expr`* `,` *`MaxDistanceFromFirst`* `,` *`MaxDistanceBetweenNeighbors`* [`,` *`Restart`*] `)`\r\n\r\n* *`Expr`* is an expression whose values are grouped together in sessions.\r\n Null values produce null values, and the next value starts a new session.\r\n *`Expr`* must be a scalar expression of type `datetime`.\r\n* *`MaxDistanceFromFirst`* establishes one criterion for starting a new session:\r\n The maximum distance between the current value of *`Expr`* and the value of\r\n *`Expr`* at the beginning of the session.\r\n It's a scalar constant of type `timespan`.\r\n* *`MaxDistanceBetweenNeighbors`* establishes a second criterion for starting a new session:\r\n The maximum distance from one value of *`Expr`* to the next.\r\n It's a scalar constant of type `timespan`.\r\n* *Restart* is an optional scalar expression of type `boolean`. If specified,\r\n every value that evaluates to `true` will immediately restart the session.\r\n\r\n## Returns\r\n\r\nThe function returns the values at the beginning of each session.\r\n\r\nThe function has the following conceptual calculation model:\r\n\r\n1. Goes over the input sequence of *`Expr`* values in order.\r\n1. For every value, determines if it establishes a new session.\r\n1. If it establishes a new session, it emits the value of *`Expr`*. Otherwise, emits the previous value of *`Expr`*.\r\n\r\n>[!NOTE]\r\n>The condition that determines if the value represents a new session is a logical OR one of the following conditions:\r\n>\r\n>* If there was no previous session value, or the previous session value was null.\r\n>* If the value of *`Expr`* equals or exceeds the previous session value plus\r\n *`MaxDistanceFromFirst`*.\r\n>* If the value of *`Expr`* equals or exceeds the previous value of *`Expr`*\r\n plus *`MaxDistanceBetweenNeighbors`*.\r\n>* If *`Restart`* condition is specified and evaluates to `true`.",`The following example shows how to calculate the session start values for a table\r with two columns: an \`ID\` column that identifies a sequence, and a \`Timestamp\`\r column that gives the time at which each record occurred. In this example,\r a session can't exceed 1 hour, and it continues as long as records are less than\r 5 minutes apart.\r \r \`\`\`\r datatable (ID:string, Timestamp:datetime) [\r // ...\r ]\r | sort by ID asc, Timestamp asc\r | extend SessionStarted = row_window_session(Timestamp, 1h, 5m, ID != prev(ID))\r \`\`\`\r \r ## See also\r \r * [scan operator](scan-operator.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/row-window-session-function","row-window-session-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"rows_near","Finds rows near a specified condition.","The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.\r\n\r\n## Syntax\r\n\r\n*T* `| evaluate` `rows_near(`*Condition*`,` *NumRows*`,` [`,` *RowsAfter* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T*| string | ✓ | The input tabular expression.|\r\n| *Condition*| bool | ✓ | Represents the condition to find rows around.|\r\n| *NumRows*| int | ✓ | The number of rows to find before and after the condition.|\r\n| *RowsAfter*| int | | When specified, overrides the number of rows to find after the condition.|\r\n\r\n## Returns\r\n\r\nEvery row from the input that is within *NumRows* from a `true` *Condition*,\r\nWhen *RowsAfter* is specified, returns every row from the input that is *NumRows* before or *RowsAfter* after a `true` *Condition*.",`Find rows with an \`"Error"\` *State*, and returns \`2\` rows before and after the \`"Error"\` record.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA43SSwqDMBAG4L2nGFwppJDEVxVc9gSWbkopUYMIakoSWwo9fMdC3RRpklXIxwzM/K2weOtBQnDsR2msGG9FK6y0+CJwEsMsi0FNHYEKpSyM1f3UQeidPcDzpQGnnO1ouqMsJMAI+NXcNNIYn2w4ji52cBG6yMHFS1+XxskCEweYIuQOLlsK5ggPWiu9yfYLc6mXI8z+O0bR5Q6OuU2a8Z/NXbwXGKUt1E9Y4wHCNIAf8o7hwCKg1cNcJyl08IkIlOU6CuDhGzR1CNFiAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Timestamp:datetime, Value:long, State:string )\r [\r datetime(2021-06-01), 1, "Success",\r datetime(2021-06-02), 4, "Success",\r datetime(2021-06-03), 3, "Success",\r datetime(2021-06-04), 11, "Success",\r datetime(2021-06-05), 15, "Success",\r datetime(2021-06-06), 2, "Success",\r datetime(2021-06-07), 19, "Error",\r datetime(2021-06-08), 12, "Success",\r datetime(2021-06-09), 7, "Success",\r datetime(2021-06-10), 9, "Success",\r datetime(2021-06-11), 4, "Success",\r datetime(2021-06-12), 1, "Success",\r ]\r | sort by Timestamp asc \r | evaluate rows_near(State == "Error", 2)\r \`\`\`\r \r **Output**\r \r |Timestamp|Value|State|\r |---|---|---|\r |2021-06-05 00:00:00.0000000|15|Success|\r |2021-06-06 00:00:00.0000000|2|Success|\r |2021-06-07 00:00:00.0000000|19|Error|\r |2021-06-08 00:00:00.0000000|12|Success|\r |2021-06-09 00:00:00.0000000|7|Success|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/rows-near-plugin","rows-near-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"sample","Returns up to the specified number of random rows from the input table.",`> [!NOTE]\r >\r > * \`sample\` is geared for speed rather than even distribution of values. Specifically, it means that it will not produce 'fair' results if used after operators that union 2 data sets of different sizes (such as a \`union\` or \`join\` operators). It's recommended to use \`sample\` right after the table reference and filters.\r > * \`sample\` is a non-deterministic operator, and will return different result set each time it is evaluated during the query. For example, the following query yields two different rows (even if one would expect to return the same row twice).\r \r ## Syntax\r \r *T* \`| sample\` *NumberOfRows*\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T*| string | ✓ | The input tabular expression. |\r | *NumberOfRows*| int, long, or real | ✓ | The number of rows to return. You can specify any numeric expression.|`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVGIT0ksSVSwVShKzEtPVahQSCvKz1UwVCjJVzA0MFAoLkktUDC05soBqSxOzC3ISQWqheipUYAKAOVL8zLz8xQ0oEo0dRBMANt5ESNkAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let _data = range x from 1 to 100 step 1;\r let _sample = _data | sample 1;\r union (_sample), (_sample)\r \`\`\`\r \r **Output**\r \r | x |\r | --- |\r | 83 |\r | 3 |\r \r To ensure that in example above \`_sample\` is calculated once, one can use [materialize()](./materializefunction.md) function:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XLOwqAMBCE4d5TTJmARVIHzyILrhLIi2QFEQ+vYsBu4P8msGBeSAgTKqWNcWCtOcJCMqwxaMIF1g3hlY1iCfzYSMLVU/Anq+9/oUer3bAnnxNU93r85w3rZ9v0cQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let _data = range x from 1 to 100 step 1;\r let _sample = materialize(_data | sample 1);\r union (_sample), (_sample)\r \`\`\`\r \r **Output**\r \r | x |\r | --- |\r | 34 |\r | 34 |\r \r To sample a certain percentage of your data (rather than a specified number of rows), you can use\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRKM9ILUpVKErMS9HQVLBRMNAzBABGrj/0IAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | where rand() < 0.1\r \`\`\`\r \r To sample keys rather than rows (for example - sample 10 Ids and get all rows for these Ids) you can use [\`sample-distinct\`](./sampledistinctoperator.md) in combination with the \`in\` operator.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoTswtyEl1Lcgszk9JLVawVQguyS/KdS1LzSspVqiBSuumZBaXZOYllygYGijkpylAlXumWHMhKeeqUSjPSC1KRUgrZOYpaKDaoAkA08y7N3UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let sampleEpisodes = StormEvents | sample-distinct 10 of EpisodeId;\r StormEvents\r | where EpisodeId in (sampleEpisodes)\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sampleoperator","sampleoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"sample-distinct","Returns a single column that contains up to the specified number of distinct values of the requested column.",`The operator tries to return an answer as quickly as possible rather than trying to make a fair sample.\r \r ## Syntax\r \r *T* \`| sample-distinct\` *NumberOfValues* \`of\` *ColumnName*\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T*| string | ✓ | The input tabular expression. |\r | *NumberOfValues*| int, long, or real | ✓ | The number distinct values of *T* to return. You can specify any numeric expression.|\r | *ColumnName*| string | ✓ | The name of the column from which to sample.|\r \r > [!TIP]\r >\r > * Use the [top-hitters](tophittersoperator.md) operator to get the top values.\r > * Refer to the [sample operator](sampleoperator.md) to sample data rows.`,`Get 10 distinct values from a population\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRKE7MLchJ1U3JLC7JzEsuUTA0UMhPU3AtyCzOT0n1TAEAXIVALi0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | sample-distinct 10 of EpisodeId\r \`\`\`\r \r Sample a population and do further computation without exceeding the query limits in the summarize\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WNuw6CUBBEe75iSihIsDZ0UlDzBVfuGpfcB9ldNBo+Xk0waDlzTmYCGdTFOVA3s2ZPihaDZYndjZIp1g3XntU4jYZDg3zBpvf+WPzqxYr7lYR2Dk4o/y+qj6ZLjE74SbBsLvRpWoRJ23dffsOJhUarcH7sey97JpXgsgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let sampleEpisodes = StormEvents | sample-distinct 10 of EpisodeId;\r StormEvents \r | where EpisodeId in (sampleEpisodes) \r | summarize totalInjuries=sum(InjuriesDirect) by EpisodeId\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sampledistinctoperator","sampledistinctoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"scan","Scans data, matches, and builds sequences based on the predicates.",'Matching records are determined according to predicates defined in the operator\u2019s steps. A predicate can depend on the state that is generated by previous steps.\r\nThe output for the matching record is determined by the input record and assignments defined in the operator\'s steps.\r\n\r\nSteps are evaluated from last to first, according to the [scan logic](#scan-logic).\r\n\r\n```\r\nT\r\n| sort by Timestamp asc\r\n| scan with \r\n(\r\n step s1 output=last: Event == "Start";\r\n step s2: Event != "Start" and Event != "Stop" and Timestamp - s1.Timestamp <= 5m;\r\n step s3: Event == "Stop" and Ts - s1.Timestamp <= 5m;\r\n)\r\n```\r\n\r\n## Syntax\r\n\r\n*T* `| scan` [ `with_match_id` `=` *MatchIdColumnName* ] [ `declare` `(` *ColumnDeclarations* `)` ] `with` `(` *StepDefinitions* `)`\r\n\r\n### *ColumnDeclarations* syntax\r\n\r\n*ColumnName* `:` *ColumnType*[`=` *DefaultValue* ] [`,` ... ]\r\n\r\n### *StepDefinition* syntax\r\n\r\n`step` *StepName* [ `output` = `all` | `last` | `none`] `:` *Condition* [ `=>` *Column* `=` *Assignment* [`,` ... ] ] `;`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *MatchIdColumnName* | string | | The name of a column of type `long` that is appended to the output as part of the scan execution. Indicates the 0-based index of the match for the row. |\r\n| *ColumnDeclarations* | string | | Declares an extension to the schema of the operator\u2019s source. Additional columns are assigned in the steps or *DefaultValue* if not assigned. *DefaultValue* is `null` if not specified. |\r\n| *StepName* | string | ✓ | Used to reference values in the state of scan for conditions and assignments. The step name must be unique.|\r\n| *Condition* | string | ✓ | An expression that evaluates to a `bool`, `true` or `false`, that defines which records from the input matches the step. A record matches the step when the condition is `true` with the step\u2019s state or with the previous step\u2019s state.|\r\n| *Assignment* | string | | A scalar expression that is assigned to the corresponding column when a record matches a step.|\r\n| `output` | string | | Controls the output logic of the step on repeated matches. `all` outputs all records matching the step, `last` outputs only the last record in a series of repeating matches for the step, and `none` does not output records matching the step. The default is `all`.|\r\n\r\n## Returns\r\n\r\nA record for each match of a record from the input to a step. The schema of the output is the schema of the source extended with the column in the `declare` clause.',`### Cumulative sum\r \r Calculate the cumulative sum for an input column. The result of this example is equivalent to using [row_cumsum()](rowcumsumfunction.md).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NOwqAMBBE+5xiSkUQLWyUeBUJcf1ATCTZaAoPb7ByqmEej/HKroSExbsDLdihQ2A6cxcPglYWM2mjPKHQ8YhG8X7RlHrj7CqbEvfOG0QhkPOJoe3BPhLkiL8BmW+qjOv/OojyBSZSTeODAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1 \r | scan declare (cumulative_x:long=0) with \r (\r step s1: true => cumulative_x = x + s1.cumulative_x;\r )\r \`\`\`\r \r **Output**\r \r |x|cumulative_x|\r |---|---|\r |1|1|\r |2|3|\r |3|6|\r |4|10|\r |5|15|\r \r ### Cumulative sum on multiple columns with a reset condition\r \r Calculate the cumulative sum for two input column, reset the sum value to the current row value whenever the cumulative sum reached 10 or more.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22OQQrCMBBF9znFXzZaxAhuKulVJLSTWmhTSdKagIc3FIVo/fzVG+bNWGU6QoC20wgBP+EM5+kOwZ6g4Mm0iJA4YYeQkGuUQUvNoCyhaOZxHpTvF7qGaphMJ48lMhjfkOPR+xtYwZCy+p2o4O1MkHW+EdKtXuvCicMXrSVEcodU7PEz5SVW8Sb5K3/F8SOOqRtx5BfGX1hK/bgiAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | extend y = 2 * x\r | scan declare (cumulative_x:long=0, cumulative_y:long=0) with \r (\r step s1: true => cumulative_x = iff(s1.cumulative_x >= 10, x, x + s1.cumulative_x), \r cumulative_y = iff(s1.cumulative_y >= 10, y, y + s1.cumulative_y);\r )\r \`\`\`\r \r **Output**\r \r |x|y|cumulative_x|cumulative_y|\r |---|---|---|---|\r |1|2|1|2|\r |2|4|3|6|\r |3|6|6|12|\r |4|8|10|8|\r |5|10|5|18|\r \r ### Fill forward a column\r \r Fill forward a string column. Each empty value is assigned the last seen non-empty value.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA01Qy2rDMBC86ysGnSwwoW5DCAkuNI8/yK2EoNjrViC7xrtNCPTjK8sOaPcyo50dRutJcLxRJ4wStZXQV0/ITryBuJa4t10+KTZgGVz3ZfCpEOqlzaE/dB5JMZIZv454N5O3ZLBM8GrE+5msk0ERrQ5PFs20OqutmnKqP/DPILg+cGJYrsaHynaoqfJ2CNmj7tI476l+hi61Nrg7+YbKojEL9eAi/HL4JZTvSLfCLVzTZI6p7eUxGZo8yBepar6L2SrzD0ocTu9HAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Events = datatable (Ts: timespan, Event: string) [\r 0m, "A",\r 1m, "",\r 2m, "B",\r 3m, "",\r 4m, "",\r 6m, "C",\r 8m, "",\r 11m, "D",\r 12m, ""\r ]\r ;\r Events\r | sort by Ts asc\r | scan declare (Event_filled: string="") with \r (\r step s1: true => Event_filled = iff(isempty(Event), s1.Event_filled, Event);\r )\r \`\`\`\r \r **Output**\r \r |Ts|Event|Event_filled|\r |---|---|---|\r |00:00:00|A|A|\r |00:01:00||A|\r |00:02:00|B|B|\r |00:03:00||B|\r |00:04:00||B|\r |00:06:00|C|C|\r |00:08:00||C|\r |00:11:00|D|D|\r |00:12:00||D|\r \r ### Sessions tagging\r \r Divide the input into sessions: a session ends 30 minutes after the first event of the session, after which a new session starts. Note the use of \`with_match_id\` flag which assigns a unique value for each distinct match (session) of *scan*. Also note the special use of two *steps* in this example, \`inSession\` has \`true\` as condition so it captures and outputs all the records from the input while \`endSession\` captures records that happen more than 30m from the \`sessionStart\` value for the current match. The \`endSession\` step has \`output=none\` meaning it doesn't produce output records. The \`endSession\` step is used to advance the state of the current match from \`inSession\` to \`endSession\`, allowing a new match (session) to begin, starting from the current record.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WQy2rDMBBF9/qKS1Y2qCVt+sLGgT7yBcmulKDYSiOQZaMZtxT68ZVsp3EWkTY6M/fOQ1YzVl/aMaFApTjcndVINpSBTa2pVU4OigzE3rjPFO8C4cxridnzTPZwM4XbCC8jLCK8HeE89RDp9UhPU+VdX3E10uP9UF98iFwM84pfUOMZux9sCIrKGCiVw7fhw7ZWXB62pipIE5nGhScqXVrlw3JjbM3K82nNtHdCJH1HYt3CuPUgDSrfaRRLTL3hy8x+nxhynbXJv/h6qkllGE/iQjI/9dKuGiVoOm47LlzjdBaXu7pgxxKLeZ2L9A9Yk5hPxgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let Events = datatable (Ts: timespan, Event: string) [\r 0m, "A",\r 1m, "A",\r 2m, "B",\r 3m, "D",\r 32m, "B",\r 36m, "C",\r 38m, "D",\r 41m, "E",\r 75m, "A"\r ]\r ;\r Events\r | sort by Ts asc\r | scan with_match_id=session_id declare (sessionStart: timespan) with \r (\r step inSession: true => sessionStart = iff(isnull(inSession.sessionStart), Ts, inSession.sessionStart);\r step endSession output=none: Ts - inSession.sessionStart > 30m;\r )\r \`\`\`\r \r **Output**\r \r |Ts|Event|sessionStart|session_id|\r |---|---|---|---|\r |00:00:00|A|00:00:00|0|\r |00:01:00|A|00:00:00|0|\r |00:02:00|B|00:00:00|0|\r |00:03:00|D|00:00:00|0|\r |00:32:00|B|00:32:00|1|\r |00:36:00|C|00:32:00|1|\r |00:38:00|D|00:32:00|1|\r |00:41:00|E|00:32:00|1|\r |01:15:00|A|01:15:00|2|\r \r ### Events between Start and Stop\r \r Find all sequences of events between the event \`Start\` and the event \`Stop\` that occur within 5 minutes. Assign a match ID for each sequence.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WPYWvCMBCGv+dXvPOTQidr3cZozYc5/QX6TYbENsxCE0vvcAj+eJM0FR0sgRzPe3fvXRrNWJ20ZYJEpdjdfaMx3lAOro2mVtmkr8hB3NX2Z4KtgDsvJsHoc5QESD2sWXUchcwLiwgzD8sIr33psY387vkrwsdfnzQ4rwbKbs3iWxSiX11cQMeOsT9jQ1BUeqFUFr81H3ZGcXnY1ZU07gkSxDi4EesWlOb9/yDlMLq4S2dD+umWhrLVg+jWCZqb/uwMpy7OJd7Mvc/sccz/LZMrJ20JNJQBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let Events = datatable (Ts: timespan, Event: string) [\r 0m, "A",\r 1m, "Start",\r 2m, "B",\r 3m, "D",\r 4m, "Stop",\r 6m, "C",\r 8m, "Start",\r 11m, "E",\r 12m, "Stop"\r ]\r ;\r Events\r | sort by Ts asc\r | scan with_match_id=m_id with \r (\r step s1: Event == "Start";\r step s2: Event != "Start" and Event != "Stop" and Ts - s1.Ts <= 5m;\r step s3: Event == "Stop" and Ts - s1.Ts <= 5m;\r )\r \`\`\`\r \r **Output**\r \r |Ts|Event|m_id|\r |---|---|---|\r |00:01:00|Start|0|\r |00:02:00|B|0|\r |00:03:00|D|0|\r |00:04:00|Stop|0|\r |00:08:00|Start|1|\r |00:11:00|E|1|\r |00:12:00|Stop|1|\r \r ### Calculate a custom funnel of events\r \r Calculate a funnel completion of the sequence \`Hail\` -> \`Tornado\` -> \`Thunderstorm Wind\` by \`State\` with custom thresholds on the times between the events (\`Tornado\` within \`1h\` and \`Thunderstorm Wind\` within \`2h\`). This example is similar to the [funnel_sequence_completion plugin](funnel-sequence-completion-plugin.md), but allows greater flexibility.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VQsa7CMBDb+QqrEwwgPUZ4HZHYqcR8NNHLSfRSJVeeivh40lBBgQw32D774oP60OwuVjTObmgpKCt7gWPRVdRAav/6Ukj5YnHqcdCEYIb05nlGH3QkglbcWFCsM3NDrEnwz+qmC3lJbQtHfN4gZ1d9a1GWKPYJK7bvunShkPGf0uoBFyAxk/Rl9l29gN8SP+7T0nVibIjD548s5st7wmMQfKeMV70HrcegxThTBV3TUOCrhal9JzrPBS6Gxp6RdzkEW8CEAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | partition hint.strategy=native by State \r (\r sort by StartTime asc\r | scan with \r (\r step hail: EventType == "Hail";\r step tornado: EventType == "Tornado" and StartTime - hail.StartTime <= 1h;\r step thunderstormWind: EventType == "Thunderstorm Wind" and StartTime - tornado.StartTime <= 2h;\r )\r )\r | summarize dcount(State) by EventType\r \`\`\`\r \r **Output**\r \r |EventType|dcount_State|\r |---|---|\r |Hail|50|\r |Tornado|34|\r |Thunderstorm Wind|32|\r \r ## Scan logic\r \r \`scan\` goes over the serialized input data, record by record, comparing each record against each step\u2019s condition while taking into account the current state of each step.\r \r ### Scan's state\r \r The state that is used behind the scenes by \`scan\` is a set of records, with the same schema of the output, including source and declared columns.\r Each step has its own state, the state of step *k* has *k* records in it, where each record in the step\u2019s state corresponds to a step up to *k*.\r \r For example, if a scan operator has *n* steps named *s_1*, *s_2*, ..., *s_n* then step *s_k* would have *k* records in its state corresponding to *s_1*, *s_2*, ..., *s_k*.\r Referencing a value in the state is done in the form *StepName*.*ColumnName*. For example, \`s_2.col1\` references column \`col1\` that belongs to step *s_2* in the state of *s_k*.\r \r ### Matching logic\r \r Each record from the input is evaluated against all of scan\u2019s steps, starting from last to first. When a record *r* is considered against some step *s_k*, the following logic is applied:\r \r * If the state of the previous step isn't empty and the record *r* satisfies the condition of *s_k* using the state of the previous step *s_(k-1)*, then the following happens:\r 1. The state of *s_k* is deleted.\r 1. The state of *s_(k-1)* becomes ("promoted" to be) the state of *s_k*, and the state of *s_(k-1)* becomes empty.\r 1. All the assignments of *s_k* are calculated and extend *r*.\r 1. The extended *r* is added to the output (if *s_k* is defined as \`output=all\`) and to the state of *s_k*.\r * If *r* doesn't satisfy the condition of *s_k* with the state of *s_(k-1)*, *r* is then checked with the state of *s_k*. If *r* satisfies the condition of *s_k* with the state of *s_k*, the following happens:\r 1. The record *r* is extended with the assignments of *s_k*.\r 1. If *s_k* is defined as \`output=all\`, the extended record r is added to the output.\r 1. The last record in the state of *s_k* (which represents *s_k* itself in the state) is replaced by the extended record *r*.\r 1. Whenever the first step is matched while its state is empty, a new match begins and the match ID is increased by \`1\`. This only affects the output when \`with_match_id\` is used.\r * If r doesn't satisfy the condition *s_k* with the state *s_k*, evaluate *r* against condition *s_k-1* and repeat the logic above.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/scan-operator","scan-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"schema_merge","Merges tabular schema definitions into a unified schema.","Schema definitions are expected to be in the format produced by the [`getschema`](./getschemaoperator.md) operator.\r\n\r\nThe `schema merge` operation joins columns in input schemas and tries to reduce\r\ndata types to common ones. If data types can't be reduced, an error is displayed on the problematic column.\r\n\r\nThe plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.\r\n\r\n## Syntax\r\n\r\n`T` `|` `evaluate` `schema_merge(`*PreserveOrder*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *PreserveOrder* | bool | | When set to `true`, directs the plugin to validate the column order as defined by the first tabular schema that is kept. If the same column is in several schemas, the column ordinal must be like the column ordinal of the first schema that it appeared in. Default value is `true`.|\r\n\r\n## Returns\r\n\r\nThe `schema_merge` plugin returns output similar to what [`getschema`](./getschemaoperator.md) operator returns.",`Merge with a schema that has a new column appended.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoTs5IzU00VLBVSEksAcKknFSN0KJMq+KSosy8dB0Fj5KSgmCgRGmxVWZeiWZ0rEKNQnpqCUSbNVcO3AgjIo3QUQhKTUstKkotgirAMLM0LzM/D+YwHbjxNQqpZYk5pYklqVCh+NzUovRUDU0ALOh/occAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let schema1 = datatable(Uri:string, HttpStatus:int)[] | getschema;\r let schema2 = datatable(Uri:string, HttpStatus:int, Referrer:string)[] | getschema;\r union schema1, schema2 | evaluate schema_merge()\r \`\`\`\r \r **Output**\r \r |ColumnName | ColumnOrdinal | DataType | ColumnType|\r |---|---|---|---|\r |Uri|0|System.String|string|\r |HttpStatus|1|System.Int32|int|\r |Referrer|2|System.String|string|\r \r Merge with a schema that has different column ordering (\`HttpStatus\` ordinal changes from \`1\` to \`2\` in the new variant).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoTs5IzU00VLBVSEksAcKknFSN0KJMq+KSosy8dB0Fj5KSgmCgRGmxVWZeiWZ0rEKNQnpqCUSbNVcO3AgjnEYEpaalFhWlFhFrZmleZn4ezGE6cONrFFLLEnNKE0tSoULxualF6akamgBdra59xwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let schema1 = datatable(Uri:string, HttpStatus:int)[] | getschema;\r let schema2 = datatable(Uri:string, Referrer:string, HttpStatus:int)[] | getschema;\r union schema1, schema2 | evaluate schema_merge()\r \`\`\`\r \r **Output**\r \r |ColumnName | ColumnOrdinal | DataType | ColumnType|\r |---|---|---|---|\r |Uri|0|System.String|string|\r |Referrer|1|System.String|string|\r |HttpStatus|-1|ERROR(unknown CSL type:ERROR(columns are out of order))|ERROR(columns are out of order)|\r \r Merge with a schema that has different column ordering, but with \`PreserveOrder\` set to \`false\`.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42OsQrCQBBEe79iywTSaBmxt1MUKxHZmMl5cLnI7l6qfHwO1HSCTDfDPF6AkT6e6HlNO2rZcpqA4iK+VhMfXUV7s9c5D0lrH6283mgiB3vftquwIDY/ESd0EIH8y0zRD/ErVi34iTBySGz4VPce4lAcBQoZcZAWkiU6DopyBn2W6PrcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let schema1 = datatable(Uri:string, HttpStatus:int)[] | getschema;\r let schema2 = datatable(Uri:string, Referrer:string, HttpStatus:int)[] | getschema;\r union schema1, schema2 | evaluate schema_merge(PreserveOrder = false)\r \`\`\`\r \r **Output**\r \r |ColumnName | ColumnOrdinal | DataType | ColumnType|\r |---|---|---|---|\r |Uri|0|System.String|string\r |Referrer|1|System.String|string\r |HttpStatus|2|System.Int32|int|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/schemamergeplugin","schemamergeplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"search","Searches a text pattern in multiple tables and columns.",'> [!NOTE]\r\n> If you know the specific tables and columns you want to search, it\'s more performant to use the [union](unionoperator.md) and [where](whereoperator.md) operators. The `search` operator can be slow when searching across a large number of tables and columns.\r\n\r\n## Syntax\r\n\r\n[*T* `|`] `search` [`kind=` *CaseSensitivity* ] [`in` `(`*TableSources*`)`] *SearchPredicate*\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | | The tabular data source to be searched over, such as a table name, a [union operator](unionoperator.md), or the results of a tabular query. Cannot appear together with *TableSources*.|\r\n| *CaseSensitivity* | string | | A flag that controls the behavior of all `string` scalar operators, such as `has`, with respect to case sensitivity. Valid values are `default`, `case_insensitive`, `case_sensitive`. The options `default` and `case_insensitive` are synonymous, since the default behavior is case insensitive.|\r\n| *TableSources* | string | | A comma-separated list of "wildcarded" table names to take part in the search. The list has the same syntax as the list of the [union operator](unionoperator.md). Cannot appear together with *TabularSource*.|\r\n| *SearchPredicate* | string | ✓ | A boolean expression to be evaluated for every record in the input. If it returns `true`, the record is outputted. See [Search predicate syntax](#search-predicate-syntax).|\r\n\r\n### Search predicate syntax\r\n\r\nThe *SearchPredicate* allows you to search for specific terms in all columns of a table. The operator that will be applied to a search term depends on the presence and placement of a wildcard asterisk (`*`) in the term, as shown in the following table.\r\n\r\n|Literal |Operator |\r\n|----------|-----------|\r\n|`billg` |`has` |\r\n|`*billg` |`hassuffix`|\r\n|`billg*` |`hasprefix`|\r\n|`*billg*` |`contains` |\r\n|`bi*lg` |`matches regex`|\r\n\r\nYou can also restrict the search to a specific column, look for an exact match instead of a term match, or search by regular expression. The syntax for each of these cases is shown in the following table.\r\n\r\n|Syntax|Explanation|\r\n|--|--|\r\n|*ColumnName*`:`*StringLiteral* | This syntax can be used to restrict the search to a specific column. The default behavior is to search all columns. |\r\n|*ColumnName*`==`*StringLiteral* | This syntax can be used to search for exact matches of a column against a string value. The default behavior is to look for a term-match.|\r\n| *Column* `matches regex` *StringLiteral* | This syntax indicates regular expression matching, in which *StringLiteral* is the regex pattern.|\r\n\r\nUse boolean expressions to combine conditions and create more complex searches. For example, `"error" and x==123` would result in a search for records that have the term `error` in any columns and the value `123` in the `x` column.\r\n\r\n> [!NOTE]\r\n> If both *TabularSource* and *TableSources* are omitted, the search is carried over all unrestricted tables and views of the database in scope.\r\n\r\n### Search predicate syntax examples\r\n\r\n|# |Syntax |Meaning (equivalent `where`) |Comments|\r\n |--|---------------------------------------|---------------------------------------|--------|\r\n | 1|`search "err"` |`where * has "err"` ||\r\n | 2|`search in (T1,T2,A*) "err"` |<code>union T1,T2,A* | where * has "err"<code> ||\r\n | 3|`search col:"err"` |`where col has "err"` ||\r\n | 4|`search col=="err"` |`where col=="err"` ||\r\n | 5|`search "err*"` |`where * hasprefix "err"` ||\r\n | 6|`search "*err"` |`where * hassuffix "err"` ||\r\n | 7|`search "*err*"` |`where * contains "err"` ||\r\n | 8|`search "Lab*PC"` |`where * matches regex @"\\bLab.*PC\\b"`||\r\n | 9|`search *` |`where 0==0` ||\r\n |10|`search col matches regex "..."` |`where col matches regex "..."` ||\r\n |11|`search kind=case_sensitive` | |All string comparisons are case-sensitive|\r\n |12|`search "abc" and ("def" or "hij")` |`where * has "abc" and (* has "def" or * has hij")`||\r\n |13|`search "err" or (A>a and A<b)` |`where * has "err" or (A>a and A<b)` ||\r\n\r\n## Remarks\r\n\r\nUnlike the [find operator](findoperator.md), the `search` operator does not support the following:\r\n\r\n1. `withsource=`: The output will always include a column called `$table` of type `string` whose value\r\n is the table name from which each record was retrieved (or some system-generated name if the source\r\n isn\'t a table but a composite expression).\r\n2. `project=`, `project-smart`: The output schema is equivalent to `project-smart` output schema.',`### Global term search\r \r Search for a term over all unrestricted tables and views of the database in scope.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAAytOTSxKzlBQci9KTc1TAgAhG1rADgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r search "Green"\r \`\`\`\r \r The output contains records from the \`Customers\`, \`Products\`, and \`SalesTable\` tables. The \`Customers\` records shows all customers with the last name "Green", and the \`Products\` and \`SalesTable\` records shows products with some mention of "Green".\r \r ### Conditional global term search\r \r Search for records that match both terms over all unrestricted tables and views of the database in scope.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAAytOTSxKzlBQci9KTc1TUkjMS1HQUHJJzSmtSFVSyC9SUAooyi9OLU8sSlXSBADUfdV9LAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r search "Green" and ("Deluxe" or "Proseware")\r \`\`\`\r \r ### Search a specific table\r \r Search only in the \`Customers\` table.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAAytOTSxKzlDIzFPQCCjKTylNLinWVFByL0pNzVMCAAJBkngcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r search in (Products) "Green"\r \`\`\`\r \r ### Case-sensitive search\r \r Search for records that match both case-sensitive terms over all unrestricted tables and views of the database in scope.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAAytOTSxKzlDIzsxLsU1OLE6NL07NK84sySxLVVBKyilNVQIAA9DDEiEAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r search kind=case_sensitive "blue"\r \`\`\`\r \r ### Search specific columns\r \r Search for a term in the "FirstName" and "LastName" columns over all unrestricted tables and views of the database in scope.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAAytOTSxKzlBwyywqLvFLzE21UnJMLMrPU1LIL1LwSYSJeZSmZ6QWKwEA/CSSXi0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r search FirstName:"Aaron" or LastName:"Hughes"\r \`\`\`\r \r ### Limit search by timestamp\r \r Search for a term over all unrestricted tables and views of the database in scope if the term appears in a record with a date greater than the given date.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/ContosoSales?query=H4sIAAAAAAAAAytOTSxKzlBQ8ihNz0gtVlJIzEtRcEksSfVOrVSwU0gBskoyc1M11I0MDCx1DQyBSF0TAMIgQA00AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r search "Hughes" and DateKey > datetime('2009-01-01')\r \`\`\`\r \r ## Performance Tips\r \r |#|Tip|Prefer|Over|\r |--|--|--|--|\r | 1| Prefer to use a single \`search\` operator over several consecutive \`search\` operators|\`search "billg" and ("steveb" or "satyan")\` |<code>search "billg" | search "steveb" or "satyan"<code>|\r | 2| Prefer to filter inside the \`search\` operator |\`search "billg" and "steveb"\` |<code>search * | where * has "billg" and * has "steveb"<code> |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/searchoperator","searchoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sequence_detect","Detects sequence occurrences based on provided predicates. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*T* `| evaluate` `sequence_detect` `(`*TimelineColumn*`,` *MaxSequenceStepWindow*`,` *MaxSequenceSpan*`,` *Expr1*`,` *Expr2*`,` ..., *Dim1*`,` *Dim2*`,` ...`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T*| string | ✓ | The input tabular expression.|\r\n| *TimelineColumn*| string | ✓ | The column reference representing timeline, must be present in the source expression.|\r\n| *MaxSequenceStepWindow*| timespan | ✓ | The value of the max allowed timespan between 2 sequential steps in the sequence.|\r\n| *MaxSequenceSpan*| timespan | ✓ | The max timespan for the sequence to complete all steps.|\r\n| *Expr1*, *Expr2*, ...| string | ✓ | The boolean predicate expressions defining sequence steps.|\r\n| *Dim1*, *Dim2*, ...| string | ✓ | The dimension expressions that are used to correlate sequences.|\r\n\r\n## Returns\r\n\r\nReturns a single table where each row in the table represents a single sequence occurrence:\r\n\r\n* *Dim1*, *Dim2*, ...: dimension columns that were used to correlate sequences.\r\n* *Expr1*_*TimelineColumn*, *Expr2*_*TimelineColumn*, ...: Columns with time values, representing the timeline of each sequence step.\r\n* *Duration*: the overall sequence time window",`The following query looks at the table T to search for relevant data from a specified time period.\r \r \`\`\`\r T | evaluate sequence_detect(datetime_column, 10m, 1h, e1 = (Col1 == 'Val'), e2 = (Col2 == 'Val2'), Dim1, Dim2)\r \`\`\`\r \r ### Exploring Storm Events\r \r The following query looks on the table StormEvents (weather statistics for 2007) and shows cases where sequence of 'Excessive Heat' was followed by 'Wildfire' within 5 days.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WPMQuDMBCFd3/F4aJCilPHjEJ3BccSklcaMNaaM7XQH99QXAz1xnvfx7tr+TG7JmBkn30IQQ2LYpDHc8GocTVgaC4z2k/LaubOOog0ORtBVNfkGRM5tZ44UofQVnMI3qFYlr/7uvcEkpLyZtXw3gbQJaZ5JSi1XnYwNzsjMYt+2xd/nPgR7+qrLywAQRgbAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | evaluate sequence_detect(\r StartTime,\r 5d, // step max-time\r 5d, // sequence max-time\r heat=(EventType == "Excessive Heat"), \r wildfire=(EventType == 'Wildfire'), \r State\r )\r \`\`\`\r \r **Output**\r \r |State|heat_StartTime|wildfire_StartTime|Duration|\r |---|---|---|---|\r |CALIFORNIA|2007-05-08 00:00:00.0000000|2007-05-08 16:02:00.0000000|16:02:00|\r |CALIFORNIA|2007-05-08 00:00:00.0000000|2007-05-10 11:30:00.0000000|2.11:30:00|\r |CALIFORNIA|2007-07-04 09:00:00.0000000|2007-07-05 23:01:00.0000000|1.14:01:00|\r |SOUTH DAKOTA|2007-07-23 12:00:00.0000000|2007-07-27 09:00:00.0000000|3.21:00:00|\r |TEXAS|2007-08-10 08:00:00.0000000|2007-08-11 13:56:00.0000000|1.05:56:00|\r |CALIFORNIA|2007-08-31 08:00:00.0000000|2007-09-01 11:28:00.0000000|1.03:28:00|\r |CALIFORNIA|2007-08-31 08:00:00.0000000|2007-09-02 13:30:00.0000000|2.05:30:00|\r |CALIFORNIA|2007-09-02 12:00:00.0000000|2007-09-02 13:30:00.0000000|01:30:00|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sequence-detect-plugin","sequence-detect-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"serialize","Marks that the order of the input row set is safe to use for window functions.",`The operator has a declarative meaning. It marks the input row set as serialized (ordered), so that [window functions](./windowsfunctions.md) can be applied to it.\r \r ## Syntax\r \r \`serialize\` [*Name1* \`=\` *Expr1* [\`,\` *Name2* \`=\` *Expr2*]...]\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *Name* | string | | The name of the column to add or update. If omitted, the output column name will be automatically generated. |\r | *Expr* | string | ✓ | The calculation to perform over the input.|`,`### Serialize subset of rows by condition\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleLogs?query=H4sIAAAAAAAAAwspSkxO9clPL+blqlEoz0gtSlVwzslMzSsJSi0sTS0u8UxRsLVVUDJNtDCxSDM30LW0tDTTTU0yNNc1NE1N0TUyTLJITbI0SUozSFUCGVGcWpSZmJNZlQoAv59YuFkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r TraceLogs\r | where ClientRequestId == "5a848f70-9996-eb17-15ed-21b8eb94bf0e"\r | serialize\r \`\`\`\r \r ### Add row number to the serialized table\r \r To add a row number to the serialized table, use the [row_number()](rownumberfunction.md) function.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/SampleLogs?query=H4sIAAAAAAAAAwspSkxO9clPL+blqlEoScxOVTA0AADDD5pUFAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r TraceLogs\r | where ClientRequestId == "5a848f70-9996-eb17-15ed-21b8eb94bf0e"\r | serialize rn = row_number()\r \`\`\`\r \r ## Serialization behavior of operators\r \r The output row set of the following operators is marked as serialized.\r \r * [getschema](./getschemaoperator.md)\r * [range](./rangeoperator.md)\r * [sort](./sort-operator.md)\r * [top](./topoperator.md)\r * [top-hitters](./tophittersoperator.md)\r \r \r The output row set of the following operators is marked as non-serialized.\r \r * [count](./countoperator.md)\r * [distinct](./distinctoperator.md)\r * [evaluate](./evaluateoperator.md)\r * [facet](./facetoperator.md)\r * [join](./joinoperator.md)\r * [make-series](./make-seriesoperator.md)\r * [mv-expand](./mvexpandoperator.md)\r * [reduce by](./reduceoperator.md)\r * [sample](./sampleoperator.md)\r * [sample-distinct](./sampledistinctoperator.md)\r * [summarize](./summarizeoperator.md)\r * [top-nested](./topnestedoperator.md)\r \r \r All other operators preserve the serialization property. If the input row set is serialized, then the output row set is also serialized.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/serializeoperator","serializeoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_abs","Calculates the element-wise absolute value of the numeric series input.",`## Syntax\r \r \`series_abs(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the absolute value function is applied. |\r \r ## Returns\r \r Dynamic array of calculated absolute value. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY10zPVMdCx0DOK1eSqUUitKEnNSwEpik9MKgYqLE4tykwtBnE0gIKaAGEU39tEAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-6.5,0,8.2])\r | extend arr_abs = series_abs(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_abs|\r |---|---|\r |[-6.5,0,8.2]|[6.5,0,8.2]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-absfunction","series-absfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_acos","Calculates the element-wise arccosine function of the numeric series input.",`## Syntax\r \r \`series_acos(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the arccosine function is applied. |\r \r ## Returns\r \r Dynamic array of calculated arccosine function values. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY11DHQMYzV5KpRSK0oSc1LASmIT0zOLwaqKk4tykwtBvM0gMKaALhJgmxCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-1,0,1])\r | extend arr_acos = series_acos(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_acos|\r |---|---|\r |[-6.5,0,8.2]|[3.1415926535897931,1.5707963267948966,0.0]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-acosfunction","series-acosfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_add","Calculates the element-wise addition of two numeric series inputs.",`## Syntax\r \r \`series_add(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1, series2* | dynamic | ✓ | The numeric arrays to be element-wise added into a dynamic array result. |\r \r ## Returns\r \r Dynamic array of calculated element-wise add operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1XMwQrCMBAE0LtfMcdGctl69lvC0qyiYhN2c0iCH99UhOJxHjOjvN4FFTdNbxBKwgVWJINOH0gtskY0XEfjjPmgPqj9KGt6ylJgNDDz8gqsym2qvvnuPGz+9+7RPKo73owCxxi+RRN9iO15MtrHbgM/wNkBowAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | project s1 = pack_array(x,y,z), s2 = pack_array(z, y, x)\r | extend s1_add_s2 = series_add(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_add_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[5,4,5]|\r |[2,4,8]|[8,4,2]|[10,8,10]|\r |[3,6,12]|[12,6,3]|[15,12,15]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-addfunction","series-addfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_asin","Calculates the element-wise arcsine function of the numeric series input.",`## Syntax\r \r \`series_asin(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the arcsine function is applied. |\r \r ## Returns\r \r Dynamic array of calculated arcsine function values. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY11DHQMYzV5KpRSK0oSc1LASmITyzOzAOqKk4tykwtBvM0gMKaAOO+/MVCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-1,0,1])\r | extend arr_asin = series_asin(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_asin|\r |---|---|\r |[-6.5,0,8.2]|[1.5707963267948966,0.0,1.5707963267948966]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-asinfunction","series-asinfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_atan","Calculates the element-wise arctangent function of the numeric series input.",`## Syntax\r \r \`series_atan(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the arctangent function is applied. |\r \r ## Returns\r \r Dynamic array of calculated arctangent function values. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY11DHQMYzV5KpRSK0oSc1LASmITyxJzAOqKk4tykwtBvM0gMKaAKvO/bxCAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-1,0,1])\r | extend arr_atan = series_atan(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_atan|\r |---|---|\r |[-6.5,0,8.2]|[-0.78539816339744828,0.0,0.78539816339744828]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-atanfunction","series-atanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_ceiling","Calculates the element-wise ceiling function of the numeric series input.",`## Syntax\r \r \`series_ceiling(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the ceiling function is applied. |\r \r ## Returns\r \r Dynamic array of the calculated ceiling function. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShWsFVIqcxLzM1M1ojWNdQz1THUMdIzjdXkqlFIrShJzUtRKI5PTs3MycxLByotTi3KTIULaBRrAgCQd2nZRgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print s = dynamic([-1.5,1,2.5])\r | extend s_ceiling = series_ceiling(s)\r \`\`\`\r \r **Output**\r \r |s|s_ceiling|\r |---|---|\r |[-1.5,1,2.5]|[-1.0,1.0,3.0]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-ceiling-function","series-ceiling-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_cos","Calculates the element-wise cosine function of the numeric series input.",`## Syntax\r \r \`series_cos(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the cosine function is applied. |\r \r ## Returns\r \r Dynamic array of calculated cosine function values. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY11DHQMYzV5KpRSK0oSc1LASmIT84vBioqTi3KTC0GcTSAgpoASCWUy0AAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-1,0,1])\r | extend arr_cos = series_cos(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_cos|\r |---|---|\r |[-6.5,0,8.2]|[0.54030230586813976,1.0,0.54030230586813976]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-cosfunction","series-cosfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_decompose","Applies a decomposition transformation on a series.",`Takes an expression containing a series (dynamic numerical array) as input and decomposes it to seasonal, trend, and residual components.\r \r ## Syntax\r \r \`series_decompose(\`*Series* \`,\` [ *Seasonality*\`,\` *Trend*\`,\` *Test_points*\`,\` *Seasonality_threshold* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*Series*| dynamic | ✓ | An array of numeric values, typically the resulting output of [make-series](make-seriesoperator.md) or [make_list](makelist-aggfunction.md) operators.|\r |*Seasonality*|int|| Controls the seasonal analysis. The possible values are:<br/><br/>- \`-1\`: Autodetect seasonality using [series_periods_detect](series-periods-detectfunction.md). This is the default value.<br/>- Period: A positive integer specifying the expected period in number of bins. For example, if the series is in \`1 - h\` bins, a weekly period is 168 bins.<br/>- \`0\`: No seasonality, so skip extracting this component.|\r |*Trend*|string|| Controls the trend analysis. The possible values are:<br/><br/>- \`avg\`: Define trend component as \`average(x)\`. This is the default.<br/>- \`linefit\`: Extract trend component using linear regression.<br/>- \`none\`: No trend, so skip extracting this component.<br/>\r |*Test_points*|int|| A positive integer specifying the number of points at the end of the series to exclude from the learning, or regression, process. This parameter should be set for forecasting purposes. The default value is 0.|\r |*Seasonality_threshold*|real|| The threshold for seasonality score when *Seasonality* is set to autodetect. The default score threshold is 0.6.<br/><br/>For more information, see [series_periods_detect](series-periods-detectfunction.md).|\r \r ## Returns\r \r The function returns the following respective series:\r \r * \`baseline\`: the predicted value of the series (sum of seasonal and trend components, see below).\r * \`seasonal\`: the series of the seasonal component:\r * if the period isn't detected or is explicitly set to 0: constant 0.\r * if detected or set to positive integer: median of the series points in the same phase\r * \`trend\`: the series of the trend component.\r * \`residual\`: the series of the residual component (that is, x - baseline).\r \r \r >[!NOTE]\r > * Component execution order:\r >\r > 1. Extract the seasonal series\r > 1. Subtract it from x, generating the deseasonal series\r > 1. Extract the trend component from the deseasonal series\r > 1. Create the baseline = seasonal + trend\r > 1. Create the residual = x - baseline\r >\r > * Either seasonality and, or trend should be enabled. Otherwise, the function is redundant, and just returns baseline = 0 and residual = x.\r \r **More about series decomposition**\r \r This method is usually applied to time series of metrics expected to manifest periodic and/or trend behavior. You can use the method to forecast future metric values and/or detect anomalous values. The implicit assumption of this regression process is that apart from seasonal and trend behavior, the time series is stochastic and randomly distributed. Forecast future metric values from the seasonal and trend components while ignoring the residual part. Detect anomalous values based on outlier detection only on the residual part only. Further details can be found in the [Time Series Decomposition chapter](https://otexts.com/fpp2/decomposition.html).`,`### Weekly seasonality\r \r In the following example, we generate a series with weekly seasonality and without trend, we then add some outliers to it. \`series_decompose\` finds and automatically detects the seasonality, and generates a baseline that is almost identical to the seasonal component. The outliers we added can be clearly seen in the residuals component.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21QQW7CMBC884q9IDkpIXYgBbVyX9E7svACFnEc2Yuoqz6+m1ZADvhgzc5oZ1bTIQElHU1/RCA4xOBBAQVo1uWmbCERDkzMfgC/CHsLn85jIuMH0GANIfEsGqm2lVxVUoFs36Qs4AXUCUp2fGxm3mhKTrJi1N3hIATVzbqYbz50uwAll5L/dsnrFQgW5yzWShblBBdQ13DEHiOHg4GE0WGCq6MTXBHPXWbKpNCbzlGepOsxkLRWrYQQgVEjb2iz5eRcbccD8l+CsRZS8AjWDRAu1DmM6Ynb6u6xvqNXOdq8PHNLgzvj1C9dvDfRfeOjWO3NGXedSyTu3NgOv2KRJ2q+se8zSpOi/yvZWdwHP4SEIhcsRpaQ72PL/clE+gWepuS1+gEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose(y)\r | render timechart \r \`\`\`\r \r \r \r ### Weekly seasonality with trend\r \r In this example, we add a trend to the series from the previous example. First, we run \`series_decompose\` with the default parameters. The trend \`avg\` default value only takes the average and doesn't compute the trend. The generated baseline doesn't contain the trend. When observing the trend in the residuals, it becomes apparent that this example is less accurate than the previous example.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21RQW7CMBC884q5ICWBECeQBrVKX9E7ssgSLJI4shdRV318N6qAHPDBGs9oZ0fjjhjsa6eHlsA4OdsjB1sUu6RKSnimUYjFL+ibaWjwZXryrPsRNRrNxPKOCpXvU7VNVQ5VvisVY4X8jEQcn5NBJopENjXRpJvTKYo4K3bxsvqsyzXKjVojlztGiki0pWhZruJkhqdJzqpio5BlaGkgJyGg4ckZ8rgZPuNGdOmCUNrbQXeGA2Qr7NBaM7RgJ3FmueopCtd1XipYB0GFuqNqL6FCup+yhXjaqZsG3vaExoywV+4MOf/Cbfvw2D3Qm5psVq/c/GguNPfz177XzvzQs/K61xc6dMZz9OCkMiUnXoeZGu7sx4L97Av+Szo0dLT9aD1FIRZxqoMkn1gez9rxH0eeYfoUAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose(y)\r | render timechart \r \`\`\`\r \r \r Next, we rerun the same example. Since we're expecting a trend in the series, we specify \`linefit\` in the trend parameter. We can see that the positive trend is detected and the baseline is much closer to the input series. The residuals are close to zero, and only the outliers stand out. We can see all the components on the series in the chart.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21R0Y6CMBB89yvmxQgIUlBOcxfuK+7dNLJgI1DSrvG43MffkovKg31otrO7M5NpSwz2pdN9Q2DUznbIwBb5LtpHBTzTIMDiF/TN1Ff4Mh151t2AEpVmYnkHucoOidomKoMq3pUKsUZ2RiSMz81RNvJIlKpg6pu6DgJO81243H+WRYxio2JkcodIEEhvKb00U2E0q6dNTvf5RiFN0VBPTkxAw5Mz5HEzfMaN6NKOAmlve90aHiGqsH1jTd+AndiZ+SonK1yWWaFgHaTK1b3aH8TUmBwmb2M4aeqqgrcdoTID7JVbQ86/YNs+OHaP6k1NNOtXbH4wF5rz+WvXaWd+6Bl52ekLHVvjOXhgEpmSE8bjrDve0Y8F+9kX/Id0rOhku8F6mgaTLMaqNT3VhlehzE7pkNgVhdNZO/4DpkIQcyMCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose(y, -1, 'linefit')\r | render timechart \r \`\`\`\r \r \r \r ## See also\r \r * Visualize results with an [anomalychart](visualization-anomalychart.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-decomposefunction","series-decomposefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_decompose_anomalies",`Anomaly Detection is based on series decomposition.\r For more information, see [series_decompose()](series-decomposefunction.md).`,"The function takes an expression containing a series (dynamic numerical array) as input, and extracts anomalous points with scores.\r\n\r\n## Syntax\r\n\r\n`series_decompose_anomalies (`*Series*`,` [ *Threshold*`,` *Seasonality*`,` *Trend*`,` *Test_points*`,` *AD_method*`,` *Seasonality_threshold* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n|*Series*| dynamic | ✓ | An array of numeric values, typically the resulting output of [make-series](make-seriesoperator.md) or [make_list](makelist-aggfunction.md) operators.|\r\n|*Threshold*|real||The anomaly threshold. The default is 1.5, k value, for detecting mild or stronger anomalies.|\r\n|*Seasonality*|int|| Controls the seasonal analysis. The possible values are:<br/><br/>- `-1`: Autodetect seasonality using [series_periods_detect](series-periods-detectfunction.md). This is the default value.<br/>- Period: A positive integer specifying the expected period in number of bins. For example, if the series is in `1 - h` bins, a weekly period is 168 bins.<br/>- `0`: No seasonality, so skip extracting this component.|\r\n|*Trend*|string|| Controls the trend analysis. The possible values are:<br/><br/>- `avg`: Define trend component as `average(x)`. This is the default.<br/>- `linefit`: Extract trend component using linear regression.<br/>- `none`: No trend, so skip extracting this component.<br/>\r\n|*Test_points*|int|| A positive integer specifying the number of points at the end of the series to exclude from the learning, or regression, process. This parameter should be set for forecasting purposes. The default value is 0.|\r\n|*AD_method*|string||Controls the anomaly detection method on the residual time series, containing one of the following values:<br/><br/>- `ctukey`: [Tukey\u2019s fence test](https://en.wikipedia.org/wiki/Outlier#Tukey's_fences) with custom 10th-90th percentile range. This is the default.<br/>- `tukey`: [Tukey\u2019s fence test](https://en.wikipedia.org/wiki/Outlier#Tukey's_fences) with standard 25th-75th percentile range.<br/><br/>For more information on residual time series, see [series_outliers](series-outliersfunction.md).\r\n|*Seasonality_threshold*|real|| The threshold for seasonality score when *Seasonality* is set to autodetect. The default score threshold is 0.6.<br/><br/>For more information, see [series_periods_detect](series-periods-detectfunction.md).|\r\n\r\n## Returns\r\n\r\nThe function returns the following respective series:\r\n\r\n* `ad_flag`: A ternary series containing (+1, -1, 0) marking up/down/no anomaly respectively\r\n* `ad_score`: Anomaly score\r\n* `baseline`: The predicted value of the series, according to the decomposition\r\n\r\n## The algorithm\r\n\r\nThis function follows these steps:\r\n\r\n1. Calls [series_decompose()](series-decomposefunction.md) with the respective parameters, to create the baseline and residuals series.\r\n1. Calculates ad_score series by applying [series_outliers()](series-outliersfunction.md) with the chosen anomaly detection method on the residuals series.\r\n1. Calculates the ad_flag series by applying the threshold on the ad_score to mark up/down/no anomaly respectively.",`### Detect anomalies in weekly seasonality\r \r In the following example, generate a series with weekly seasonality, and then add some outliers to it. \`series_decompose_anomalies\` autodetects the seasonality and generates a baseline that captures the repetitive pattern. The outliers you added can be clearly spotted in the ad_score component.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21QQW7CMBC884q9IDkpIXYgBbVyX9E7svACFnEc2Yuoqz6+m1ZADvhgjWe8M6vpkICSjqY/IhAcYvCggAI063JTtpAIByZmP4BfhL2FT+cxkfEDaLCGkPgtGqm2lVxVUoFs36Qs4AXUCUp2fExmnmhKTrJi1N3hIATVzbqYbz50uwAll5LvdsnjFQgW5yzWShblBBdQ13DEHiOHg4GE0WGCq6MTXBHPXWbKpNCbzlGepOsxkLRWrYQQgVEjb2iz5eRcbccF8l+CsRZS8AjWDRAu1DmM6Ynb6u6xvqNXOdq8PHNLgzvj1C9dvDfRfeOjWO3NGXedSyTu3NgOn2KRJ2q+se8zSpOi/yvZWdwHP4SEO9MHz3VgErngb5E/IW/K5vuTifQLuaqurwQCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose_anomalies(y)\r | render timechart \r \`\`\`\r \r \r \r ### Detect anomalies in weekly seasonality with trend\r \r In this example, add a trend to the series from the previous example. First, run \`series_decompose_anomalies\` with the default parameters in which the trend \`avg\` default value only takes the average and doesn't compute the trend. The generated baseline doesn't contain the trend and is less exact, compared to the previous example. Consequently, some of the outliers you inserted in the data aren't detected because of the higher variance.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA41RwXKjMAy95yvepTNAk2JoaDLtsF+xd8ZbBPEEY8YWbd3Zj1/RblIOPZQDI0t6T09PAzE41F6PPYHReWdRgB3KfXbIKgSmSRKbv6A3prHFb2MpsLYTarSaieWdlKo47tT9ThVQ1aNSKW5RnJAJ4xcyCqLMZFKbLHXTdUnCeblPbw6/6mqL6k5tUcg/xQ6J1G6klhcqzVbxguT8UN4p5Dl6GsmLCGgE8oYCXg2f8Ep0HqKkdHCjHgxHyFS4sXdm7MFe5Kx01YsUruuiUnAeEpXqEh2OIirujou2mC4zddsiOEtozQQ382DIh2/Y7q8c+2v0oBaa2+/YwmTOtOYLs7Xam3f6sry2+kzNYAIn15xYpuRLt3FVjZfs04bD6gSfJjUtPTs7uUCNHp0VgygkMf1JWxMb3TbdoHs55uZ/n50HNtMQk0LW+gn2Y/MLCn+iiEUnDr2YMEvru2bjRkyzXwgWL5aDkTgoSz+ftOd/zGMKx7YCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose_anomalies(y)\r | extend series_decompose_anomalies_y_ad_flag = \r series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes\r | render timechart\r \`\`\`\r \r \r Next, run the same example, but since you're expecting a trend in the series, specify \`linefit\` in the trend parameter. You can see that the baseline is much closer to the input series. All the inserted outliers are detected, and also some false positives. See the next example on tweaking the threshold.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA41RwXKbMBC9+yveJRMgxghiak8z9Ct6Z9SwYI0RYqQlqTL9+C5p7fiQQ3TQrHb13r59OxKDQ+P1NBAYvXcWJdih2meHrEZgmiWx+QP6zTR1+GksBdZ2RoNOM7G8k0qVx1w95qqEqr8rleIB5QmZMH4goyCqTDp1yVo3fZ8kXFT79O7wo6m3qHdqi1LuFDkSqd1JrShVmt3EK5KLQ7VTKAoMNJEXEdAI5A0FvBo+4ZXoPEZJ6eAmPRqOkK5w0+DMNIC9yLnR1axSuGnKWsF5SFSpS3Q4iqiYH1dtMV176q5DcJbQmRlu4dGQD5+wPV459tfom1ppHj5jC7M50y1fWKzV3rzRh+WN1WdqRxM4uebEMiUn3cabarxknzYcblbwz6S2o2dnZxeo1ZOzYhCFd8hOtpCXW9yPZqLe8H36FWgbW921/agHWfDm/z+7jGzmMSaljPoV7LsbFxR+RRkAvbj2YsIiX980GzdhXvxKsPqzLpHEVTHi+aQ9/wVL2dxLygIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose_anomalies(y, 1.5, -1, 'linefit')\r | extend series_decompose_anomalies_y_ad_flag = \r series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes\r | render timechart \r \`\`\`\r \r \r \r ### Tweak the anomaly detection threshold\r \r A few noisy points were detected as anomalies in the previous example. Now increase the anomaly detection threshold from a default of 1.5 to 2.5. Use this interpercentile range, so that only stronger anomalies are detected. Now, only the outliers you inserted in the data, will be detected.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA41RTVPjMAy991fowpCEpnFCQzsw2V+x94whSuqpPzK2ApjZH7/yLi05cMAHjyz5PT09aSSg0HlpJwSC0TsDNZCDZl8cihYC4cyJzR/Ad0I7wG9lMJA0M3QwSELid9aI+liK+1LUINpHIXK4g/oEBTN+ISMjmoI7DVmqq3HMMqqafX5z+NW1W2h3Ygs13zmUkHHthmtVLfJiFSckVYdmJ6CqYEKLnkWAhIBeYYA3RSd4QzzryCkZnJVaUQTuCs7qySk7AXnWsxLWJS3UdXUrwHngqBGX6HBkVbE8JnExT03lMEBwBmFQM7iFtEIfvmG7v3Lsr9GDSDR337GFWZ1xzRcWY6RXH/jleWfkGXutAmXXHHsm+OTbuKrGS/ZpQ2G1g/8u9QO+ODO7gL20zrBDGBKk2fEaynoLt1pZHBXd5j+B9rGXQz9qOfGGN5//zKJJzTpmNY/6E+w/Ny4oeI48AIzs2qsKC3/9kKSchXnxiSD5k5aI7Cob8XKSnv4C5QDdI8sCAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*5 step 1 \r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);\r ts \r | extend series_decompose_anomalies(y, 2.5, -1, 'linefit')\r | extend series_decompose_anomalies_y_ad_flag = \r series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes\r | render timechart \r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-decompose-anomaliesfunction","series-decompose-anomaliesfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_decompose_forecast","Forecast based on series decomposition.","Takes an expression containing a series (dynamic numerical array) as input, and predicts the values of the last trailing points. For more information, see [series_decompose](series-decomposefunction.md).\r\n\r\n## Syntax\r\n\r\n`series_decompose_forecast(`*Series*`,` *Points*`,` [ *Seasonality*`,` *Trend*`,` *Seasonality_threshold* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n|*Series*| dynamic | ✓ | An array of numeric values, typically the resulting output of [make-series](make-seriesoperator.md) or [make_list](makelist-aggfunction.md) operators.|\r\n|*Points*|int|✓| Specifies the number of points at the end of the series to predict, or forecast. These points are excluded from the learning, or regression, process.|\r\n|*Seasonality*|int|| Controls the seasonal analysis. The possible values are:<br/><br/>- `-1`: Autodetect seasonality using [series_periods_detect](series-periods-detectfunction.md). This is the default value.<br/>- Period: A positive integer specifying the expected period in number of bins. For example, if the series is in `1 - h` bins, a weekly period is 168 bins.<br/>- `0`: No seasonality, so skip extracting this component.|\r\n|*Trend*|string|| Controls the trend analysis. The possible values are:<br/><br/>- `avg`: Define trend component as `average(x)`. This is the default.<br/>- `linefit`: Extract trend component using linear regression.<br/>- `none`: No trend, so skip extracting this component.<br/>\r\n|*Seasonality_threshold*|real|| The threshold for seasonality score when *Seasonality* is set to autodetect. The default score threshold is 0.6.<br/><br/>For more information, see [series_periods_detect](series-periods-detectfunction.md).|\r\n\r\n## Returns\r\n\r\nA dynamic array with the forecasted series.\r\n\r\n> [!NOTE]\r\n>\r\n> * The dynamic array of the original input series should include a number of *points* slots to be forecasted. The forecast is typically done by using [make-series](make-seriesoperator.md) and specifying the end time in the range that includes the timeframe to forecast.\r\n> * Either seasonality or trend should be enabled, otherwise the function is redundant, and just returns a series filled with zeroes.",`In the following example, we generate a series of four weeks in an hourly grain, with weekly seasonality and a small upward trend. We then use \`make-series\` and add another empty week to the series. \`series_decompose_forecast\` is called with a week (24*7 points), and it automatically detects the seasonality and trend, and generates a forecast of the entire five-week period.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA31S0W6jMBB871fMSyUgIRgKTXQn7ivuPbLCEqwARvZWKdJ9/K1J0uOkti/W2uOdGXu2Jwb72unxTGC0zg7IwRZFmeyTEp5pkoMsw5lGcpoJJa5EFw/borNvrp/RaNZPf0DvTGOD32Ygz3qYUAeEWPZRofJDql5SlUNVP5SKsUHeIRHNf52zdBSJeGmigJu2jSLOijJ+3v+qqy2qndoilzVGikiwZ8GyXMXJqg6dnO2LnfrPtYYnZ8jjarhbXiDGPWlvR90bniGqsOPZmvEMdmJn5asOVriu80rBOkhVqEe1P4ipOT0Eb3McNHXTwNuB0JgJ9o17Q85/wvbywVF+VK8q0Gw+Y/OTudCab9AXSu+vmutBv0fSYcdVAEuc32QgOX+NbpYRqLr7DHQ/g5uTo9tvhp7Hl8okVPehiHrtealhPGiYeI6f2K9DPrbWneQWNRL3jeHY0MkOk/UUQApoNG+XGYwRZB+nIrxwy/6qXYgoJEVusXPqtOO/3SbERNECAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let ts=range t from 1 to 24*7*4 step 1 // generate 4 weeks of hourly data\r | extend Timestamp = datetime(2018-03-01 05:00) + 1h * t \r | extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend\r | extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers\r | extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers\r | make-series y=max(y) on Timestamp from datetime(2018-03-01 05:00) to datetime(2018-03-01 05:00)+24*7*5h step 1h; // create a time series of 5 weeks (last week is empty)\r ts \r | extend y_forcasted = series_decompose_forecast(y, 24*7) // forecast a week forward\r | render timechart \r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-decompose-forecastfunction","series-decompose-forecastfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_divide","Calculates the element-wise division of two numeric series inputs.",`## Syntax\r \r \`series_divide(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1, series2* | dynamic | ✓ | The numeric arrays over which to calculate the element-wise division. The first array is to be divided by the second. |\r \r ## Returns\r \r Dynamic array of calculated element-wise divide operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.\r \r Note: the result series is of double type, even if the inputs are integers. Division by zero follows the double division by zero (e.g. 2/0 yields double(+inf)).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1XMQQrCMBBG4b2n+JeNzCZ17VlCaEaJYhNmgiShhzdKobj9eDzx651RcZP0gkVJuEALZ9jTBq6F14CG6yjOmA/qg9pOWdKDlwK1A7Nfns6L+DZVatQNQed/74RGqOa4qXUhvmNg92uVJbLuNKn9LswHwOb0BqkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | project s1 = pack_array(x,y,z), s2 = pack_array(z, y, x)\r | extend s1_divide_s2 = series_divide(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1 |s2| s1_divide_s2|\r |---|---|---|\r |[1,2,4] |[4,2,1]| [0.25,1.0,4.0]|\r |[2,4,8] |[8,4,2]| [0.25,1.0,4.0]|\r |[3,6,12] |[12,6,3]| [0.25,1.0,4.0]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-dividefunction","series-dividefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_dot_product","Calculates the dot product of two numeric series.",`The function \`series_dot_product()\` takes two numeric series as input, and calculates their [dot product](https://en.wikipedia.org/wiki/Dot_product).\r \r ## Syntax\r \r \`series_dot_product(\`*series1*\`,\` *series2*\`)\`\r \r ## Alternate syntax\r \r \`series_dot_product(\`*series*\`, \`*numeric*\`)\`\r \r \`series_dot_product(\`*numeric*\`, \`*series*\`)\`\r \r > [!NOTE]\r > The alternate syntax shows that one of the two function arguments can be a numerical scalar.\r >\r > This numerical scalar will be broadcasted to a vector whose length equals the length of the corresponding numeric series.\r >\r > For example, \`series_dot_product([1, 2, 3], 10)\` will be treated as \`series_dot_product([1, 2, 3], [10, 10, 10])\`.\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1, series2* | dynamic | ✓ | Input arrays with numeric data, to be element-wise multiplied and then summed into a value of type \`real\`.\r \r ## Returns\r \r Returns a value of type \`real\` whose value is the sum over the product of each element of *series1* with the corresponding element of *series2*.\r In case both series length isn't equal, the longer series will be truncated to the length of the shorter one.\r Any non-numeric element of the input series will be ignored.\r \r > [!NOTE]\r > If one or both input arrays are empty, the result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1XMQQoCMQyF4b2neMupdNNx7VlKaeOg4rQkEdri4a2DMLoLH3k/h3UhVFw4P+CgGSeIUhn34QWqSmtCw3m8HDHv1Ae1LxXON4oKcQNLiHcfmEObqm22GwuZ/71bNItq9po4n7L6EUrPqH4bCPGV5NcncZ+YeQNovYwctAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1 \r | extend y = x * 2\r | extend z = y * 2\r | project s1 = pack_array(x,y,z), s2 = pack_array(z, y, x)\r | extend s1_dot_product_s2 = series_dot_product(s1, s2)\r \`\`\`\r \r |s1|s2|s1_dot_product_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|12|\r |[2,4,8]|[8,4,2]|48|\r |[3,6,12]|[12,6,3]|108|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03LQQrCMBCF4b2neMtWsklde5YQklGq2ISZEZLi4Z2K0O6Gb97PcbkTGm5cXvDQggtEqdp9+oCa0pLRcbXJGdNOq1H/U+XyoKQQb1hjeobIHPvQXHfr6CDT1u+t+JCLBsvyO2n4vYV4Jjn6IH5Lxy/j/FcsogAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1 \r | extend y = x * 2\r | extend z = y * 2\r | project s1 = pack_array(x,y,z), s2 = x\r | extend s1_dot_product_s2 = series_dot_product(s1, s2)\r \`\`\`\r \r |s1|s2|s1_dot_product_s2|\r |---|---|---|\r |[1,2,4]|1|7|\r |[2,4,8]|2|28|\r |[3,6,12]|3|63|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-dot-productfunction","series-dot-productfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_equals","Calculates the element-wise equals (`==`) logic operation of two numeric series inputs.",`## Syntax\r \r \`series_equals (\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1, series2* | dynamic | ✓ | The numeric arrays to be element-wise compared. |\r \r ## Returns\r \r Dynamic array of booleans containing the calculated element-wise equal logic operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVSKnMS8zNTNaINtQx0jGJ1dRRKDZCFjYBChvGanLVKKRWlKTmpQB1xacWlibmFMeDFRanFmWmFkOFNIoNQfo1AT5VmINgAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = dynamic([1,2,4]), s2 = dynamic([4,2,1])\r | extend s1_equals_s2 = series_equals(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_equals_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[false,true,false]|\r \r ## See also\r \r For entire series statistics comparisons, see:\r \r * [series_stats()](series-statsfunction.md)\r * [series_stats_dynamic()](series-stats-dynamicfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-equalsfunction","series-equalsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_exp","Calculates the element-wise base-e exponential function (e^x) of the numeric series input.",`## Syntax\r \r \`series_exp(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values whose elements are applied as the exponent in the exponential function. |\r \r ## Returns\r \r Dynamic array of calculated exponential function. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShWsFVIqcxLzM1M1og21DHSMY7V5KpRSK0oSc1LUSiOT60oAKooTi3KTAVzNIo1ASk3NNg5AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print s = dynamic([1,2,3])\r | extend s_exp = series_exp(s)\r \`\`\`\r \r **Output**\r \r |s|s_exp|\r |---|---|\r |[1,2,3]|[2.7182818284590451,7.38905609893065,20.085536923187668]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-expfunction","series-expfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fft","Applies the Fast Fourier Transform (FFT) on a series.",`The series_fft() function takes a series of complex numbers in the time/spatial domain and transforms it to the frequency domain using the [Fast Fourier Transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform). The transformed complex series represents the magnitude and phase of the frequencies appearing in the original series. Use the complementary function [series_ifft](series-ifft-function.md) to transform from the frequency domain back to the time/spatial domain.\r \r ## Syntax\r \r \`series_fft(\`*x_real* [\`,\` *x_imaginary*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x_real* | dynamic | ✓ | A numeric array representing the real component of the series to transform.|\r | *x_imaginary* | dynamic | | A similar array representing the imaginary component of the series. This parameter should only be specified if the input series contains complex numbers.|\r \r ## Returns\r \r The function returns the complex inverse fft in two series. The first series for the real component and the second one for the imaginary component.`,`* Generate a complex series, where the real and imaginary components are pure sine waves in different frequencies. Use FFT to transform it to the frequency domain:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1WP3XKDIBCF732KcwmtjZreZJrhWRxaV2WK6ABpsD/v3jXGJt0bOIfvLLuWIoJxdNYfpER6QTOeXi3lmMibsbnpThu3KVXtSiZ6HejPKnelxFcGrgXFw9JW7PmcjJAorg1Zi4THNSxl9pMdM8szOFXtD0dcqijA4c5pC0uui33mtesICa0fB5SIIxyeUCFEmlBl36AUyTWYvdqWESnHQeaYzT/reS8ZD6dh0N58ck816HeqrQlRpAWvPWl7Z87+4ppBd/eukbdfRdvGeg3mWO8LLqEQeGkKNZtiA66PHPccJg/L47312kecTezFHCZropq0IxvkLxVC14SgAQAA" target="_blank">Run the query</a>\r \r \r \`\`\`\r let sinewave=(x:double, period:double, gain:double=1.0, phase:double=0.0)\r {\r gain*sin(2*pi()/period*(x+phase))\r }\r ;\r let n=128; // signal length\r range x from 0 to n-1 step 1 | extend yr=sinewave(x, 8), yi=sinewave(x, 32)\r | summarize x=make_list(x), y_real=make_list(yr), y_imag=make_list(yi)\r | extend (fft_y_real, fft_y_imag) = series_fft(y_real, y_imag)\r | render linechart with(ysplit=panels)\r \`\`\`\r \r This query returns *fft_y_real* and *fft_y_imag*: \r \r \r * Transform a series to the frequency domain, and then apply the inverse transform to get back the original series:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3VQ23KDIBB99yvOI7QmUfuSaYZvcWiyKi2CA6TRXv69GLWxnXZfYM+NZTUFeGXoIl9JsP4RJ3t+0pSiI6fs6dbXUpmlE/k2i4pGevqGsm3G8Z4g1ijF3RjLinh2inHs5sDYsx73k5nz5DM5JDrOYERe7A+41m6HaK6N1NBk6tAkTpqa0KNytkWGYGGwQQ4fqEOefID6QOaEwYnlM6xPsecpBvUDeih4lPtz20qn3mKmaOULlVr5wPpRXjqSegUO7oqqVtZrVPHbq6yqQjkZU0z3Uc4h4OOnyZcRZItgJlf2iSkWioqVU43Wf/JjROfsMx3DRl7kgL9l80KDtWilGeZgVNZBx8UcG+kCLio06KQh7WOqi2PRb5oNvtMqiEnFvwD5H9DbOQIAAA==" target="_blank">Run the query</a>\r \r \r \`\`\`\r let sinewave=(x:double, period:double, gain:double=1.0, phase:double=0.0)\r {\r gain*sin(2*pi()/period*(x+phase))\r }\r ;\r let n=128; // signal length\r range x from 0 to n-1 step 1 | extend yr=sinewave(x, 8), yi=sinewave(x, 32)\r | summarize x=make_list(x), y_real=make_list(yr), y_imag=make_list(yi)\r | extend (fft_y_real, fft_y_imag) = series_fft(y_real, y_imag)\r | extend (y_real2, y_image2) = series_ifft(fft_y_real, fft_y_imag)\r | project-away fft_y_real, fft_y_imag // too many series for linechart with panels\r | render linechart with(ysplit=panels)\r \`\`\`\r \r This query returns *y_real2* and *y_imag2, which are the same as *y_real* and *y_imag*: \r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fft-function","series-fft-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fill_backward","Performs a backward fill interpolation of missing values in a series.","An expression containing dynamic numerical array is the input. The function replaces all instances of missing_value_placeholder with the nearest value from its right side (other than missing_value_placeholder), and returns the resulting array. The rightmost instances of missing_value_placeholder are preserved.\r\n\r\n## Syntax\r\n\r\n`series_fill_backward(`*series*`[,`*missing_value_placeholder*`])`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *missing_value_placeholder* | scalar | | Specifies a placeholder for missing values. The default value is `double(`*null*`)`. The value can be of any type that will be converted to actual element types. `double`(*null*), `long`(*null*) and `int`(*null*) have the same meaning.|\r\n\r\n> [!NOTE]\r\n>\r\n> * If you create *series* using the [make-series](make-seriesoperator.md) operator, specify *null* as the default value to use interpolation functions like `series_fill_backward()` afterwards. See [explanation](make-seriesoperator.md#list-of-series-interpolation-functions).\r\n> * If *missing_value_placeholder* is `double`(*null*), or omitted, then a result may contain *null* values. To fill these *null* values, use other interpolation functions. Only [series_outliers()](series-outliersfunction.md) supports *null* values in input arrays.\r\n> * `series_fill_backward()` preserves the original type of the array elements.\r\n\r\n## Returns\r\n\r\n*series* with all instances of *missing_value_placeholder* filled backwards.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFISSxJVLAFUyWJSTmpGolFRVYKKZV5ibmZyZpcCkAQDSahQhrRhoaGOgp5pTk5OgrGZjoKJnAehDQEipkBxYyNkcVjNYFGcMVac4Ht46pRKCjKz0pNLgEbDbRSRwHMSsvMyYlPSkzOLk8sSgE6qzi1KDO1OB5FGORCTQBymgAduwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let data = datatable(arr: dynamic)\r [\r dynamic([111, null, 36, 41, null, null, 16, 61, 33, null, null]) \r ];\r data \r | project\r arr, \r fill_backward = series_fill_backward(arr)\r \`\`\`\r \r **Output**\r \r |\`arr\`|\`fill_backward\`|\r |---|---|\r |[111,null,36,41,null,null,16,61,33,null,null]|[111,36,36,41,16,16,16,61,33,null,null]|\r \r > [!TIP]\r > Use [series_fill_forward](series-fill-forwardfunction.md) or [series-fill-const](series-fill-constfunction.md) to complete interpolation of the above array.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fill-backwardfunction","series-fill-backwardfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fill_const","Replaces missing values in a series with a specified constant value.","Takes an expression containing dynamic numerical array as input, replaces all instances of missing_value_placeholder with the specified constant_value and returns the resulting array.\r\n\r\n## Syntax\r\n\r\n`series_fill_const(`*series*`,` *constant_value*`,` [ *missing_value_placeholder* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *constant_value* | scalar | ✓ | The value used to replace the missing values.|\r\n| *missing_value_placeholder* | scalar | | Specifies a placeholder for missing values. The default value is `double(`*null*`)`. The value can be of any type that will be converted to actual element types. `double`(*null*), `long`(*null*) and `int`(*null*) have the same meaning.|\r\n\r\n## Returns\r\n\r\n*series* with all instances of *missing_value_placeholder* replaced with *constant_value*.\r\n\r\n> [!NOTE]\r\n>\r\n> * If you create *series* using the [make-series](make-seriesoperator.md) operator, specify *null* as the default value to use interpolation functions like `series_fill_const()` afterwards. See [explanation](make-seriesoperator.md#list-of-series-interpolation-functions).\r\n> * If *missing_value_placeholder* is `double`(*null*), or omitted, then a result may contain *null* values. To fill these *null* values, use other interpolation functions. Only [series_outliers()](series-outliersfunction.md) supports *null* values in input arrays.\r\n> * `series_fill_const()` preserves the original type of the array elements.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA3WOywrCMBBF94H8wywTiNJppAvFLymlxDRCJLaSxIXgxzsmPkBwFvM4XO6d4DJMJhvYl5HNIThhYtzCdJvN2VvJGVD1dbyg6BFRwXwNQYHuFGzoavWbIJGOiP6QZx8kGXA27DgriZzd4RKXk7O5mlOsgroefQijXeaUkT5LLnqXxi8URdqsG6l+9e1//QrlA3dBmsPvAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let data = datatable(arr: dynamic)\r [\r dynamic([111, null, 36, 41, 23, null, 16, 61, 33, null, null]) \r ];\r data \r | project\r arr, \r fill_const1 = series_fill_const(arr, 0.0),\r fill_const2 = series_fill_const(arr, -1) \r \`\`\`\r \r **Output**\r \r |\`arr\`|\`fill_const1\`|\`fill_const2\`|\r |---|---|---|\r |[111,null,36,41,23,null,16,61,33,null,null]|[111,0.0,36,41,23,0.0,16,61,33,0.0,0.0]|[111,-1,36,41,23,-1,16,61,33,-1,-1]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fill-constfunction","series-fill-constfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fill_forward","Performs a forward fill interpolation of missing values in a series.","An expression containing dynamic numerical array is the input. The function replaces all instances of missing_value_placeholder with the nearest value from its left side other than missing_value_placeholder, and returns the resulting array. The leftmost instances of missing_value_placeholder are preserved.\r\n\r\n## Syntax\r\n\r\n`series_fill_forward(`*series*`,` [ *missing_value_placeholder* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *missing_value_placeholder* | scalar | | Specifies a placeholder for missing values. The default value is `double(`*null*`)`. The value can be of any type that will be converted to actual element types. `double`(*null*), `long`(*null*) and `int`(*null*) have the same meaning.|\r\n\r\n## Returns\r\n\r\n*series* with all instances of *missing_value_placeholder* filled forwards.\r\n\r\n> [!NOTE]\r\n>\r\n> * If you create *series* using the [make-series](make-seriesoperator.md) operator, specify *null* as the default value to use interpolation functions like `series_fill_forward()` afterwards. See [explanation](make-seriesoperator.md#list-of-series-interpolation-functions).\r\n> * If *missing_value_placeholder* is `double`(*null*), or omitted, then a result may contain *null* values. To fill these *null* values, use other interpolation functions. Only [series_outliers()](series-outliersfunction.md) supports *null* values in input arrays.\r\n> * `series_fill_forward()` preserves the original type of the array elements.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA8tJLVFISSxJVLAFUyWJSTmpGolFRVYKKZV5ibmZyZq8XApAEA2hoIIa0XmlOTk6ChDS2ExHwcQQxoOQhkAxM6CYsTGyeKwm0AxerlhrXi6wpbxcNQoFRflZqcklEPOBNusoQJhpmTk58Wn5ReWJRSlA1xWnFmWmFscji4LcqQkA68oew8EAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let data = datatable(arr: dynamic)\r [\r dynamic([null, null, 36, 41, null, null, 16, 61, 33, null, null]) \r ];\r data \r | project\r arr, \r fill_forward = series_fill_forward(arr) \r \`\`\`\r \r **Output**\r \r |\`arr\`|\`fill_forward\`|\r |---|---|\r |[null,null,36,41,null,null,16,61,33,null,null]|[null,null,36,41,41,41,16,61,33,33,33]|\r \r Use [series_fill_backward](series-fill-backwardfunction.md) or [series-fill-const](series-fill-constfunction.md) to complete interpolation of the above array.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fill-forwardfunction","series-fill-forwardfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fill_linear","Linearly interpolates missing values in a series.","Takes an expression containing dynamic numerical array as input, does linear interpolation for all instances of missing_value_placeholder, and returns the resulting array. If the beginning and end of the array contain missing_value_placeholder, then it will be replaced with the nearest value other than missing_value_placeholder. This feature can be turned off. If the whole array consists of the missing_value_placeholder, the array will be filled with constant_value, or 0 if not specified. \r\n\r\n## Syntax\r\n\r\n`series_fill_linear(`*series*`,` [ *missing_value_placeholder* [`,`*fill_edges* [`,` *constant_value* ]]]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *missing_value_placeholder* | scalar | | Specifies a placeholder for missing values. The default value is `double(`*null*`)`. The value can be of any type that will be converted to actual element types. `double`(*null*), `long`(*null*) and `int`(*null*) have the same meaning.|\r\n| *fill_edges* | bool | | Indicates whether *missing_value_placeholder* at the start and end of the array should be replaced with nearest value. `true` by default. If set to `false`, then *missing_value_placeholder* at the start and end of the array will be preserved.|\r\n| *constant_value* | scalar | | Relevant only for arrays that entirely consist of *null* values. This parameter specifies a constant value with which to fill the series. Default value is 0. Setting this parameter it to `double(`*null*`)` will preserve the *null* values.|\r\n\r\n## Returns\r\n\r\nA series linear interpolation of *series* using the specified parameters. If *series* contains only `int` or `long` elements, then the linear interpolation will return rounded interpolated values rather than exact ones.\r\n\r\n> [!NOTE]\r\n>\r\n> * If you create *series* using the [make-series](make-seriesoperator.md) operator, specify *null* as the default value to use interpolation functions like `series_fill_linear()` afterwards. See [explanation](make-seriesoperator.md#list-of-series-interpolation-functions).\r\n> * If *missing_value_placeholder* is `double`(*null*), or omitted, then a result may contain *null* values. To fill these *null* values, use other interpolation functions. Only [series_outliers()](series-outliersfunction.md) supports *null* values in input arrays.\r\n> * `series_fill_linear()` preserves the original type of the array elements.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA5WRzWrDMAzH74G8g44JmHYmXWEbO/QZdiwhaImSeSh2sZ2NwB5+dpq1a2kP0cGy/5b46YPJQ4Me4XVyHt+ZMrT2GZpRY6/qPE0g2P7oZjHb64FZgJRy9SDg+Ci28b75p8xBk76d9KK4/C1zAes17KzFEUwLjRlCAZF0j3emRdY1KXIi5QbjTfWK0QL+sZT2NyHXZ5nDcjs19a38B/TKOaU7+EIeyIHRPKZJ+ZImceZp8gMHaz6pnusJFYq5/5htBl+h7VxYkSOryFWtYq5YaUIbd5WLc3BFTUf3Q8U84Sw2Fubi7UCndLMwuUV2dAGvjXZ+ETwsayU38vEp/wWjK5zoigIAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let data = datatable(arr: dynamic)\r [\r dynamic([null, 111.0, null, 36.0, 41.0, null, null, 16.0, 61.0, 33.0, null, null]), // Array of double \r dynamic([null, 111, null, 36, 41, null, null, 16, 61, 33, null, null]), // Similar array of int\r dynamic([null, null, null, null]) // Array with missing values only\r ];\r data\r | project\r arr, \r without_args = series_fill_linear(arr),\r with_edges = series_fill_linear(arr, double(null), true),\r wo_edges = series_fill_linear(arr, double(null), false),\r with_const = series_fill_linear(arr, double(null), true, 3.14159) \r \`\`\`\r \r **Output**\r \r |\`arr\`|\`without_args\`|\`with_edges\`|\`wo_edges\`|\`with_const\`|\r |---|---|---|---|---|\r |[null,111.0,null,36.0,41.0,null,null,16.0,61.0,33.0,null,null]|[111.0,111.0,73.5,36.0,41.0,32.667,24.333,16.0,61.0,33.0,33.0,33.0]|[111.0,111.0,73.5,36.0,41.0,32.667,24.333,16.0,61.0,33.0,33.0,33.0]|[null,111.0,73.5,36.0,41.0,32.667,24.333,16.0,61.0,33.0,null,null]|[111.0,111.0,73.5,36.0,41.0,32.667,24.333,16.0,61.0,33.0,33.0,33.0]|\r |[null,111,null,36,41,null,null,16,61,33,null,null]|[111,111,73,36,41,32,24,16,61,33,33,33]|[111,111,73,36,41,32,24,16,61,33,33,33]|[null,111,73,36,41,32,24,16,61,33,null,null]|[111,111,74,38, 41,32,24,16,61,33,33,33]|\r |[null,null,null,null]|[0.0,0.0,0.0,0.0]|[0.0,0.0,0.0,0.0]|[0.0,0.0,0.0,0.0]|[3.14159,3.14159,3.14159,3.14159]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fill-linearfunction","series-fill-linearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fir","Applies a Finite Impulse Response (FIR) filter on a series.","The function takes an expression containing a dynamic numerical array as input and applies a [Finite Impulse Response](https://en.wikipedia.org/wiki/Finite_impulse_response) filter. By specifying the `filter` coefficients, it can be used for calculating a moving average, smoothing, change-detection, and many more use cases. The function takes the column containing the dynamic array and a static dynamic array of the filter's coefficients as input, and applies the filter on the column. It outputs a new dynamic array column, containing the filtered output. \r\n\r\n## Syntax\r\n\r\n`series_fir(`*series*`,` *filter* [`,` *normalize*[`,` *center*]]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *filter* | dynamic | ✓ | An array of numeric values containing the coefficients of the filter.|\r\n| *normalize* | bool | | Indicates whether the filter should be normalized. That is, divided by the sum of the coefficients. If filter contains negative values, then *normalize* must be specified as `false`, otherwise result will be `null`. If not specified, then a default value of `true` is assumed, depending on the presence of negative values in the *filter*. If *filter* contains at least one negative value, then *normalize* is assumed to be `false`.|\r\n| *center* | bool | | Indicates whether the filter is applied symmetrically on a time window before and after the current point, or on a time window from the current point backwards. By default, center is `false`, which fits the scenario of streaming data so that we can only apply the filter on the current and older points. However, for ad-hoc processing you can set it to `true`, keeping it synchronized with the time series. See examples below. This parameter controls the filter\u2019s [group delay](https://en.wikipedia.org/wiki/Group_delay_and_phase_delay).|\r\n\r\n> [!TIP]\r\n> Normalization is a convenient way to make sure that the sum of the coefficients is 1. When *normalized* is `true`, the filter doesn't amplify or attenuate the series. For example, the moving average of four bins could be specified by *filter*=[1,1,1,1] and *normalized*=`true`, which is simpler than typing [0.25,0.25.0.25,0.25].\r\n\r\n## Returns\r\n\r\nA new dynamic array column containing the filtered output.",`* Calculate a moving average of five points by setting *filter*=[1,1,1,1,1] and *normalize*=\`true\` (default). Note the effect of *center*=\`false\` (default) vs. \`true\`:\r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA41QwWrDMAy9F/IPutUGF5Z0O+awD+hpu40Q3ERN1NV2kdW0G/v4uU1Wxlih5kk8S+jpIba+QxDYcHCwJq98OCptIO81LKBY9iDhbz0K7hPJZl8QD85Zps8kUTr7jvWOoijR596ewxYbyWaQHrXl/PVlbsbfYHdl++Gto0a9PRi4hTxFkeLxwidSTI3/Uelph5w94EnQt2Phqa9XYSDfPQ9dGZEJY70hVsmMgaubPIlfUekftd/DdYNekLG9W8WA8AHHfLkNJ1fIIOSw6S3LN0kcwQiHAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r range t from bin(now(), 1h) - 23h to bin(now(), 1h) step 1h\r | summarize t=make_list(t)\r | project\r id='TS',\r val=dynamic([0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 40, 100, 40, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0]),\r t\r | extend\r 5h_MovingAvg=series_fir(val, dynamic([1, 1, 1, 1, 1])),\r 5h_MovingAvg_centered=series_fir(val, dynamic([1, 1, 1, 1, 1]), true, true)\r | render timechart\r \`\`\`\r \r This query returns: \r *5h_MovingAvg*: Five points moving average filter. The spike is smoothed and its peak shifted by (5-1)/2 = 2h. \r *5h_MovingAvg_centered*: Same, but by setting \`center=true\`, the peak stays in its original location.\r \r \r \r * To calculate the difference between a point and its preceding one, set *filter*=[1,-1].\r \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA12O3QrCMAxG7wXfIXd20IHV6z2F3skYdUtddG1HmvmHD+8cMkQ48IWE7xC24YQg4Dh6OFJQId5UpsG0GeRgTAsS//dJsB+H5eIFafDeMj1HReHtBauOkijJPree4xlrAWqK1X630iAarrYbsGgewXqq1WGtYWbzw3amnFR4FwwNNORckZAJU+WI1WTTMOuMhtyU45fOdgm/MQl4rCODkMe6tSxvKkW3gPcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range t from bin(now(), 1h) - 11h to bin(now(), 1h) step 1h\r | summarize t=make_list(t)\r | project id='TS', t, value=dynamic([0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 3, 3])\r | extend diff=series_fir(value, dynamic([1, -1]), false, false)\r | render timechart\r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-firfunction","series-firfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fit_2lines","Applies a two segmented linear regression on a series, returning multiple columns.",`Takes an expression containing dynamic numerical array as input and applies a [two segmented linear regression](https://en.wikipedia.org/wiki/Segmented_regression) in order to identify and quantify a trend change in a series. The function iterates on the series indexes. In each iteration, the function splits the series to two parts, fits a separate line (using [series_fit_line()](series-fit-linefunction.md)) to each part, and calculates the total r-square. The best split is the one that maximized r-square; the function returns its parameters:\r \r |Parameter |Description |\r |---------|---------|\r |\`rsquare\` | [R-square](https://en.wikipedia.org/wiki/Coefficient_of_determination) is standard measure of the fit quality. It's a number in the range [0-1], where 1 - is the best possible fit, and 0 means the data is unordered and don't fit any line. |\r |\`split_idx\` | The index of breaking point to two segments (zero-based). |\r |\`variance\` | Variance of the input data. |\r |\`rvariance\` | Residual variance, which is the variance between the input data values the approximated ones (by the two line segments). |\r |\`line_fit\` | Numerical array holding a series of values of the best fitted line. The series length is equal to the length of the input array. It's mainly used for charting. |\r |\`right_rsquare\` | R-square of the line on the right side of the split, see [series_fit_line()](series-fit-linefunction.md). |\r |\`right_slope\` | Slope of the right approximated line (of the form y=ax+b). |\r |\`right_interception\` | Interception of the approximated left line (b from y=ax+b). |\r |\`right_variance\` | Variance of the input data on the right side of the split. |\r |\`right_rvariance\` | Residual variance of the input data on the right side of the split. |\r |\`left_rsquare\` | R-square of the line on the left side of the split, see [series_fit_line()](series-fit-linefunction.md). |\r |\`left_slope\` | Slope of the left approximated line (of the form y=ax+b). |\r |\`left_interception\` | Interception of the approximated left line (of the form y=ax+b). |\r |\`left_variance\` | Variance of the input data on the left side of the split. |\r |\`left_rvariance\` | Residual variance of the input data on the left side of the split. |\r \r > [!NOTE]\r > This function returns multiple columns an so cannot be used as an argument for another function.\r \r ## Syntax\r \r project \`series_fit_2lines(\`*series*\`)\`\r \r * Will return all mentioned above columns with the following names: series_fit_2lines_x_rsquare, series_fit_2lines_x_split_idx etc.\r \r project (rs, si, v)=\`series_fit_2lines(\`*series*\`)\`\r \r * Will return the following columns: rs (r-square), si (split index), v (variance) and the rest will look like series_fit_2lines_x_rvariance, series_fit_2lines_x_line_fit and etc.\r \r extend (rs, si, v)=\`series_fit_2lines(\`*series*\`)\`\r \r * Will return only: rs (r-square), si (split index) and v (variance).\r \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values.|\r \r > [!TIP]\r > The most convenient way of using this function is applying it to the results of [make-series](make-seriesoperator.md) operator.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA1WQQUsDMRCF74X+h7k1CzE00VY97FUoeOqCF5ESs6M7ss3GbMRd8Mc7YW3X5vAyecz7mEmI5NNyAXyoLlewktNjKKP17yheyQvffYtCgm4KuAKtGwmX7iRTbizr0dsjOfGsJRhlsmwk3KhbCRu15l629Fpdn/Rewl2+t8q8FMvFD+CQ0NcTTlRtF1DCzieMDkOizkvYV59fNrL9ZCNZ77jaz+UjeXygVJQ9RsL+8Ebp0LInxtOQ4g/Ak1ShpbSrh5ll/sHMmWYucCbzegbmeUPsPtAl/j8JzBnPmTmc2yIvhRESHdE1NqZflsNPUXoBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print\r id=' ',\r x=range(bin(now(), 1h) - 11h, bin(now(), 1h), 1h),\r y=dynamic([1, 2.2, 2.5, 4.7, 5.0, 12, 10.3, 10.3, 9, 8.3, 6.2])\r | extend\r (Slope, Interception, RSquare, Variance, RVariance, LineFit)=series_fit_line(y),\r (RSquare2, SplitIdx, Variance2, RVariance2, LineFit2)=series_fit_2lines(y)\r | project id, x, y, LineFit, LineFit2\r | render timechart\r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fit-2linesfunction","series-fit-2linesfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fit_2lines_dynamic","Applies two segments linear regression on a series, returning a dynamic object.","Takes an expression containing dynamic numerical array as input and applies [two segments linear regression](https://en.wikipedia.org/wiki/Segmented_regression) in order to identify and quantify trend changes in a series. The function iterates on the series indexes. In each iteration, it splits the series to two parts, and fits a separate line using [series_fit_line()](series-fit-linefunction.md) or [series_fit_line_dynamic()](series-fit-line-dynamicfunction.md). The function fits the lines to each of the two parts, and calculates the total R-squared value. The best split is the one that maximizes R-squared. The function returns its parameters in dynamic value with the following content:\r\n\r\n* `rsquare`: [R-squared](https://en.wikipedia.org/wiki/Coefficient_of_determination) is a standard measure of the fit quality. It's a number in the range of [0-1], where 1 is the best possible fit, and 0 means the data is unordered and don't fit any line.\r\n* `split_idx`: the index of breaking point to two segments (zero-based).\r\n* `variance`: variance of the input data.\r\n* `rvariance`: residual variance that is the variance between the input data values the approximated ones (by the two line segments).\r\n* `line_fit`: numerical array holding a series of values of the best fitted line. The series length is equal to the length of the input array. It's used for charting.\r\n* `right.rsquare`: r-square of the line on the right side of the split, see [series_fit_line()](series-fit-linefunction.md) or [series_fit_line_dynamic()](series-fit-line-dynamicfunction.md).\r\n* `right.slope`: slope of the right approximated line (of the form y=ax+b).\r\n* `right.interception`: interception of the approximated left line (b from y=ax+b).\r\n* `right.variance`: variance of the input data on the right side of the split.\r\n* `right.rvariance`: residual variance of the input data on the right side of the split.\r\n* `left.rsquare`: r-square of the line on the left side of the split, see [series_fit_line()].(series-fit-linefunction.md) or [series_fit_line_dynamic()](series-fit-line-dynamicfunction.md).\r\n* `left.slope`: slope of the left approximated line (of the form y=ax+b).\r\n* `left.interception`: interception of the approximated left line (of the form y=ax+b).\r\n* `left.variance`: variance of the input data on the left side of the split.\r\n* `left.rvariance`: residual variance of the input data on the left side of the split.\r\n\r\nThis operator is similar to [series_fit_2lines](series-fit-2linesfunction.md). Unlike `series-fit-2lines`, it returns a dynamic bag.\r\n\r\n## Syntax\r\n\r\n`series_fit_2lines_dynamic(`*series*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n\r\n> [!TIP]\r\n> The most convenient way of using this function is applying it to the results of the [make-series](make-seriesoperator.md) operator.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA21PywrCMBC8F/oPe7OFNTTxfcjVk38gUmq72hWNkgZswY83sVQsmMMkOzszm31YNi6OwB+u9AQm2BettoU5U3Jkk5j7M0kRZJ3CFKSsEcZsD72v01VnihuXyV4iKKECLBDmYoWwEJnXekpmYjbgBmEd7qVQhzSOXkCtI1P1cTs2tGWnG7JMTX5il189lQ9DulR8at/AkUP9WlTQNP9MYd7D3i9UOr8/QovQ4ZDxfaggs/5TZMHxjcq6sO4NHF3PtzoBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print\r id=' ',\r x=range(bin(now(), 1h) - 11h, bin(now(), 1h), 1h),\r y=dynamic([1, 2.2, 2.5, 4.7, 5.0, 12, 10.3, 10.3, 9, 8.3, 6.2])\r | extend\r LineFit=series_fit_line_dynamic(y).line_fit,\r LineFit2=series_fit_2lines_dynamic(y).line_fit\r | project id, x, y, LineFit, LineFit2\r | render timechart\r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fit-2lines-dynamicfunction","series-fit-2lines-dynamicfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fit_line","Applies linear regression on a series, returning multiple columns.",`Takes an expression containing dynamic numerical array as input and does [linear regression](https://en.wikipedia.org/wiki/Line_fitting) to find the line that best fits it. This function should be used on time series arrays, fitting the output of make-series operator. The function generates the following columns:\r \r * \`rsquare\`: [r-square](https://en.wikipedia.org/wiki/Coefficient_of_determination) is a standard measure of the fit quality. The value's a number in the range [0-1], where 1 - is the best possible fit, and 0 means the data is unordered and doesn't fit any line.\r * \`slope\`: Slope of the approximated line ("a" from y=ax+b).\r * \`variance\`: Variance of the input data.\r * \`rvariance\`: Residual variance that is the variance between the input data values the approximated ones.\r * \`interception\`: Interception of the approximated line ("b" from y=ax+b).\r * \`line_fit\`: Numerical array holding a series of values of the best fitted line. The series length is equal to the length of the input array. The value's used for charting.\r \r ## Syntax\r \r \`series_fit_line(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values.|\r \r > [!TIP]\r > The most convenient way of using this function is to apply it to the results of [make-series](make-seriesoperator.md) operator.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA1VMywrCQAy8C/2H3NzCCm7Fx6VXQfDUghcRWdtoAzWt6YoW/HijPYiBSWYmybRCHKIRaFGZjmFsB/FMxfMFzYnYcPMwsQVXxTAB5yoL/+7Qhr8+LXv2VyrMPrEwt7CwsNIDp1DllgrVifJEV7PpB4c4Gr0AnwG5BJPlt7sXtJDXTatj54U8F8qyH91wQCmwDdSwhS0xrinEaYdC2B3PFI61eqb/JovmokCgKxaVl/AGWOACk/UAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print\r id=' ',\r x=range(bin(now(), 1h) - 11h, bin(now(), 1h), 1h),\r y=dynamic([2, 5, 6, 8, 11, 15, 17, 18, 25, 26, 30, 30])\r | extend (RSquare, Slope, Variance, RVariance, Interception, LineFit)=series_fit_line(y)\r | render timechart\r \`\`\`\r \r \r | RSquare | Slope | Variance | RVariance | Interception | LineFit |\r |---------|-------|----------|-----------|--------------|---------------------------------------------------------------------------------------------|\r | 0.982 | 2.730 | 98.628 | 1.686 | -1.666 | 1.064, 3.7945, 6.526, 9.256, 11.987, 14.718, 17.449, 20.180, 22.910, 25.641, 28.371, 31.102 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fit-linefunction","series-fit-linefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fit_line_dynamic","Applies linear regression on a series, returning dynamic object.",`Takes an expression containing dynamic numerical array as input, and does [linear regression](https://en.wikipedia.org/wiki/Line_fitting) to find the line that best fits it. This function should be used on time series arrays, fitting the output of make-series operator. It generates a dynamic value with the following content:\r \r * \`rsquare\`: [r-square](https://en.wikipedia.org/wiki/Coefficient_of_determination) is a standard measure of the fit quality. It's a number in the range [0-1], where 1 is the best possible fit, and 0 means the data is unordered and doesn't fit any line\r * \`slope\`: Slope of the approximated line (the *a*-value from *y=ax+b*)\r * \`variance\`: Variance of the input data\r * \`rvariance\`: Residual variance that is the variance between the input data values and the approximated ones.\r * \`interception\`: Interception of the approximated line (the *b*-value from *y=ax+b*)\r * \`line_fit\`: Numerical array containing a series of values of the best fit line. The series length is equal to the length of the input array. It's used mainly for charting.\r \r This operator is similar to [series_fit_line](series-fit-linefunction.md), but unlike \`series-fit-line\` it returns a dynamic bag.\r \r ## Syntax\r \r \`series_fit_line_dynamic(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values.|\r \r > [!TIP]\r > The most convenient way of using this function is by applying it to the results of [make-series](make-seriesoperator.md) operator.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc9rf7q4d68qcw5sk2d6f.northeurope/databases/MyDatabase?query=H4sIAAAAAAAAA11OTWvDMAy9F/ofdGsCXqkztu7ia2HQUwu7jBG8RG0ErZIp3tbAfvyU2IN2Bpn3Jft1QhzmM9BDtVvAwkRyceL5iNk7ccbtd5YbsE0Od2BtY+BWjVfcG1w9sD9Tlb0WBh4MPBp40oDVUWbXOsoLxYVa96tx3vL57AfwEpBrOFBwPQphXyosT8RY/r05XAXjf7v9x6cXdBpdSj/h1GR/aruo9yNK6osX8lxF4yuR5O1uTPnnPnNAqbAL1PIUoCshZbZadqP9R3sqrmBsLNoXBQKdsWq8hF+uDo0sdgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print\r id=' ',\r x=range(bin(now(), 1h) - 11h, bin(now(), 1h), 1h),\r y=dynamic([2, 5, 6, 8, 11, 15, 17, 18, 25, 26, 30, 30])\r | extend fit=series_fit_line_dynamic(y)\r | extend\r RSquare=fit.rsquare,\r Slope=fit.slope,\r Variance=fit.variance,\r RVariance=fit.rvariance,\r Interception=fit.interception,\r LineFit=fit.line_fit\r | render timechart\r \`\`\`\r \r \r | RSquare | Slope | Variance | RVariance | Interception | LineFit |\r |---------|-------|----------|-----------|--------------|---------------------------------------------------------------------------------------------|\r | 0.982 | 2.730 | 98.628 | 1.686 | -1.666 | 1.064, 3.7945, 6.526, 9.256, 11.987, 14.718, 17.449, 20.180, 22.910, 25.641, 28.371, 31.102 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fit-line-dynamicfunction","series-fit-line-dynamicfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_fit_poly","Applies a polynomial regression from an independent variable (x_series) to a dependent variable (y_series). This function takes a table containing multiple series (dynamic numerical arrays) and generates the best fit high-order polynomial for each series using [polynomial regression](https://en.wikipedia.org/wiki/Polynomial_regression).",`> [!TIP]\r >\r > * For linear regression of an evenly spaced series, as created by [make-series operator](make-seriesoperator.md), use the simpler function [series_fit_line()](series-fit-linefunction.md). See [Example 2](#example-2).\r > * If *x_series* is supplied, and the regression is done for a high degree, consider normalizing to the [0-1] range. See [Example 3](#example-3).\r > * If *x_series* is of datetime type, it must be converted to double and normalized. See [Example 3](#example-3).\r > * For reference implementation of polynomial regression using inline Python, see [series_fit_poly_fl()](../functions-library/series-fit-poly-fl.md).\r \r ## Syntax\r \r \`T | extend series_fit_poly(\`*y_series* [\`,\` *x_series*\`,\` *degree* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *y_series* | dynamic | ✓ | An array of numeric values containing the [dependent variable](https://en.wikipedia.org/wiki/Dependent_and_independent_variables). |\r | *x_series* | dynamic | | An array of numeric values containing the [independent variable](https://en.wikipedia.org/wiki/Dependent_and_independent_variables). Required only for [unevenly spaced series](https://en.wikipedia.org/wiki/Unevenly_spaced_time_series). If not specified, it's set to a default value of [1, 2, ..., length(*y_series*)].|\r | *degree* | | | The required order of the polynomial to fit. For example, 1 for linear regression, 2 for quadratic regression, and so on. Defaults to 1, which indicates linear regression.|\r \r ## Returns\r \r The \`series_fit_poly()\` function returns the following columns:\r \r * \`rsquare\`: [r-square](https://en.wikipedia.org/wiki/Coefficient_of_determination) is a standard measure of the fit quality. The value's a number in the range [0-1], where 1 - is the best possible fit, and 0 means the data is unordered and doesn't fit any line.\r * \`coefficients\`: Numerical array holding the coefficients of the best fitted polynomial with the given degree, ordered from the highest power coefficient to the lowest.\r * \`variance\`: Variance of the dependent variable (y_series).\r * \`rvariance\`: Residual variance that is the variance between the input data values the approximated ones.\r * \`poly_fit\`: Numerical array holding a series of values of the best fitted polynomial. The series length is equal to the length of the dependent variable (y_series). The value's used for charting.`,`### Example 1\r \r A fifth order polynomial with noise on x & y axes:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA21QQW7DIBC89xVzhBZHdiJXvfgtFrKXlsaABVSBKI/vNo3ituqFZWZnZwei9q+EAhODQ4ccsG9bpEwruocL1hjeacosGBC1n4XEI3o02O8O3KaSyc+o3F3DSRSFXnLzhUU3fJB4QtcyUfjy/HumMiVutg3aXf/lzoXPysr04ZyO9sz5BqePNC42ZVGkQv2Bq9xME0VLaTQ2j2tYqqgK10zbS5pIXjuCqcMf8Vi/C2OFKZAx/yiuvJ0s+ZzY1IR4hLh/EgdT7CzvVKNPum48T/D6mSIW62l60zF/AmoATHWAAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 200 step 1\r | project x = rand()*5 - 2.3\r | extend y = pow(x, 5)-8*pow(x, 3)+10*x+6\r | extend y = y + (rand() - 0.5)*0.5*y\r | summarize x=make_list(x), y=make_list(y)\r | extend series_fit_poly(y, x, 5)\r | project-rename fy=series_fit_poly_y_poly_fit, coeff=series_fit_poly_y_coefficients\r |fork (project x, y, fy) (project-away x, y, fy)\r | render linechart \r \`\`\`\r \r \r \r \r ### Example 2\r \r Verify that \`series_fit_poly\` with degree=1 matches \`series_fit_line\`:\r \r \`\`\`\r demo_series1\r | extend series_fit_line(y)\r | extend series_fit_poly(y)\r | project-rename y_line = series_fit_line_y_line_fit, y_poly = series_fit_poly_y_poly_fit\r | fork (project x, y, y_line, y_poly) (project-away id, x, y, y_line, y_poly) \r | render linechart with(xcolumn=x, ycolumns=y, y_line, y_poly)\r \`\`\`\r \r \r \r \r ### Example 3\r \r Irregular (unevenly spaced) time series:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA6WSy7LTMAyG9+cp/mU805B0wXCZKY/ABnYMk3FiJfXBl47sFJfh4ZHTHuhQdiRZyIp+6ZOsrnvqOqC0utgEv6aMkRAie+3sDzLIEflIYB0Wwpe+3X+FnUFWnAxDCxNBlExOZ3smd8FoFzQfDnitEFk+u9igHcothwRLxKutbIo1Wak+jWw9YcOw+V8kOmGK4UycbAyI8yZIWftThXQxLFgoEOtMOK5SKax+lGg0V6NK9n2PoENsE02in74lzBw99p287970SrA2so+3utJUDO9RhgqCA5qCFt6GpijVNV4XMf54qtoy07I6zUNOTz9BJVMwSMSW0iC4OTW3gzam+Sw9fKo97NArhf99KrpUZD3lytQJ4MukrqOVIZq4jo7u2Ir0dUMy9mwNvQCmddxS3VPeNzIMUkM9+HRpH6M2tt+3eUckd3ddq209HiY22zycorvUS9yh7PBWScyJ4zNNuWUKWhLN8vPwl2AQ39UQj0gk1MgS1MLTUXPGd9nh5jJFt/qQDlv6mkf9AtdLeagTAwAA" target="_blank">Run the query</a>\r \r \`\`\`\r //\r // x-axis must be normalized to the range [0-1] if either degree is relatively big (>= 5) or original x range is big.\r // so if x is a time axis it must be normalized as conversion of timestamp to long generate huge numbers (number of 100 nano-sec ticks from 1/1/1970)\r //\r // Normalization: x_norm = (x - min(x))/(max(x) - min(x))\r //\r irregular_ts\r | extend series_stats(series_add(TimeStamp, 0)) // extract min/max of time axis as doubles\r | extend x = series_divide(series_subtract(TimeStamp, series_stats__min), series_stats__max-series_stats__min) // normalize time axis to [0-1] range\r | extend series_fit_poly(num, x, 8)\r | project-rename fnum=series_fit_poly_num_poly_fit\r | render timechart with(ycolumns=num, fnum)\r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-fit-poly-function","series-fit-poly-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_floor","Calculates the element-wise floor function of the numeric series input.",`## Syntax\r \r \`series_floor(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values on which the floor function is applied.|\r \r ## Returns\r \r Dynamic array of the calculated floor function. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShWsFVIqcxLzM1M1ojWNdQz1THUMdIzjdXkqlFIrShJzUtRKI5Py8nPLwIqLE4tykyFcjWKNQFIrQOdQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print s = dynamic([-1.5,1,2.5])\r | extend s_floor = series_floor(s)\r \`\`\`\r \r **Output**\r \r |s|s_floor|\r |---|---|\r |[-1.5,1,2.5]|[-2.0,1.0,2.0]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-floor-function","series-floor-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_greater","Calculates the element-wise greater (`>`) logic operation of two numeric series inputs.",`## Syntax\r \r \`series_greater(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values to be element-wise compared.|\r \r ## Returns\r \r Dynamic array of booleans containing the calculated element-wise greater logic operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVSKnMS8zNTNaINtQx0jGJ1dRRKDZCFjYBChvGanLVKKRWlKTmpQB1xacXpSaWpBbFg1UWpxZlphbDxDSKDUEmaAIAcWLMOWIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = dynamic([1,2,4]), s2 = dynamic([4,2,1])\r | extend s1_greater_s2 = series_greater(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_greater_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[false,false,true]|\r \r ## See also\r \r For entire series statistics comparisons, see:\r \r * [series_stats()](series-statsfunction.md)\r * [series_stats_dynamic()](series-stats-dynamicfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-greaterfunction","series-greaterfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_greater_equals","Calculates the element-wise greater or equals (`>=`) logic operation of two numeric series inputs.",`## Syntax\r \r \`series_greater_equals(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values to be element-wise compared.|\r \r ## Returns\r \r Dynamic array of booleans containing the calculated element-wise greater or equal logic operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVSKnMS8zNTNaINtQx0jGJ1dRRKDZCFjYBChvGanLVKKRWlKTmpQB1xacXpSaWpBbFpxaWJuYUx4M1FKcWZaYWo0lpFBuCzNMEAIApX6lwAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = dynamic([1,2,4]), s2 = dynamic([4,2,1])\r | extend s1_greater_equals_s2 = series_greater_equals(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_greater_equals_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[false,true,true]|\r \r ## See also\r \r For entire series statistics comparisons, see:\r \r * [series_stats()](series-statsfunction.md)\r * [series_stats_dynamic()](series-stats-dynamicfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-greater-equalsfunction","series-greater-equalsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_ifft","Applies the Inverse Fast Fourier Transform (IFFT) on a series.",`The series_ifft() function takes a series of complex numbers in the frequency domain and transforms it back to the time/spatial domain using the [Fast Fourier Transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform). This function is the complementary function of [series_fft](series-fft-function.md). Commonly the original series is transformed to the frequency domain for spectral processing and then back to the time/spatial domain.\r \r ## Syntax\r \r \`series_ifft(\`*fft_real* [\`,\` *fft_imaginary*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *fft_real* | dynamic | ✓ | An array of numeric values representing the real component of the series to transform.|\r | *fft_imaginary* | dynamic | | An array of numeric values representing the imaginary component of the series. This parameter should be specified only if the input series contains complex numbers.|\r \r ## Returns\r \r The function returns the complex inverse fft in two series. The first series for the real component and the second one for the imaginary component.`,"See [series_fft](series-fft-function.md#example)","https://docs.microsoft.com/azure/data-explorer/kusto/query/series-ifft-function","series-ifft-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_iir","Applies an Infinite Impulse Response filter on a series.",`The function takes an expression containing dynamic numerical array as input, and applies an [Infinite Impulse Response](https://en.wikipedia.org/wiki/Infinite_impulse_response) filter. By specifying the filter coefficients, you can use the function to:\r \r * calculate the cumulative sum of the series\r * apply smoothing operations\r * apply various [high-pass](https://en.wikipedia.org/wiki/High-pass_filter), [band-pass](https://en.wikipedia.org/wiki/Band-pass_filter), and [low-pass](https://en.wikipedia.org/wiki/Low-pass_filter) filters\r \r The function takes as input the column containing the dynamic array and two static dynamic arrays of the filter's *denominators* and *numerators* coefficients, and applies the filter on the column. It outputs a new dynamic array column, containing the filtered output. \r \r ## Syntax\r \r \`series_iir(\`*series*\`,\` *numerators* \`,\` *denominators*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values, typically the resulting output of [make-series](make-seriesoperator.md) or [make_list](makelist-aggfunction.md) operators.|\r | *numerators* | dynamic | ✓ | An array of numeric values, containing the numerator coefficients of the filter.|\r | *denominators* | dynamic | ✓ | An array of numeric values, containing the denominator coefficients of the filter.|\r \r > [!IMPORTANT]\r > The first element of \`a\` (that is, \`a[0]\`) mustn't be zero, to avoid division by 0. See the [following formula](#the-filters-recursive-formula).\r \r ## The filter's recursive formula\r \r * Consider an input array X, and coefficients arrays a and b of lengths n_a and n_b respectively. The transfer function of the filter that will generate the output array Y, is defined by:\r \r <div align="center">\r Y<sub>i</sub> = a<sub>0</sub><sup>-1</sup>(b<sub>0</sub>X<sub>i</sub>\r + b<sub>1</sub>X<sub>i-1</sub> + ... + b<sub>n<sub>b</sub>-1</sub>X<sub>i-n<sub>b</sub>-1</sub>\r - a<sub>1</sub>Y<sub>i-1</sub>-a<sub>2</sub>Y<sub>i-2</sub> - ... - a<sub>n<sub>a</sub>-1</sub>Y<sub>i-n<sub>a</sub>-1</sub>)\r </div>`,`Calculate a cumulative sum. \r Use the iir filter with coefficients *denominators*=[1,-1] and *numerators*=[1]: \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVGoULBVKErMS0/VMNQz0FEwBGFNa66Cosw8oKRthY5CJVBFcWpRZmpxfGZmkQZQJKUyLzE3M1kj2jBWE5mnowsU0OSqUcgt002tKEjMS1EA6QcAEyBol2cAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let x = range(1.0, 10, 1);\r print x=x, y = series_iir(x, dynamic([1]), dynamic([1,-1]))\r | mv-expand x, y\r \`\`\`\r \r **Output**\r \r | x | y |\r |:--|:--|\r |1.0|1.0|\r |2.0|3.0|\r |3.0|6.0|\r |4.0|10.0|\r \r Here's how to wrap it in a function:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02OzQrCMBCE73mKOSaQglVPljxJKSE0iwbSKNsoCeq7GwR/5jY73ywTKeNGcz6zXa+LkeUAX5NbwqxwF2iKjajGMbtqI6VjPsmi0KEf3nFrkotyJQ602hBYFv15Icd+Uv9Oo2sXNdZJiecgLhxShjdfYKPRmK3GTmPfmAeoZEoe3pvfSunVC0CCVEu3AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let vector_sum=(x: dynamic) {\r let y=array_length(x) - 1;\r todouble(series_iir(x, dynamic([1]), dynamic([1, -1]))[y])\r };\r print d=dynamic([0, 1, 2, 3, 4])\r | extend dd=vector_sum(d)\r \`\`\`\r \r **Output**\r \r |d |dd |\r |-------------|----|\r |\`[0,1,2,3,4]\`|\`10\`|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-iirfunction","series-iirfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_less","Calculates the element-wise less (`<`) logic operation of two numeric series inputs.",`## Syntax\r \r \`series_less(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values to be element-wise compared.|\r \r ## Returns\r \r Dynamic array of booleans containing the calculated element-wise less logic operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVSKnMS8zNTNaINtQx0jGJ1dRRKDZCFjYBChvGanLVKKRWlKTmpQB1xeekFhfHg5UVpxZlphaDBTSKDUF6NQGAeKRCXAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = dynamic([1,2,4]), s2 = dynamic([4,2,1])\r | extend s1_less_s2 = series_less(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_less_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[true,false,false]|\r \r ## See also\r \r For entire series statistics comparisons, see:\r \r * [series_stats()](series-statsfunction.md)\r * [series_stats_dynamic()](series-stats-dynamicfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-lessfunction","series-lessfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_less_equals","Calculates the element-wise less or equal (`<=`) logic operation of two numeric series inputs.",`## Syntax\r \r \`series_less_equals(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values to be element-wise compared.|\r \r ## Returns\r \r Dynamic array of booleans containing the calculated element-wise less or equal logic operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVSKnMS8zNTNaINtQx0jGJ1dRRKDZCFjYBChvGanLVKKRWlKTmpQB1xeekFhfHpxaWJuYUx4NVF6cWZaYWI4trFBuCTNIEAMTrdUpqAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = dynamic([1,2,4]), s2 = dynamic([4,2,1])\r | extend s1_less_equals_s2 = series_less_equals(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_less_equals_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[true,true,false]|\r \r ## See also\r \r For entire series statistics comparisons, see:\r \r * [series_stats()](series-statsfunction.md)\r * [series_stats_dynamic()](series-stats-dynamicfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-less-equalsfunction","series-less-equalsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_log","Calculates the element-wise natural logarithm function (base-e) of the numeric series input.",`## Syntax\r \r \`series_log(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values on which the natural logarithm function is applied.|\r \r ## Returns\r \r Dynamic array of the calculated natural logarithm function. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUShWsFVIqcxLzM1M1og21DHSMY7V5KpRSK0oSc1LUSiOz8lPB6ooTi3KTAVzNIo1AcJsOMY5AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print s = dynamic([1,2,3])\r | extend s_log = series_log(s)\r \`\`\`\r \r **Output**\r \r |s|s_log|\r |---|---|\r |[1,2,3]|[0.0,0.69314718055994529,1.0986122886681098]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-log-function","series-log-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_multiply","Calculates the element-wise multiplication of two numeric series inputs.",`## Syntax\r \r \`series_multiply(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values to be element-wise multiplied.|\r \r ## Returns\r \r Dynamic array of calculated element-wise multiplication operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1XMQQrCMBBG4b2n+JeNZJO69iwh1FGqbRNmImRCD28sxeL24/E4LA9CwZ3jDIcccYFkSnCnFVQyLTcorq04oz+oNtKdEscnDRniGqYwvHxgDtoVq7YaC+n/vVqoRTHHTZyf31Me06R+q4V4JPlhJ+67MR/3UM9mrQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | project s1 = pack_array(x,y,z), s2 = pack_array(z, y, x)\r | extend s1_multiply_s2 = series_multiply(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1 |s2 |s1_multiply_s2|\r |--|--|--|\r |[1,2,4] |[4,2,1]| [4,4,4]|\r |[2,4,8] |[8,4,2]| [16,16,16]|\r |[3,6,12] |[12,6,3]| [36,36,36]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-multiplyfunction","series-multiplyfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_not_equals","Calculates the element-wise not equals (`!=`) logic operation of two numeric series inputs.",`## Syntax\r \r \`series_not_equals(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values to be element-wise compared.|\r \r ## Returns\r \r Dynamic array of booleans containing the calculated element-wise not equal logic operation between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVSKnMS8zNTNaINtQx0jGJ1dRRKDZCFjYBChvGanLVKKRWlKTmpQB1xefll8SnFpYm5hTHgxUXpxZlphYjCWsUG4LM0QQA1OZCDmgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = dynamic([1,2,4]), s2 = dynamic([4,2,1])\r | extend s1_not_equals_s2 = series_not_equals(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_not_equals_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[true,false,true]|\r \r ## See also\r \r For entire series statistics comparisons, see:\r \r * [series_stats()](series-statsfunction.md)\r * [series_stats_dynamic()](series-stats-dynamicfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-not-equalsfunction","series-not-equalsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_outliers","Scores anomaly points in a series.",'The function takes an expression with a dynamic numerical array as input, and generates a dynamic numeric array of the same length. Each value of the array indicates a score of a possible anomaly, using ["Tukey\'s test"](https://en.wikipedia.org/wiki/Outlier#Tukey\'s_fences). A value greater than 1.5 in the same element of the input indicates a rise or decline anomaly. A value less than -1.5, indicates a decline anomaly.\r\n\r\n## Syntax\r\n\r\n`series_outliers(`*series* [`,` *kind* ] [`,` *ignore_val* ] [`,` *min_percentile* ] [`,` *max_percentile* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *kind* | string | | The algorithm to use for outlier detection. The supported options are `"tukey"`, which is traditional "Tukey", and `"ctukey"`, which is custom "Tukey". The default is `"ctukey"`.|\r\n| *ignore_val* | int, long, or real | | A numeric value indicating the missing values in the series. The default is `double(`*null*`)`. The score of nulls and ignore values is set to `0`.|\r\n| *min_percentile* | int, long, or real | | The minimum percentile to use to calculate the normal inter-quantile range. The default is 10. The value must be in the range `[2.0, 98.0]`. This parameter is only relevant for the `"ctukey"` *kind*.|\r\n| *max_percentile* | int, long, or real | | The maximum percentile to use to calculate the normal inter-quantile range. The default is 90. The value must be in the range `[2.0, 98.0]`. This parameter is only relevant for the `"ctukey"` *kind*.|\r\n\r\nThe following table describes differences between `"tukey"` and `"ctukey"`:\r\n\r\n| Algorithm | Default quantile range | Supports custom quantile range |\r\n|-----------|----------------------- |--------------------------------|\r\n| `"tukey"` | 25% / 75% | No |\r\n| `"ctukey"`| 10% / 90% | Yes |\r\n\r\n> [!TIP]\r\n> The best way to use this function is to apply it to the results of the [make-series](make-seriesoperator.md) operator.',`A time series with some noise creates outliers. If you would like to replace those outliers (noise) with the average value, use series_outliers() to detect the outliers, and then replace them.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2VR0XKCQAx89yv2ESpWdMYZH0p/hblKwGs5jslFenb68Y0gakdeyG6ySW7DpmsIETV7hw3EY5PnCEK9osUvKAp1Fc6FreskoiiwzeEZY7jPMy3HC9h0VZJieUFLJLscK8QUa2yfC5Reo6GO2AjBIBjXt4RAbCng28oR/iStJQ4wgljoQFVrsM91oXByzrD90aULZ76obG2QJKbZtcMDeU7vD5iSZRAjIZmASuZBxTU947lC9W5YUezHBS7uyLknXyet75rbyAe+8qePlh46P+e0Z8/+kw6ygH4xG39TpymetSWT8wNVo/e3hu/YvO4uJ7gxb1gplf17Y3kFZmjmxGg8U9+aA93Fo+Fy1EsMepGGdD1Ww4jR2o4OR8PyB1kERXkkAgAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 100 step 1 \r | extend y=iff(x == 20 or x == 80, 10 * rand() + 10 + (50 - x) / 2, 10 * rand() + 10) // generate a sample series with outliers at x=20 and x=80\r | summarize x=make_list(x), series=make_list(y)\r | extend series_stats(series), outliers=series_outliers(series)\r | mv-expand x to typeof(long), series to typeof(double), outliers to typeof(double)\r | project\r x,\r series,\r outliers_removed=iff(outliers > 1.5 or outliers < -1.5, series_stats_series_avg, series) // replace outliers with the average\r | render linechart\r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-outliersfunction","series-outliersfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_pearson_correlation","Calculates the pearson correlation coefficient of two numeric series inputs.",`See: [Pearson correlation coefficient](https://en.wikipedia.org/wiki/Pearson_correlation_coefficient).\r \r ## Syntax\r \r \`series_pearson_correlation(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | The arrays of numeric values for calculating the correlation coefficient.|\r \r ## Returns\r \r The calculated Pearson correlation coefficient between the two inputs. Any non-numeric element or non-existing element (arrays of different sizes) yields a \`null\` result.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03MQQrCMBCF4b2neEsrQknBZe/gDUqILxJskjIzghQPb1tBu5353ye+3Al1iFIzHKziAjVOcIc3+DKWG7RDjw6ntWtbXCmRwRCqCEdvqZal1WfOXtK8aT2yf3AYk9pRXXP+Ertb1/z5nTOEyhhTSCy2DJSSqMNEL7o9f+GirmjzAZfhTjnAAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range s1 from 1 to 5 step 1\r | extend s2 = 2 * s1 // Perfect correlation\r | summarize s1 = make_list(s1), s2 = make_list(s2)\r | extend correlation_coefficient = series_pearson_correlation(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|correlation_coefficient|\r |---|---|---|\r |[1,2,3,4,5]|[2,4,6,8,10]|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-pearson-correlationfunction","series-pearson-correlationfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_periods_detect","Finds the most significant periods that exist in a time series.",`## Syntax\r \r \`series_periods_detect(\`*series*\`,\` *min_period*\`,\` *max_period*\`,\` *num_periods*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values, typically the resulting output of the [make-series](make-seriesoperator.md) or [make_list](makelist-aggfunction.md) operators.|\r | *min_period* | real | ✓ | The minimal period for which to search.|\r | *max_period* | real | ✓ | The maximal period for which to search.|\r | *num_periods* | long | ✓ | The maximum required number of periods. This number will be the length of the output dynamic arrays.|\r \r > [!IMPORTANT]\r >\r > * The algorithm can detect periods containing at least 4 points and at most half of the series length.\r > * Set the *min_period* a little below and *max_period* a little above the periods you expect to find in the time series. For example, if you have an hourly aggregated signal, and you look for both daily and weekly periods (24 and 168 hours respectively), you can set *min_period*=0.8\\*24, *max_period*=1.2\\*168, and leave 20% margins around these periods.\r > * The input time series must be regular. That is, aggregated in constant bins, which is always the case if it has been created using [make-series](make-seriesoperator.md). Otherwise, the output is meaningless.\r \r ## Returns\r \r The function outputs a table with two columns:\r \r * *periods*: A dynamic array containing the periods that have been found, in units of the bin size, ordered by their scores.\r * *scores*: A dynamic array containing values between 0 and 1. Each array measures the significance of a period in its respective position in the *periods* array.`,`The following query embeds a snapshot of a month of an application\u2019s traffic, aggregated twice a day. The bin size is 12 hours.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2OvW7DMAyE9z4FRwfwINrW35AnKYJCcITEQaIGgocKyMP3LnY7kDiS95F81qWs0o7nVtJjmbvPYHrRMfYSPISicqEXOyGgrSJGOpCCg5jQibRaVHFiB3C0FAA8Rk53GNPJ77AfyAx/DG6oIeTYN0pltifcuN20dluhfEINvwiRimxgqUze/isMIn+An2vf8b7BZMgGrlKWgXcH3TFVHvLmdPh4ybN+3/K8ys+xpnLJHUyp1tS+7rlc1mvXDvAimgjcNZdzrnJfSp6vqa6/5GXgcmIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])\r | project x=range(1, array_length(y), 1), y \r | render linechart\r \`\`\`\r \r \r Running \`series_periods_detect()\` on this series, results in the weekly period, 14 points long.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA01Qy26DMBC89yt8BAlFXsCvQ76kihAKVkKUEmQ41FI+vjNAqx52Pbs7s7PynMZpVfk85Kn/Gq/Fp9eVkiZUyjsAQWV9pUyLADaCaMhA8hagRSeQalCFlh2IgyGAwGFk5RBj2rpD7Gpq6l8NPERTZNnXQqT3I2yzexqzrxAeIZpX+EBErWcpTM78IQwCbwCfa7fYPJg0tZ6rhKWnby2HTIRGTl/Kj7ea0+sRr6v6Pqd+usUCpD6lPnfPON3We5FLcBFZqX/sJaYxLt2M5zUs3RBXdItcKX3iX2y5Ln8A3Zvs/YABAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])\r | project x=range(1, array_length(y), 1), y \r | project series_periods_detect(y, 0.0, 50.0, 2)\r \`\`\`\r \r **Output**\r \r | series\\_periods\\_detect\\_y\\_periods | series\\_periods\\_detect\\_y\\_periods\\_scores |\r |-------------|-------------------|\r | [14.0, 0.0] | [0.84, 0.0] |\r \r > [!NOTE]\r > The daily period that can be also seen in the chart wasn't found because the sampling is too coarse (12h bin size), so a daily period of 2 bins is below the minimum period size of 4 points, required by the algorithm.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-periods-detectfunction","series-periods-detectfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_periods_validate","Checks whether a time series contains periodic patterns of given lengths.",`Often a metric measuring the traffic of an application is characterized by a weekly or daily period. This period can be confirmed by running \`series_periods_validate()\` that checks for a weekly and daily period.\r \r ## Syntax\r \r \`series_periods_validate(\`*series*\`,\` *period1* [ \`,\` *period2* \`,\` . . . ] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values, typically the resulting output of [make-series](make-seriesoperator.md) or [make_list](makelist-aggfunction.md) operators.|\r | *period1*, *period2*, etc.| real | ✓ | The periods to validate in units of the bin size. For example, if the series is in 1h bins, a weekly period is 168 bins. At least one period is required.|\r \r > [!IMPORTANT]\r >\r > * The minimal value for each of the *period* parameters is **4** and the maximal is half of the length of the input series. For a *period* argument outside these bounds, the output score will be **0**.\r > * The input time series must be regular, that is, aggregated in constant bins, and is always the case if it has been created using [make-series](make-seriesoperator.md). Otherwise, the output is meaningless.\r > * The function accepts up to 16 periods to validate.\r > \r \r ## Returns\r \r The function outputs a table with two columns:\r \r * *periods*: A dynamic array that contains the periods to validate as supplied in the input.\r * *scores*: A dynamic array that contains a score between 0 and 1. The score shows the significance of a period in its respective position in the *periods* array.`,`The following query embeds a snapshot of a month of an application\u2019s traffic, aggregated twice a day (the bin size is 12 hours).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2OvW7DMAyE9z4FRwfwINrW35AnKYJCcITEQaIGgocKyMP3LnY7kDiS95F81qWs0o7nVtJjmbvPYHrRMfYSPISicqEXOyGgrSJGOpCCg5jQibRaVHFiB3C0FAA8Rk53GNPJ77AfyAx/DG6oIeTYN0pltifcuN20dluhfEINvwiRimxgqUze/isMIn+An2vf8b7BZMgGrlKWgXcH3TFVHvLmdPh4ybN+3/K8ys+xpnLJHUyp1tS+7rlc1mvXDvAimgjcNZdzrnJfSp6vqa6/5GXgcmIBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])\r | project x=range(1, array_length(y), 1), y \r | render linechart\r \`\`\`\r \r \r If you run \`series_periods_validate()\` on this series to validate a weekly period (14 points long) it results in a high score, and with a **0** score when you validate a five-day period (10 points long).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA01Qy26DMBC89yt8BAlFXsCvQ76kqpAVrJQqJcigqJb68Z0JtOphl9ndmZ01S57mTZXzWOb4OV2qV68bJV1olHcAgsr6RpkeAWwE0ZGB5C1Aj04g1aAKPTsQB0MAgcPIyiHGtHeH2LXUtL8aeIimyLKvhUjvR9hu9zRmXyE8QjSv8IGIWs9SmJz5QxgE3gA+1z7j6cGkqfVcJSw9fVs5ZCI0cvqtfvlWS75/pMumvs45ztdUgRRzjmW4pfm6vVelBhdRlPrHXlOe0jos+NzHdXjE2zTGLVWFzz3xL+uTrn8ATfvv2oABAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])\r | project x=range(1, array_length(y), 1), y \r | project series_periods_validate(y, 14.0, 10.0)\r \`\`\`\r \r **Output**\r \r | series\\_periods\\_validate\\_y\\_periods | series\\_periods\\_validate\\_y\\_scores |\r |-------------|-------------------|\r | [14.0, 10.0] | [0.84, 0.0] |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-periods-validatefunction","series-periods-validatefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_pow","Calculates the element-wise power of two numeric series inputs.",`## Syntax\r \r \`series_pow(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | Arrays of numeric values. The first array, or base, is element-wise raised to the power of the second array, or power, into a dynamic array result.|\r \r ## Returns\r \r A dynamic array of calculated element-wise power operation between the two inputs. Any non-numeric element or non-existing element, such as in the case of arrays of different sizes, yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUahQsFVIqcxLzM1M1og21FEw0lEw1lEwidXUUai0xZQw0DON1eSqUUitKEnNS1GoiC/IL4+vBJpRnFqUmVoM4mpUALVqAgA61Qq1XgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print x = dynamic([1, 2, 3, 4]), y=dynamic([1, 2, 3, 0.5])\r | extend x_pow_y = series_pow(x, y) \r \`\`\`\r \r **Output**\r \r |x|y|x_pow_y|\r |---|---|---|\r |[1,2,3,4]|[1,2,3,0.5]|[1.0,4.0,27.0,2.0]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-powfunction","series-powfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_seasonal","Calculates the seasonal component of a series, according to the detected or given seasonal period.",`## Syntax\r \r \`series_seasonal(\`*series* [\`,\` *period* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values.|\r | *period* | int | | The number of bins for each seasonal period. This value can be any positive integer. By default, the value is set to -1, which automatically detects the period using the [series_periods_detect()](series-periods-detectfunction.md) with a threshold of *0.7*. If seasonality is not detected, the function returns zeros. If a different value is set, it ignores seasonality and returns a series of zeros.|\r \r ## Returns\r \r A dynamic array of the same length as the *series* input that contains the calculated seasonal component of the series. The seasonal component is calculated as the *median* of all the values that correspond to the location of the bin, across the periods.`,`### Auto detect the period\r \r In the following example, the series' period is automatically detected. The first series' period is detected to be six bins and the second five bins. The third series' period is too short to be detected and returns a series of zeroes.\r See the next example on [how to force the period](#force-a-period).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSi2TanMS8zNTNaINtJRMNVRMNZRMAGTQK4hmCRZJFaTq0ahNC8zP09BowDdFgugApAiEyhtAMVkicVq4rPKEOwiU7CjgFrMwI5FEYHoT60oSc1LUSiOL05NLM7PS8xRsFUoTi3KTEWIaBRrAgCrZVUQMAEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print s=dynamic([2, 5, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2, 1])\r | union (print s=dynamic([8, 12, 14, 12, 10, 10, 12, 14, 12, 10, 10, 12, 14, 12, 10, 10, 12, 14, 12, 10]))\r | union (print s=dynamic([1, 3, 5, 2, 4, 6, 1, 3, 5, 2, 4, 6]))\r | extend s_seasonal = series_seasonal(s)\r \`\`\`\r \r **Output**\r \r |s|s_seasonal|\r |---|---|\r |[2,5,3,4,3,2,1,2,3,4,3,2,1,2,3,4,3,2,1,2,3,4,3,2,1]|[1.0,2.0,3.0,4.0,3.0,2.0,1.0,2.0,3.0,4.0,3.0,2.0,1.0,2.0,3.0,4.0,3.0,2.0,1.0,2.0,3.0,4.0,3.0,2.0,1.0]|\r |[8,12,14,12,10,10,12,14,12,10,10,12,14,12,10,10,12,14,12,10]|[10.0,12.0,14.0,12.0,10.0,10.0,12.0,14.0,12.0,10.0,10.0,12.0,14.0,12.0,10.0,10.0,12.0,14.0,12.0,10.0]|\r |[1,3,5,2,4,6,1,3,5,2,4,6]|[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]|\r \r ### Force a period\r \r In this example, the series' period is too short to be detected by [series_periods_detect()](series-periods-detectfunction.md), so we explicitly force the period to get the seasonal pattern.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSi2TanMS8zNTNaINtRRMNZRMNVRgDOMdBRMdBTMYjUVuGoUSvMy8/MUNApwaoOqxqZfE6g/taIkNS9FoTi+ODWxOD8vMUfBVqE4tSgzFSGiUQzUqQkAj46UZJkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s=dynamic([1, 3, 5, 1, 3, 5, 2, 4, 6]) \r | union (print s=dynamic([1, 3, 5, 2, 4, 6, 1, 3, 5, 2, 4, 6]))\r | extend s_seasonal = series_seasonal(s, 3)\r \`\`\`\r \r **Output**\r \r |s|s_seasonal|\r |---|---|\r |[1,3,5,1,3,5,2,4,6]|[1.0,3.0,5.0,1.0,3.0,5.0,1.0,3.0,5.0]|\r |[1,3,5,2,4,6,1,3,5,2,4,6]|[1.5,3.5,5.5,1.5,3.5,5.5,1.5,3.5,5.5,1.5,3.5,5.5]|\r \r ## See also\r \r * [series_periods_detect()](series-periods-detectfunction.md)\r * [series_periods_validate()](series-periods-validatefunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-seasonalfunction","series-seasonalfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_sign","Calculates the element-wise sign of the numeric series input.",`## Syntax\r \r \`series_sign(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the sign function is applied.|\r \r ## Returns\r \r A dynamic array of calculated sign function values. -1 for negative, 0 for 0, and 1 for positive. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY101Ew0FGwiNXkqlFIrShJzUsBKYkvzkzPA6orTi3KTC0G8zSAwpoAa5KS9UQAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-6, 0, 8])\r | extend arr_sign = series_sign(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_sign|\r |---|---|\r |[-6,0,8]|[-1,0,1]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-signfunction","series-signfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_sin","Calculates the element-wise sine of the numeric series input.",`## Syntax\r \r \`series_sin(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values over which the sine function is applied.|\r \r ## Returns\r \r A dynamic array of calculated sine function values. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY11FEw0FEwjNXkqlFIrShJzUsBKYkvzswDKitOLcpMLQZxNICCmgAHnzJlQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-1, 0, 1])\r | extend arr_sin = series_sin(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_sin|\r |---|---|\r |[-6.5,0,8.2]|[-0.8414709848078965,0.0,0.8414709848078965]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-sinfunction","series-sinfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_stats","Returns statistics for a numerical series in a table with a column for each statistic.","> [!NOTE]\r\n> This function returns multiple values. If you only need a single value, such as the average, consider using [series_stats_dynamic](./series-stats-dynamicfunction.md).\r\n\r\n## Syntax\r\n\r\n`...` `|` `extend` `(` *Name*`,` ... `)` `=` `series_stats` `(` *series* [`,` *ignore_nonfinite*] `)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *Name* | string | | The column labels for the output table. If not provided, the system will generate them. If you provide a limited number of names, the table will show only those columns.|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *ignore_nonfinite* | bool | | Determines if the calculation includes non-finite values like `null`, `NaN`, `inf`, and so on. The default is `false`, which will result in `null` if non-finite values are present.|\r\n\r\n## Returns\r\n\r\nA table with a column for each of the statistics displayed in the following table.\r\n\r\n|Statistic | Description|\r\n|--|--|\r\n| `min` | The minimum value in the input array.|\r\n| `min_idx`| The first position of the minimum value in the input array.|\r\n| `max` | The maximum value in the input array.|\r\n| `max_idx`| The first position of the maximum value in the input array.|\r\n| `avg`| The average value of the input array.|\r\n| `variance` | The sample variance of input array.|\r\n| `stdev`| The sample standard deviation of the input array.|",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUaiwTanMS8zNTNaINjLWUTAx01EA0RbmQDaQ0lEAcsxNgYI6CqZAOUMo1xjINwSptYzVVOCqUSgoys9KTS5RKE4tykwtji8uSSwp1qjQBADbRN1SZAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print x=dynamic([23, 46, 23, 87, 4, 8, 3, 75, 2, 56, 13, 75, 32, 16, 29]) \r | project series_stats(x)\r \`\`\`\r \r **Output**\r \r |series_stats_x_min|series_stats_x_min_idx|series_stats_x_max|series_stats_x_max_idx|series_stats_x_avg|series_stats_x_stdev|series_stats_x_variance|\r |---|---|---|---|---|---|---|\r |2|8|87|3|32.8|28.5036338535483|812.457142857143|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-statsfunction","series-statsfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_stats_dynamic","Returns statistics for a series in a dynamic object.","## Syntax\r\n\r\n`series_stats_dynamic(`*series* [`,` *ignore_nonfinite* ]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *series* | dynamic | ✓ | An array of numeric values.|\r\n| *ignore_nonfinite* | bool | | Indicates whether to calculate the statistics while ignoring non-finite values, such as *null*, *NaN*, *inf*, and so on. The default is `false`, which returns `null` if non-finite values are present in the array.|\r\n\r\n## Returns\r\n\r\nA dynamic property bag object with the following content:\r\n\r\n* `min`: The minimum value in the input array.\r\n* `min_idx`: The first position of the minimum value in the input array.\r\n* `max`: The maximum value in the input array.\r\n* `max_idx`: The first position of the maximum value in the input array.\r\n* `avg`: The average value of the input array.\r\n* `variance`: The sample variance of input array.\r\n* `stdev`: The sample standard deviation of the input array.\r\n* `sum`: The sum of the values in the input array.\r\n* `len`: The length of the input array.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUaiwTanMS8zNTNaINjLWUTAx01EA0RbmQDaQ0lEAcsxNgYI6CqZAOUMo1xjINwSptYzVVOCqUSgoys9KTS5RKC5JLCm2LU4tykwtjgdz4mHmV2gCANNsjChyAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print x=dynamic([23, 46, 23, 87, 4, 8, 3, 75, 2, 56, 13, 75, 32, 16, 29]) \r | project stats=series_stats_dynamic(x)\r \`\`\`\r \r **Output**\r \r |stats|\r |---|\r |{"min": 2.0, "min_idx": 8, "max": 87.0, "max_idx": 3, "avg": 32.8, "stdev": 28.503633853548269, "variance": 812.45714285714291, "sum": 492.0, "len": 15}|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-stats-dynamicfunction","series-stats-dynamicfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_subtract","Calculates the element-wise subtraction of two numeric series inputs.",`## Syntax\r \r \`series_subtract(\`*series1*\`,\` *series2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series1*, *series2* | dynamic | ✓ | Arrays of numeric values, the second array to be element-wise subtracted from the first array.|\r \r ## Returns\r \r A dynamic array of calculated element-wise subtract operation between the two inputs. Any non-numeric element or non-existing element, such as in the case of arrays of different sizes, yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA1XMMQoCMRBG4d5T/OVG0sxae5YQ4ygqbsLMCEnw8EYRF9uPx5O4nBkVJ8l3ECxjBzUuoM0TXI2XIxr2o9hiXqkPal8qkq+cDEoDS0y3EEVim6pvvjsPnf+9ezSP6tabUtDHwSQmC59aWS6sP5yU3hv3Ar+CKt2tAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | project s1 = pack_array(x,y,z), s2 = pack_array(z, y, x)\r | extend s1_subtract_s2 = series_subtract(s1, s2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s1_subtract_s2|\r |---|---|---|\r |[1,2,4]|[4,2,1]|[-3,0,3]|\r |[2,4,8]|[8,4,2]|[-6,0,6]|\r |[3,6,12]|[12,6,3]|[-9,0,9]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-subtractfunction","series-subtractfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"series_tan","Calculates the element-wise tangent of the numeric series input.",`## Syntax\r \r \`series_tan(\`*series*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *series* | dynamic | ✓ | An array of numeric values on which the tangent function is applied.|\r \r ## Returns\r \r A dynamic array of calculated tangent function values. Any non-numeric element yields a \`null\` element value.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVUipzEvMzUzWiNY11FEw0FEwjNXkqlFIrShJzUsBKYkvScwDKitOLcpMLQZxNICCmgCTiCSoQgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = dynamic([-1, 0, 1])\r | extend arr_tan = series_tan(arr)\r \`\`\`\r \r **Output**\r \r |arr|arr_tan|\r |---|---|\r |[-6.5,0,8.2]|[-1.5574077246549023,0.0,1.5574077246549023]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/series-tanfunction","series-tanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"session_count","Calculates the session count based on the ID column over a timeline. The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*TabularExpression* `| evaluate` `session_count(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *Bin*`,` *LookBackWindow* [`,` *dim1*`,` *dim2*`,` ...]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *TabularExpression* | string | ✓ | The tabular expression that serves as input.|\r\n| *IdColumn* | string | ✓ | The name of the column with ID values that represents user activity.|\r\n| *TimelineColumn* | string | ✓ | The name of the column that represents the timeline.|\r\n| *Start* | scalar | ✓ | The start of the analysis period.|\r\n| *End* | scalar | ✓ | The end of the analysis period.|\r\n| *Bin* | scalar | ✓ | The session's analysis step period.|\r\n| *LookBackWindow* | scalar | ✓ | The session lookback period. If the ID from `IdColumn` appears in a time window within `LookBackWindow`, the session is considered to be an existing one. If the ID doesn't appear, then the session is considered to be new.|\r\n| *dim1*, *dim2*, ... | string | | A list of the dimensions columns that slice the session count calculation.|\r\n\r\n## Returns\r\n\r\nReturns a table that has the session count values for each timeline period and for each existing dimensions combination.\r\n\r\nOutput table schema is:\r\n\r\n|*TimelineColumn*|dim1|..|dim_n|count_sessions|\r\n|---|---|---|---|---|--|--|--|--|--|--|\r\n|type: as of *TimelineColumn*|..|..|..|long|",`For this example, the data is deterministic, and we use a table with two columns:\r \r - \`Timeline\`: a running number from 1 to 10,000\r - \`Id\`: ID of the user from 1 to 50\r \r \r \`Id\` appears at the specific \`Timeline\` slot if it's a divider of \`Timeline\` (Timeline % Id == 0).\r \r An event with \`Id==1\` will appear at any \`Timeline\` slot, an event with \`Id==2\` at every second \`Timeline\` slot, and so on.\r \r Here are 20 lines of the data:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12PzwqDMAzG7z7FdxlsMFAHO40+wGDH3aWzcdY/jdSCE3z4tVM3WS4J+ZJfvjTkkCnpJASsNE/CXbfUaEMoLLdI4Rhp4gO9ow5pBB8T6OXIKGRZTaNfXdsVa4NaGyW0MWSxn5lXtaGdV9QfRqQHsJnrBTeUZDeOdgEkBJJF7ixXlLvvwNHrlyiOcWOuA6ugAUHowQVcSQifRp9/owlslbf4GH8HZJ8HRshed7ImnJI3eyONGCMBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let _data = range Timeline from 1 to 10000 step 1\r | extend __key = 1\r | join kind=inner (range Id from 1 to 50 step 1 | extend __key=1) on __key\r | where Timeline % Id == 0\r | project Timeline, Id;\r // Look on few lines of the data\r _data\r | order by Timeline asc, Id asc\r | take 20\r \`\`\`\r \r **Output**\r \r |Timeline|Id|\r |---|---|\r |1|1|\r |2|1|\r |2|2|\r |3|1|\r |3|3|\r |4|1|\r |4|2|\r |4|4|\r |5|1|\r |5|5|\r |6|1|\r |6|2|\r |6|3|\r |6|6|\r |7|1|\r |7|7|\r |8|1|\r |8|2|\r |8|4|\r |8|8|\r \r Let's define a session in next terms: session considered to be active as long as user (\`Id\`) appears at least once at a timeframe of 100 time slots, while session look-back window is 41 time slots.\r \r The next query shows the count of active sessions according to the above definition.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA12PzQrCMBCE732KuQgKBRvQg0iOHrx7L6HZarRuSrr+gQ/vWqsUh0CWzO6XnYYEpXfiYJEc7wm7cKYmMKFO8QwDiVip0Am1MBlUT9BdiD3K8kQPnfw+H2NgnAJ7G5gpYfpBbv0ItiwG1B/Gmhkif+oBdztQGi00eYOsRTHYbYpHquTXkKu/zuZzbJQZa/SxPNWBg4TIWZ8z01+vrrk4IXTUdWqUVbywTLc+H6GMnkLVXzkWZqaTSbfVWO+O6uCSvADwRV6RPgEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let _data = range Timeline from 1 to 9999 step 1\r | extend __key = 1\r | join kind=inner (range Id from 1 to 50 step 1 | extend __key=1) on __key\r | where Timeline % Id == 0\r | project Timeline, Id;\r // End of data definition\r _data\r | evaluate session_count(Id, Timeline, 1, 10000, 100, 41)\r | render linechart \r \`\`\`\r \r `,"https://docs.microsoft.com/azure/data-explorer/kusto/query/session-count-plugin","session-count-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"set_difference","Returns a `dynamic` (JSON) array of the set of all distinct values that are in the first array but aren't in other arrays - (((arr1 \\ arr2) \\ arr3) \\ ...).",`## Syntax\r \r \`set_difference(\`*set1*\`,\` *set2* [\`,\`*set3*, ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *set1...setN* | dynamic | ✓ | Arrays used to create a difference set. A minimum of 2 arrays are required. See [pack_array](packarrayfunction.md).|\r \r ## Returns\r \r Returns a dynamic array of the set of all distinct values that are in *set1* but aren't in other arrays.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA23MsQ7CMAwE0J2vuLFBWdLOfEtltQ4CRBK5kZpE/XicCVWweHi+O6FwZxR4iW845IgJW+YEdznAJXNYUXHTxBXjl5pSPdOu1M5ETi3R8ppJhOpQLKqF3mYsaPx9dp7+dXajq0nik5eMjfO8Prxn4bDwQK6P9ab5AIGKxtfOAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | extend w = z * 2\r | extend a1 = pack_array(x,y,x,z), a2 = pack_array(x, y), a3 = pack_array(x,y,w)\r | project set_difference(a1, a2, a3)\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |[4]|\r |[8]|\r |[12]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVShOLYlPyUxLSy1KzUtO1UipzEvMzUzWiDbUMdIxjtXUUUAX0QQAej8Kqz4AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = set_difference(dynamic([1,2,3]), dynamic([1,2,3]))\r \`\`\`\r \r **Output**\r \r |arr|\r |---|\r |[]|\r \r ## See also\r \r * [\`set_union()\`](setunionfunction.md)\r * [\`set_intersect()\`](setintersectfunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/setdifferencefunction","setdifferencefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"set_has_element","Determines whether the specified set contains the specified element.","## Syntax\r\n\r\n`set_has_element(`*set*`,` *value*`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *set* | dynamic | ✓ | The input array to search.|\r\n| *value* | | ✓ | The value for which to search. The value should be of type `long`, `int`, `double`, `datetime`, `timespan`, `decimal`, `string`, `guid`, or `bool`.|\r\n\r\n## Returns\r\n\r\n`true` or `false` depending on if the value exists in the array.",`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKrJNqcxLzM1M1ohWKsnILFbSUVCCkIl5IDK1IjG3ICdVKVZTgatGoaAoPys1uUQhKLW4NKfEtji1JD4jsTg+NSc1NzWvRANoHJIWTQCSW+h8ZAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print arr=dynamic(["this", "is", "an", "example"]) \r | project Result=set_has_element(arr, "example")\r \`\`\`\r \r **Output**\r \r |Result|\r |---|\r |true|\r \r ## See also\r \r Use [\`array_index_of(arr, value)\`](arrayindexoffunction.md) to find the position at which the value exists in the array. Both functions are equally performant.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sethaselementfunction","sethaselementfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"set_intersect","Returns a `dynamic` array of the set of all distinct values that are in all arrays - (arr1 \u2229 arr2 \u2229 ...).",`## Syntax\r \r \`set_intersect(\`*set1*\`,\` *set2* [\`,\` *set3*, ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *set1...setN* | dynamic | ✓ | Arrays used to create an intersect set. A minimum of 2 arrays are required. See [pack_array](packarrayfunction.md).|\r \r ## Returns\r \r Returns a dynamic array of the set of all distinct values that are in all arrays.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA13MsQ7CMAwE0J2vuLFBWdLOfEtlFYMAkUSOpSYVH48zoTDeO/uE4p1RcZP0RoAmLCjKGeH0AVfleEXDxS7OmH90GLWRdqNjJApmmbbXSiLUpuqbr/5wHjT/N2idl5F3X53NZUlP3hSFdX1EZSmWJgp9pz+5L5hXyQHGAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | extend w = z * 2\r | extend a1 = pack_array(x,y,x,z), a2 = pack_array(x, y), a3 = pack_array(w,x)\r | project set_intersect(a1, a2, a3)\r \`\`\`\r \r **Output**\r \r |Column1|\r |---|\r |[1]|\r |[2]|\r |[3]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVShOLYkH8lKLilOTSzRSKvMSczOTNaINdRSMdBSMYzV1FOBiJjqmsZqaAI3W9uo9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = set_intersect(dynamic([1, 2, 3]), dynamic([4,5]))\r \`\`\`\r \r **Output**\r \r |arr|\r |---|\r |[]|\r \r ## See also\r \r * [\`set_union()\`](setunionfunction.md)\r * [\`set_difference()\`](setdifferencefunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/setintersectfunction","setintersectfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"set_union","Returns a `dynamic` array of the set of all distinct values that are in any of the arrays - (arr1 \u222A arr2 \u222A ...).",`## Syntax\r \r \`set_union(\`*set1*\`,\` *set2* [\`,\` *set3*, ...]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *set1...setN* | dynamic | ✓ | Arrays used to create a union set. A minimum of 2 arrays are required. See [pack_array](packarrayfunction.md).|\r \r ## Returns\r \r Returns a dynamic array of the set of all distinct values that are in any of arrays.`,`### Set from multiple dynamic array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA13MMQ7CMAyF4Z1TvLFBXprMPQNHqKwSECCSKHXVJOLwuBMK62e/P3O4exTccnxjhEQ4rOITxtMHvogPV1RM+nGG/VFTqj3tSq0nHtUSL6+Zc+Y6FKpUqBkC2/8L6sGu591oLOX49ItojdgSO7psMq1e5i08YhiUNXdszRcYE8jtzQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 3 step 1\r | extend y = x * 2\r | extend z = y * 2\r | extend w = z * 2\r | extend a1 = pack_array(x,y,x,z), a2 = pack_array(x, y), a3 = pack_array(w)\r | project a1,a2,a3,Out=set_union(a1, a2, a3)\r \`\`\`\r \r **Output**\r \r |a1|a2|a3|\`Out\`|\r |---|---|---|---|\r |[1,2,1,4]|[1,2]|[8]|[1,2,4,8]|\r |[2,4,2,8]|[2,4]|[16]|[2,4,8,16]|\r |[3,6,3,12]|[3,6]|[24]|[3,6,12,24]|\r \r ### Set from one dynamic array\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUBQ3HoiJDK4WUyrzE3MxkTa5oLgUggHI1otUdTdR1FNQdjcCkOZQdq6mjgKbOGazOGazC2RBMmgDVccUqcNUopFaUpOalKPiXltgWp5bEl+Zl5ueBLdZRAJGaAMqBZpGPAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable (Arr1: dynamic)\r [\r dynamic(['A4', 'A2', 'A7', 'A2']), \r dynamic(['C4', 'C7', 'C1', 'C4'])\r ] \r | extend Out=set_union(Arr1, Arr1)\r \`\`\`\r \r **Output**\r \r |Arr1|\`Out\`|\r |---|---|\r |["A4","A2","A7","A2"]|["A4","A2","A7"]|\r |["C4","C7","C1","C4"]|["C4","C7","C1"]|\r \r ## See also\r \r * [\`set_intersect()\`](setintersectfunction.md)\r * [\`set_difference()\`](setdifferencefunction.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/setunionfunction","setunionfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sign","Returns the sign of the numeric expression.",`## Syntax\r \r \`sign(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | real | ✓ | The number for which to return the sign.|\r \r ## Returns\r \r The positive (+1), zero (0), or negative (-1) sign of the specified expression.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSg2VLBVKM5Mz9PQNTHS1FEoNoLxDUA8YxjP0FDPSBMA4mpHrTMAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print s1 = sign(-42), s2 = sign(0), s3 = sign(11.2)\r \`\`\`\r \r **Output**\r \r |s1|s2|s3|\r |---|---|---|\r |-1|0|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/signfunction","signfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sin","Returns the sine function value of the specified angle. The angle is specified in radians.",`## Syntax\r \r \`sin(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | real | ✓ | The value in radians for which to calculate the sine.|\r \r ## Returns\r \r The sine of *number* of radians.`,`\`\`\`\r print sin(1)\r \`\`\`\r \r **Output**\r \r |result|\r |--|\r |0.841470984807897|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sinfunction","sinfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sliding_window_counts","Calculates counts and distinct count of values in a sliding window over a lookback period, using the technique described [here](samples.md#perform-aggregations-over-a-sliding-window). The plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.","## Syntax\r\n\r\n*T* `| evaluate` `sliding_window_counts(`*IdColumn*`,` *TimelineColumn*`,` *Start*`,` *End*`,` *LookbackWindow*`,` *Bin* `,` [*dim1*`,` *dim2*`,` ...]`)`\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The input tabular expression.|\r\n| *IdColumn* | string | ✓ | The name of the column with ID values that represent user activity. |\r\n| *TimelineColumn* | string | ✓ | The name of the column representing the timeline.|\r\n| *Start* | int, long, real, datetime, or timespan | ✓ | The analysis start period.|\r\n| *End* | int, long, real, datetime, or timespan | ✓ | The analysis end period.|\r\n| *LookbackWindow* | int, long, real, datetime, or timespan | ✓ | The lookback period. This value should be a multiple of the *Bin* value, otherwise the *LookbackWindow* will be rounded down to a multiple of the *Bin* value. For example, for `dcount` users in past `7d`: *LookbackWindow* = `7d`.|\r\n| *Bin* | int, long, real, datetime, timespan, or string | ✓ | The analysis step period. The possible string values are `week`, `month`, and `year` for which all periods will be [startofweek](startofweekfunction.md), [startofmonth](startofmonthfunction.md), [startofyear](startofyearfunction.md) respectively. |\r\n| *dim1*, *dim2*, ... | string | | A list of the dimensions columns that slice the activity metrics calculation.|\r\n\r\n## Returns\r\n\r\nReturns a table that has the count and distinct count values of Ids in the lookback period, for each timeline period (by bin) and for each existing dimensions combination.\r\n\r\nOutput table schema is:\r\n\r\n|*TimelineColumn*|`dim1`|..|`dim_n`|`count`|`dcount`|\r\n|---|---|---|---|---|---|\r\n|type: as of *TimelineColumn*|..|..|..|long|long|",`Calculate counts and \`dcounts\` for users in past week, for each day in the analysis period. \r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA63TQWvCMBQH8Hs/xbtpIYJtNxTLDhu76LljhzEk7QsuGJPRpIrgh99rM50MWiLYQiD0R96f8o8SDqzjtYMnQO6EkzsxTqfJDCYwnbdLEueRIiU09ppZnEOHlDHbklfbd6nRHMhnmIP/VEpN+wT9aYU/i95SifGbFfUSF5SklnrDoKAJlGr3vbgMjCOg56NbRy+mHLHevAy8euV7iXd0K/OlA1hYuGfNNfJemBI8S9eoQReQLg2dm/3BobE3s8F0WdC/u1LC2WOvewg67bFVn3lURCcQe64aUmCVRCrg+tDVd12ZRjv7286rVjJ/ZVh7J9i/zrO26PEPos0Ri1cDAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let start = datetime(2017 - 08 - 01);\r let end = datetime(2017 - 08 - 07); \r let lookbackWindow = 3d; \r let bin = 1d;\r let T = datatable(UserId: string, Timestamp: datetime)\r [\r 'Bob', datetime(2017 - 08 - 01), \r 'David', datetime(2017 - 08 - 01), \r 'David', datetime(2017 - 08 - 01), \r 'John', datetime(2017 - 08 - 01), \r 'Bob', datetime(2017 - 08 - 01), \r 'Ananda', datetime(2017 - 08 - 02), \r 'Atul', datetime(2017 - 08 - 02), \r 'John', datetime(2017 - 08 - 02), \r 'Ananda', datetime(2017 - 08 - 03), \r 'Atul', datetime(2017 - 08 - 03), \r 'Atul', datetime(2017 - 08 - 03), \r 'John', datetime(2017 - 08 - 03), \r 'Bob', datetime(2017 - 08 - 03), \r 'Betsy', datetime(2017 - 08 - 04), \r 'Bob', datetime(2017 - 08 - 05), \r ];\r T\r | evaluate sliding_window_counts(UserId, Timestamp, start, end, lookbackWindow, bin)\r \`\`\`\r \r **Output**\r \r |Timestamp|Count|\`dcount\`|\r |---|---|---|\r |2017-08-01 00:00:00.0000000|5|3|\r |2017-08-02 00:00:00.0000000|8|5|\r |2017-08-03 00:00:00.0000000|13|5|\r |2017-08-04 00:00:00.0000000|9|5|\r |2017-08-05 00:00:00.0000000|7|5|\r |2017-08-06 00:00:00.0000000|2|2|\r |2017-08-07 00:00:00.0000000|1|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sliding-window-counts-plugin","sliding-window-counts-plugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"sort","Sorts the rows of the input table into order by one or more columns.","> The `sort` and `order` operators are equivalent\r\n\r\n## Syntax\r\n\r\n*T* `| sort by` *column* [`asc` | `desc`] [`nulls first` | `nulls last`] [`,` ...]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input to sort. |\r\n| *column* | scalar | ✓ | The column of *T* by which to sort. The type of the column values must be numeric, date, time or string.|\r\n| `asc` or `desc` | string | | `asc` sorts into ascending order, low to high. Default is `desc`, high to low. |\r\n| `nulls first` or `nulls last` | string | | `nulls first` will place the null values at the beginning and `nulls last` will place the null values at the end. Default for `asc` is `nulls first`. Default for `desc` is `nulls last`.|\r\n\r\n## Returns\r\n\r\nA copy of the input table sorted in either ascending or descending order based on the provided column.",`The following example shows storm events by state in alphabetical order with the most recent storms in each state appearing first.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRyC9KSS1SSKpUCC5JLElVSCxO1gExi0pCMnNTFVJSi5MBfa8LRzAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | sort by State asc, StartTime desc\r \`\`\`\r \r This table only shows the top 10 query results.\r \r |StartTime|State|EventType|...|\r |--|--|--|--|\r |2007-12-28T12:10:00Z|ALABAMA|Hail|...|\r |2007-12-28T04:30:00Z|ALABAMA|Hail|...|\r |2007-12-28T04:16:00Z|ALABAMA|Hail|...|\r |2007-12-28T04:15:00Z|ALABAMA|Hail|...|\r |2007-12-28T04:13:00Z|ALABAMA|Hail|...|\r |2007-12-21T14:30:00Z|ALABAMA|Strong Wind|...|\r |2007-12-20T18:15:00Z|ALABAMA|Strong Wind|...|\r |2007-12-20T18:00:00Z|ALABAMA|Strong Wind|...|\r |2007-12-20T18:00:00Z|ALABAMA|Strong Wind|...|\r |2007-12-20T17:45:00Z|ALABAMA|Strong Wind|...|\r |2007-12-20T17:45:00Z|ALABAMA|Strong Wind|...|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sort-operator","sort-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"split","The `split()` function takes a string and splits it into substrings based on a specified delimiter, returning the substrings in an array. Optionally, you can retrieve a specific substring by specifying its index.",`## Syntax\r \r \`split(\`*source*\`,\` *delimiter* [\`,\` *requestedIndex*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | string | ✓ | The source string that will be split according to the given delimiter.|\r | *delimiter* | string | ✓ | The delimiter that will be used in order to split the source string.|\r | *requestedIndex* | int | | A zero-based index. If provided, the returned string array will contain the requested substring at the index if it exists.|\r \r ## Returns\r \r An array of substrings obtained by separating the *source* string by the specified *delimiter*, or a single substring at the specified *requestedIndex*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22OQQrAIAwE731FyKlCQPqeIsF4EkqR1v/TWAvS4F43s5ly5bMuoLnLkeuKMbIIEiCjIxjxHnYtkVDr8CcaIpxS6hzB1tCXEHs9mR77Zph5ZvKpqEmTsS4iXUP/upm9tuEBNARoOvUAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print\r split("aa_bb", "_"), // ["aa","bb"]\r split("aaa_bbb_ccc", "_", 1), // ["bbb"]\r split("", "_"), // [""]\r split("a__b", "_"), // ["a","","b"]\r split("aabbcc", "bb") // ["aa","cc"]\r \`\`\`\r \r |print_0|print_1|print_2|print_3|print4|\r |--|--|--|--|--|\r |["aa","bb"] |["bbb"] |[""] |["a","","b"] |["aa","cc"]`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/splitfunction","splitfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sql_request","The `sql_request` plugin sends a SQL query to a SQL Server network endpoint and returns the results.\r\nIf more than one rowset is returned by SQL, only the first one is used.\r\nThe plugin is invoked with the [`evaluate`](evaluateoperator.md) operator.",'## Syntax\r\n\r\n`evaluate` `sql_request` `(` *ConnectionString* `,` *SqlQuery* [`,` *SqlParameters* [`,` *Options*]] `)` [`:` *OutputSchema*]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required| Description |\r\n|---|---|---|---|\r\n| *ConnectionString* | string | ✓ | The connection string that points at the SQL Server network endpoint. See [valid methods of authentication](#authentication-and-authorization) and how to specify the [network endpoint](#specify-the-network-endpoint). |\r\n| *SqlQuery* | string | ✓ | The query that is to be executed against the SQL endpoint. The query must return one or more row sets, but only the first one is made available for the rest of the Kusto query. |\r\n| *SqlParameters* | dynamic | | A property bag of key-value pairs to pass as parameters along with the query. |\r\n|*Options* | dynamic | | A property bag of key-value pairs to pass more advanced settings along with the query. Currently, only `token` can be set, to pass a caller-provided Azure AD access token that is forwarded to the SQL endpoint for authentication.|\r\n| *OutputSchema* | string | | The names and types for the expected columns of the `sql_request` plugin output. Use the following syntax: `(` *ColumnName* `:` *ColumnType* [`,` ...] `)`.|\r\n\r\n> [!NOTE]\r\n>\r\n> * Specifying the *OutputSchema* is highly recommended, as it allows the plugin to be used in scenarios that might otherwise not work without it, such as a cross-cluster query. The *OutputSchema* can also enable multiple query optimizations.\r\n> * An error is raised if the run-time schema of the first row set returned by the SQL network endpoint doesn\'t match the *OutputSchema* schema.\r\n\r\n## Authentication and authorization\r\n\r\nThe sql_request plugin supports the following three methods of authentication to the\r\nSQL Server endpoint.\r\n\r\n|Authentication method|Syntax|How|Description|\r\n|--|--|--|\r\n|Azure AD-integrated|`Authentication="Active Directory Integrated"`|Add to the *ConnectionString* parameter.|This is the preferred authentication method. The user or application authenticates via Azure AD to your cluster, and the same token is used to access the SQL Server network endpoint.<br/>The principal must have the appropriate permissions on the SQL resource to perform the requested action. For example, to read from the database the principal needs table SELECT permissions, and to write to an existing table the principal needs UPDATE and INSERT permissions. To write to a new table, CREATE permissions are also required.|\r\n|Username and password|`User ID=...; Password=...;`|Add to the *ConnectionString* parameter.|When possible, avoid this method as it may be less secure.|\r\n|Azure AD access token|`dynamic({\'token\': h"eyJ0..."})`|Add in the *Options* parameter.|The access token is passed as `token` property in the *Options* argument of the plugin.|\r\n\r\n> [!NOTE]\r\n> Connection strings and queries that include confidential information or information that should be guarded should be obfuscated to be omitted from any Kusto tracing. For more information, see [obfuscated string literals](scalar-data-types/string.md#obfuscated-string-literals).',`### Send a SQL query using Azure AD-integrated authentication\r \r The following example sends a SQL query to an Azure SQL DB database. It\r retrieves all records from \`[dbo].[Table]\`, and then processes the results on the\r Kusto side. Authentication reuses the calling user's Azure AD token.\r \r > [!NOTE]\r > This example should not be taken as a recommendation to filter or project data in this manner. SQL queries should be constructed to return the smallest data set possible.\r \r \`\`\`\r evaluate sql_request(\r 'Server=tcp:contoso.database.windows.net,1433;'\r 'Authentication="Active Directory Integrated";'\r 'Initial Catalog=Fabrikam;',\r 'select * from [dbo].[Table]') : (Id:long, Name:string)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### Send a SQL query using Username/Password authentication\r \r The following example is identical to the previous one, except that SQL\r authentication is done by username/password. For confidentiality,\r we use obfuscated strings here.\r \r \`\`\`\r evaluate sql_request(\r 'Server=tcp:contoso.database.windows.net,1433;'\r 'Initial Catalog=Fabrikam;'\r h'User ID=USERNAME;'\r h'Password=PASSWORD;',\r 'select * from [dbo].[Table]') : (Id:long, Name:string)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### Send a SQL query using an Azure AD access token\r \r The following example sends a SQL query to an Azure SQL database\r retrieving all records from \`[dbo].[Table]\`, while appending another \`datetime\` column,\r and then processes the results on the Kusto side.\r It specifies a SQL parameter (\`@param0\`) to be used in the SQL query.\r \r \`\`\`\r evaluate sql_request(\r 'Server=tcp:contoso.database.windows.net,1433;'\r 'Authentication="Active Directory Integrated";'\r 'Initial Catalog=Fabrikam;',\r 'select *, @param0 as dt from [dbo].[Table]',\r dynamic({'param0': datetime(2020-01-01 16:47:26.7423305)})) : (Id:long, Name:string, dt: datetime)\r | where Id > 0\r | project Name\r \`\`\`\r \r ### Send a SQL query without a query-defined output schema\r \r The following example sends a SQL query to an Azure SQL database without an output schema. This is not recommended unless the schema is unknown, as it may impact the performance of the query\r \r \`\`\`\r evaluate sql_request(\r 'Server=tcp:contoso.database.windows.net,1433;'\r 'Initial Catalog=Fabrikam;'\r h'User ID=USERNAME;'\r h'Password=PASSWORD;',\r 'select * from [dbo].[Table]')\r | where Id > 0\r | project Name\r \`\`\`\r \r ## Encryption and server validation\r \r The following connection properties are forced when connecting to a SQL Server network\r endpoint, for security reasons.\r \r * \`Encrypt\` is set to \`true\` unconditionally.\r * \`TrustServerCertificate\` is set to \`false\` unconditionally.\r \r \r As a result, the SQL Server must be configured with a valid SSL/TLS server certificate.\r \r ## Specify the network endpoint\r \r Specifying the SQL network endpoint as part of the connection string is mandatory.\r The appropriate syntax is:\r \r \`Server\` \`=\` \`tcp:\` *FQDN* [\`,\` *Port*]\r \r Where:\r \r * *FQDN* is the fully qualified domain name of the endpoint.\r * *Port* is the TCP port of the endpoint. By default, \`1433\` is assumed.\r \r \r > [!NOTE]\r > Other forms of specifying the network endpoint are not supported.\r > One cannot omit, for example, the prefix \`tcp:\` even though it is possible to\r > do so when using the SQL client libraries programmatically.\r \r ---\r \r > [!IMPORTANT]\r > The content below is Microsoft confidential(not available in the [public site](https://docs.microsoft.com/en-us/azure/data-explorer/))\r \r # sql_request plugin - Internal\r \r **Restrictions**\r \r Kusto service controls allow sql-request plugin destinations by [Callout policy](../management/calloutpolicy.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sqlrequestplugin","sqlrequestplugin.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sqrt","Returns the square root of the input.",`## Syntax\r \r \`sqrt(\`*number*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *number* | int, long, or real | ✓ | The number for which to calculate the square root.|\r \r ## Returns\r \r * A positive number such that \`sqrt(x) * sqrt(x) == x\`\r * \`null\` if the argument is negative or can't be converted to a \`real\` value.`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/sqrtfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"startofday","Returns the start of the day containing the date, shifted by an offset, if provided.",`## Syntax\r \r \`startofday(\`*date* [\`,\` *offset* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to find the start.|\r | *offset* | int | | The number of days to offset from the input date. The default is 0.|\r \r ## Returns\r \r A datetime representing the start of the day for the given *date* value, with the offset, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2MQQqAMAwE775ijwoWGi+C4Ct8QdFEFGpKm4vg460gDCzMwuRw7QwVKWyQrBGOYApCMU6g5kHKevJq2MK9WMiGuX51Vappt2BsR+R28DQ6TxWQnz7Grv/L3Qu9LKDlZwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project dayStart = startofday(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |dayStart|\r |---|\r |2016-12-31 00:00:00.0000000|\r |2017-01-01 00:00:00.0000000|\r |2017-01-02 00:00:00.0000000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/startofdayfunction","startofdayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"startofmonth","Returns the start of the month containing the date, shifted by an offset, if provided.",`## Syntax\r \r \`startofmonth(\`*date* [\`,\` *offset* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to find the start of month.|\r | *offset* | int | | The number of months to offset from the input date. The default is 0.|\r \r ## Returns\r \r A datetime representing the start of the month for the given *date* value, with the offset, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2MSQqAMBAE776ijwoKGS+C4Ct8QdCJC8SR2EcfbxShoKEaKvljUVgIlxIhWUQjoEFwUU9IceNMtutERDu4jvSJGPKb18LnytlTuUUtWydd4yQDcf1LV9V/vXoAr00vemsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project monthStart = startofmonth(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |monthStart|\r |---|\r |2016-12-01 00:00:00.0000000|\r |2017-01-01 00:00:00.0000000|\r |2017-02-01 00:00:00.0000000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/startofmonthfunction","startofmonthfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"startofweek","Returns the start of the week containing the date, shifted by an offset, if provided.",`Start of the week is considered to be a Sunday.\r \r ## Syntax\r \r \`startofweek(\`*date* [\`,\` *offset* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to find the start of week.|\r | *offset* | int | | The number of weeks to offset from the input date. The default is 0.|\r \r ## Returns\r \r A datetime representing the start of the week for the given *date* value, with the offset, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2MQQqAMAwE775ijxYUGi8FwVf4gqKpqNSUGvDi421BGFiYhcn+2hgSws2KkCWiJ6iAcCsnUPMiZTl4UTzM56w+K6ZylpVQVbt6Zd0jt4Ml11sqgOxYcab72+YDGdMCYmkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project weekStart = startofweek(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |weekStart|\r |---|\r |2016-12-25 00:00:00.0000000|\r |2017-01-01 00:00:00.0000000|\r |2017-01-08 00:00:00.0000000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/startofweekfunction","startofweekfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"startofyear","Returns the start of the year containing the date, shifted by an offset, if provided.",`## Syntax\r \r \`startofyear(\`*date* [\`,\` *offset* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to find the start of the year.|\r | *offset* | int | | The number of years to offset from the input date. The default is 0.|\r \r ## Returns\r \r A datetime representing the start of the year for the given *date* value, with the offset, if specified.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2MQQqAMAwE775ijxYsNF4Kgq/wBUVTUdBImovg460gDCzMwmg6V4bkXNiQVQ54ggkIxfgCNQ8ulZ1nw81JJ0tqGOtZV/Kn2iUZ23Zw2weKPlAFFIaP6Lq/7V7sDV7RaQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range offset from -1 to 1 step 1\r | project yearStart = startofyear(datetime(2017-01-01 10:10:17), offset) \r \`\`\`\r \r **Output**\r \r |yearStart|\r |---|\r |2016-01-01 00:00:00.0000000|\r |2017-01-01 00:00:00.0000000|\r |2018-01-01 00:00:00.0000000|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/startofyearfunction","startofyearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"startswith","Filters a record set for data with a case-insensitive string starting sequence.",`[!INCLUDE [startswith-operator-comparison](../../includes/startswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r When possible, use the case-sensitive [startswith_cs](startswith-cs-operator.md).\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`startswith\` \`(\`*expression*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column used to filter.|\r | *expression* | string | ✓ | The expression by which to filter.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPobgksaikuDyzJENBySdfCS6LZISCnYKhAVCioCg/KzW5BKJRB1kFAIySNF2IAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State startswith "Lo"\r | where event_count > 10\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |LOUISIANA|463|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/startswith-operator","startswith-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"startswith_cs","Filters a record set for data with a case-sensitive string starting sequence.",`[!INCLUDE [startswith-operator-comparison](../../includes/startswith-operator-comparison.md)]\r \r ## Performance tips\r \r [!INCLUDE [performance-tip-note](../../includes/performance-tip-note.md)]\r \r ## Syntax\r \r *T* \`|\` \`where\` *col* \`startswith_cs\` \`(\`*expression*\`)\` \r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *T* | string | ✓ | The tabular input to filter.|\r | *col* | string | ✓ | The column used to filter.|\r | *expression* | string | ✓ | The expression by which to filter.|\r \r ## Returns\r \r Rows in *T* for which the predicate is \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVUgFCcUn55fmldiCSQ1NhaRKheCSxJJUoMLyjNSiVAhPobgksaikuDyzJCM+uVhByVMJLo9kiIKdgpGBgQFQqqAoPys1uQSiWQdZDQCj4hmWjAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize event_count=count() by State\r | where State startswith_cs "I"\r | where event_count > 2000\r | project State, event_count\r \`\`\`\r \r **Output**\r \r |State|event_count|\r |-----|-----------|\r |IOWA|2337|\r |ILLINOIS|2022|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/startswith-cs-operator","startswith-cs-operator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"stdev","Calculates the standard deviation of *expr* across the group, using [Bessel's correction](https://en.wikipedia.org/wiki/Bessel's_correction) for a small data set that is considered a [sample](https://en.wikipedia.org/wiki/Sample_%28statistics%29).",`For a large data set that is representative of the population, use [stdevp() (aggregation function)](stdevp-aggfunction.md).\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Formula\r \r This function uses the following formula.\r \r \r \r ## Syntax\r \r \`stdev(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the standard deviation aggregation calculation. |\r \r ## Returns\r \r Returns the standard deviation value of *expr* across the group.`,`The following example shows the standard deviation for the group.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5KpRKC7NzU0syqxKVchNzE6Nz8ksLtGo0NQBKkhJLQOyAG3qbWE9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | summarize make_list(x), stdev(x)\r \`\`\`\r \r **Output**\r \r |list_x|stdev_x|\r |---|---|\r |[ 1, 2, 3, 4, 5]|1.58113883008419|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/stdev-aggfunction","stdev-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"stdevif","Calculates the [standard deviation](stdev-aggfunction.md) of *expr* in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`stdevif(\`*expr*\`,\`*predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the standards deviation aggregation calculation. |\r | *predicate* | string | ✓ | The predicate that has to evaluate to \`true\` in order for *expr* to be added to the result. |\r \r ## Returns\r \r Returns the standard deviation value of *expr* in records for which *predicate* evaluates to \`true\`.`,`The following example shows the standard deviation in a range of 1 to 100.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzA0MFAoLkktUDDkqlEoLs3NTSzKrEoFCqWklmWmaVToAFWrKhgp2NoqGGgCABZzSGU/AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 100 step 1\r | summarize stdevif(x, x % 2 == 0)\r \`\`\`\r \r **Output**\r \r |stdevif_x|\r |---|\r |29.1547594742265|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/stdevif-aggfunction","stdevif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"stdevp","Calculates the standard deviation of *expr* across the group, considering the group as a [population](https://en.wikipedia.org/wiki/Statistical_population) for a large data set that is representative of the population.",`For a small data set that is a [sample](https://en.wikipedia.org/wiki/Sample_%28statistics%29), use [stdev() (aggregation function)](stdev-aggfunction.md).\r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Formula\r \r This function uses the following formula.\r \r \r \r ## Syntax\r \r \`stdevp(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression used for the standards deviation aggregation calculation. |\r \r ## Returns\r \r Returns the standard deviation value of *expr* across the group.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5KpRKC7NzU0syqxKVchNzE6Nz8ksLtGo0NQBKkhJLSsAMgEGYndiPgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | summarize make_list(x), stdevp(x)\r \`\`\`\r \r **Output**\r \r |list_x|stdevp_x|\r |---|---|\r |[ 1, 2, 3, 4, 5]|1.4142135623731|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/stdevp-aggfunction","stdevp-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"strcat","Concatenates between 1 and 64 arguments.",`## Syntax\r \r \`strcat(\`*argument1*\`,\` *argument2* [\`,\` *argument3* ... ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *argument1* ... *argumentN* | scalar | ✓ | The expressions to concatenate.|\r \r > [!NOTE]\r > If the arguments aren't of string type, they'll be forcibly converted to string.\r \r ## Returns\r \r The arguments concatenated to a single string.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSguKVKwBZHJiSUaShmpOTn5SjoKSgogojy/KCdFSRMA4dg7JykAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str = strcat("hello", " ", "world")\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |hello world|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/strcatfunction","strcatfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"strcat_array","Creates a concatenated string of array values using a specified delimiter.",`## Syntax\r \r \`strcat_array(\`*array*, *delimiter*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *array* | dynamic | ✓ | An array of values to be concatenated.|\r | *delimeter* | string | ✓ | The value used to concatenate the values in *array*.|\r \r ## Returns\r \r The input *array* values concatenated to a single string with the specified *delimiter*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSguKVKwBZHJiSXxiUVFiZUaKZV5ibmZyRrRhjoKRjoKxrGaOgpKunZKmgBWe4fjMgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print str = strcat_array(dynamic([1, 2, 3]), "->")\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |1->2->3|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/strcat-arrayfunction","strcat-arrayfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"strcat_delim","Concatenates between 2 and 64 arguments, using a specified delimiter as the first argument.",`## Syntax\r \r \`strcat_delim(\`*delimiter*, *argument1*, *argument2*[ , *argumentN*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *delimiter* | string | ✓ | The string to be used as separator in the concatenation.|\r | *argument1* ... *argumentN* | scalar | ✓ | The expressions to concatenate.|\r \r > [!NOTE]\r > If the arguments aren't of string type, they'll be forcibly converted to string.\r \r ## Returns\r \r The arguments concatenated to a single string with *delimiter*.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSguUbAFEkXJiSXxKak5mbka6rrqOgqGOgrqRkBa3RHEKdYEAPL2A8YtAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print st = strcat_delim('-', 1, '2', 'A', 1s)\r \`\`\`\r \r **Output**\r \r |st|\r |---|\r |1-2-A-00:00:01|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/strcat-delimfunction","strcat-delimfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"strcmp","Compares two strings.",`The function starts comparing the first character of each string. If they're equal to each other, it continues with the following pairs until the characters differ or until the end of shorter string is reached.\r \r ## Syntax\r \r \`strcmp(\`*string1*\`,\` *string2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *string1* | string | ✓ | The first input string for comparison.|\r | *string2* | string | ✓ | The second input string for comparison.|\r \r ## Returns\r \r Returns an integer value indicating the relationship between the strings:\r \r * *<0* - the first character that doesn't match has a lower value in *string1* than in *string2*\r * *0* - the contents of both strings are equal\r * *>0* - the first character that doesn't match has a greater value in *string1* than in *string2*`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjeKSosy8dEMrCK2jAKGNoHxNhWguBSBQcnRyVtKBkBCBxKRkVAGICrAwXEVKKlSIK5arRiG1oiQ1L0WhKLW4NKdEwRZkVXJuAcwFOlCbNQEUhY2inAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(string1:string, string2:string) [\r "ABC","ABC",\r "abc","ABC",\r "ABC","abc",\r "abcde","abc"\r ]\r | extend result = strcmp(string1,string2)\r \`\`\`\r \r **Output**\r \r |string1|string2|result|\r |---|---|---|\r |ABC|ABC|0|\r |abc|ABC|1|\r |ABC|abc|-1|\r |abcde|abc|1|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/strcmpfunction","strcmpfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"string_size","Returns the size, in bytes, of the input string.",`## Syntax\r \r \`string_size(\`*source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | string | ✓ | The string for which to return the byte size.|\r \r ## Returns\r \r Returns the length, in bytes, of the input string.`,`### String of letters\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjOrEpVsFUoLgHy0uNBPA2ljNScnHwlTQB9vNZzIQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print size = string_size("hello")\r \`\`\`\r \r **Output**\r \r |size|\r |---|\r |5|\r \r ### String of letters and symbols\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjOrEpVsFUoLgHy0uNBPA2lR5OWPZq04dGkdY8mrX80aZWSJgDJzHqdKwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print size = string_size("\u24A6\u24B0\u24AE\u24AF\u24AA")\r \`\`\`\r \r **Output**\r \r |size|\r |---|\r |15|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/stringsizefunction","stringsizefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"strlen","Returns the length, in characters, of the input string.",`> [!NOTE]\r > This function counts Unicode [code points](https://en.wikipedia.org/wiki/Code_point).\r \r ## Syntax\r \r \`strlen(\`*source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | string | ✓ | The string for which to return the length.|\r \r ## Returns\r \r Returns the length, in characters, of the input string.`,`### String of letters\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUchJzUsvyVCwVSguKQKyNZQyUnNy8pU0ATlWTM8eAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print length = strlen("hello")\r \`\`\`\r \r **Output**\r \r |length|\r |---|\r |5|\r \r ### String of letters and symbols\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUchJzUsvyVCwVSguKQKyNZQeTVr2aNKGR5PWPZq0/tGkVUqaAIvtpvwoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print length = strlen("\u24A6\u24B0\u24AE\u24AF\u24AA")\r \`\`\`\r \r **Output**\r \r |length|\r |---|\r |5|\r \r ### String with grapheme\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA3WNsQ3DMAwE+0zxnePKQFbwJIT8iQgokkzSM2UZD2Uhva+8A/67aQ14WGF9Tuv546alyDRjWRCZeKt5IGUxSUGDOgQfk575JVI5fNgHbviPSMC4H2p0vJDaRvQ2bh3RRunDs8YF+EPCH4oAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print strlen('C\u0327edilla') // the first character is a grapheme cluster\r // that requires 2 code points to represent\r \`\`\`\r \r **Output**\r \r |length|\r |---|\r |8|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/strlenfunction","strlenfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"strrep","Replicates a [string](scalar-data-types/string.md) the number of times specified.",`## Syntax\r \r \`strrep(\`*value*\`,\` *multiplier*\`,\` [ *delimiter* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | string | ✓ | The string to replicate. |\r | *multiplier* | int | ✓ | The amount of times to replicate the string. Must be a value from 1 to 1024.|\r | *delimiter* | string | | The delimeter used to separate the string replications. The default delimiter is an empty string.|\r \r > [!NOTE]\r > If *value* or *delimiter* isn't a \`string\`, they'll be forcibly converted to string.\r \r ## Returns\r \r The *value* string repeated the number of times as specified by *multiplier*, concatenated with *delimiter*.\r \r If *multiplier* is more than the maximal allowed value of 1024, the input string will be repeated 1024 times.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUgrys+NLy4pUrBVAJJFqQUa6o5Ozuo6CkaaOhBJkCq4pKGRsY6xjrqeOky2JDM3FSFtXKxjpKOuoK4JAHPzDvRdAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print from_str = strrep('ABC', 2), from_int = strrep(123,3,'.'), from_time = strrep(3s,2,' ')\r \`\`\`\r \r **Output**\r \r |from_str|from_int|from_time|\r |---|---|---|\r |ABCABC|123.123.123|00:00:03 00:00:03|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/strrepfunction","strrepfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"substring","Extracts a substring from the source string starting from some index to the end of the string.",`Optionally, the length of the requested substring can be specified.\r \r ## Syntax\r \r \`substring(\`*source*\`,\` *startingIndex* [\`,\` *length*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *source* | string | ✓ | The string from which to take the substring.|\r | *startingIndex* | int | ✓ | The zero-based starting character position of the requested substring. If a negative number, the substring will be retrieved from the end of the source string.|\r | *length* | int | | The requested number of characters in the substring. The default behavior is to take from *startingIndex* to the end of the *source* string.|\r \r ## Returns\r \r A substring from the given string. The substring starts at startingIndex (zero-based) character position and continues to the end of the string or length characters if specified.`,'```\r\nsubstring("123456", 1) // 23456\r\nsubstring("123456", 2, 2) // 34\r\nsubstring("ABCD", 0, 2) // AB\r\nsubstring("123456", -2, 2) // 56\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/substringfunction","substringfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sum","Calculates the sum of *expr* across the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`sum(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* string | ✓ | The expression used for the aggregation calculation. |\r \r ## Returns\r \r Returns the sum value of *expr* across the group.`,`This example returns the total number of deaths by state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVuCqUSguzc1NLMqsSlUAiznnl+aV2CaDSA1NHYWQ/JLEHJfUxJIM58Ti1GIFW5B6DbBAsUtmUWpyiaZCUqVCcEliSSrYtPyiEpAAmj4A7Xtp83QAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents \r | summarize EventCount=count(), TotalDeathCases = sum(DeathsDirect) by State \r | sort by TotalDeathCases\r \`\`\`\r \r **Output**\r \r The results table shown includes only the first 10 rows.\r \r | State | event_count | TotalDeathCases |\r | -------------------- | ----------- | --------------- |\r | TEXAS | 4701 | 71 |\r | FLORIDA | 1042 | 57 |\r | CALIFORNIA | 898 | 48 |\r | ILLINOIS | 2022 | 29 |\r | ALABAMA | 1315 | 29 |\r | MISSOURI | 2016 | 20 |\r | NEW YORK | 1750 | 19 |\r | KANSAS | 3166 | 17 |\r | GEORGIA | 1983 | 17 |\r | TENNESSEE | 1125 | 17 |\r | ... | ... | ... |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/sum-aggfunction","sum-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"sumif","Calculates the sum of *expr* in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r You can also use the [sum()](sum-aggfunction.md) function, which sums rows without predicate expression.\r \r ## Syntax\r \r \`sumif(\`*expr*\`,\`*predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *predicate* | string | ✓ | The expression used to filter rows. If the predicate evaluates to \`true\`, the row will be included in the result.|\r \r ## Returns\r \r Returns the sum of *expr* for which *predicate* evaluates to \`true\`.\r \r ## Example showing the sum of damages based on no casualty count\r \r This example shows the sum total damage for storms without casualties.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVXBJzE1MT/XLd04sLk3MKclMLbYFSmamaWhAZJyL8guKtSHsACA7taikUlNHwyU1sSSj2CWzKDW5RBvC8cxLAXM1bW0NNBWSKhWCSxJLUgF0hdWZeAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize DamageNoCasualties=sumif((DamageCrops+DamageProperty),(DeathsDirect+DeathsIndirect)==0) by State\r \`\`\`\r \r **Output**\r \r The results table shown includes only the first 10 rows.\r \r | State | DamageNoCasualties |\r | -------------------- | ------------------ |\r | TEXAS | 242638700 |\r | KANSAS | 407360000 |\r | IOWA | 135353700 |\r | ILLINOIS | 120394500 |\r | MISSOURI | 1096077450 |\r | GEORGIA | 1077448750 |\r | MINNESOTA | 230407300 |\r | WISCONSIN | 241550000 |\r | NEBRASKA | 70356050 |\r | NEW YORK | 58054000 |\r | ... | ... |\r \r ## Example showing the sum of birth dates\r \r This example shows the sum of the birth dates for all names that have more than 4 letters.\r \r \`\`\`\r let T = datatable(name:string, day_of_birth:long)\r [\r "John", 9,\r "Paul", 18,\r "George", 25,\r "Ringo", 7\r ];\r T\r | summarize sumif(day_of_birth, strlen(name) > 4)\r \`\`\`\r \r **Output**\r \r |sumif_day_of_birth|\r |----|\r |32|`,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/sumif-aggfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"summarize","Produces a table that aggregates the content of the input table.","## Syntax\r\n\r\n*T* `| summarize` [ *SummarizeParameters* ]\r\n [[*Column* `=`] *Aggregation* [`,` ...]]\r\n [`by`\r\n [*Column* `=`] *GroupExpression* [`,` ...]]\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*Column*|string||The name for the result column. Defaults to a name derived from the expression.|\r\n|*Aggregation*|string|✓|A call to an [aggregation function](aggregation-functions.md) such as `count()` or `avg()`, with column names as arguments.|\r\n|*GroupExpression*|scalar|✓|A scalar expression that can reference the input data. The output will have as many records as there are distinct values of all the group expressions.|\r\n|*SummarizeParameters*|string||Zero or more space-separated parameters in the form of *Name* `=` *Value* that control the behavior. See [supported parameters](#supported-parameters).\r\n\r\n> [!NOTE]\r\n> When the input table is empty, the output depends on whether *GroupExpression*\r\n> is used:\r\n>\r\n> * If *GroupExpression* is not provided, the output will be a single (empty) row.\r\n> * If *GroupExpression* is provided, the output will have no rows.\r\n\r\n### Supported parameters\r\n\r\n|Name |Description |\r\n |---|---|\r\n |`hint.num_partitions` |Specifies the number of partitions used to share the query load on cluster nodes. See [shuffle query](shufflequery.md) |\r\n |`hint.shufflekey=<key>` |The `shufflekey` query shares the query load on cluster nodes, using a key to partition data. See [shuffle query](shufflequery.md) |\r\n |`hint.strategy=shuffle` |The `shuffle` strategy query shares the query load on cluster nodes, where each node will process one partition of the data. See [shuffle query](shufflequery.md) |\r\n\r\n## Returns\r\n\r\nThe input rows are arranged into groups having the same values of the `by` expressions. Then the specified aggregation functions are computed over each group, producing a row for each group. The result contains the `by` columns and also at least one column for each computed aggregate. (Some aggregation functions return multiple columns.)\r\n\r\nThe result has as many rows as there are distinct combinations of `by` values\r\n(which may be zero). If there are no group keys provided, the result has a single\r\nrecord.\r\n\r\nTo summarize over ranges of numeric values, use `bin()` to reduce ranges to discrete values.\r\n\r\n> [!NOTE]\r\n>\r\n> * Although you can provide arbitrary expressions for both the aggregation and grouping expressions, it's more efficient to use simple column names, or apply `bin()` to a numeric column.\r\n> * The automatic hourly bins for datetime columns is no longer supported. Use explicit binning instead. For example, `summarize by bin(timestamp, 1h)`.\r\n\r\n## Aggregates default values\r\n\r\nThe following table summarizes the default values of aggregations:\r\n\r\n| Operator | Default value |\r\n|--|--|\r\n| `count()`, `countif()`, `dcount()`, `dcountif()` | 0 |\r\n| `make_bag()`, `make_bag_if()`, `make_list()`, `make_list_if()`, `make_set()`, `make_set_if()` | empty dynamic array ([]) |\r\n| All others | null |\r\n\r\nWhen using these aggregates over entities that includes null values, the null values will be ignored and won't participate in the calculation (see examples below).",`\r \r ### Unique combination\r \r The following query determines what unique combinations of \`State\` and \`EventType\` there are for storms that resulted in direct injury. There are no aggregation functions, just group-by keys. The output will just show the columns for those results.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVfDMyyotykwtdsksSk0uUbBTMADJFZfm5iYWZValKiRVKgSXJJak6iiAdYZUFqQCAEZA2i9IAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where InjuriesDirect > 0\r | summarize by State, EventType\r \`\`\`\r \r **Output**\r \r The following table shows only the first 5 rows. To see the full output, run the query.\r \r | State | EventType |\r |---|---|\r | TEXAS | Thunderstorm Wind |\r | TEXAS | Flash Flood |\r | TEXAS | Winter Weather |\r | TEXAS | High Wind |\r | TEXAS | Flood |\r |...|...|\r \r ### Minimum and maximum timestamp\r \r Finds the minimum and maximum heavy rain storms in Hawaii. There's no group-by clause, so there's just one row in the output.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0WMsQrCQBBEe8F/GK5S0E+4ImDAFGmSgPViFjzh9sJlExPx42VFsRvevJlWU47lzKLjdvPC48aZ0Sopw3u4c3EpqsqBpMfH6tbh2zDNKxoK4mw45HTnq+I0ZdKQBB6l9F2IjKP9ZbVs5jjFSDk8GXUwLQbZ/Vb7A2paDNLyh28u8qFKpAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State == "HAWAII" and EventType == "Heavy Rain"\r | project Duration = EndTime - StartTime\r | summarize Min = min(Duration), Max = max(Duration)\r \`\`\`\r \r **Output**\r \r | Min | Max |\r |---|---|\r | 01:08:00 | 11:55:00 |\r \r ### Distinct count\r \r Create a row for each continent, showing a count of the cities in which activities occur. Because there are few values for "continent", no grouping function is needed in the 'by' clause:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSguzc1NLMqsSlUIqSxILfZPCwbJF9umJOeX5pVogBWCZDQVkioVgksSS1LBuvKLSkACKHoALe01bFoAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize TypesOfStorms=dcount(EventType) by State\r | sort by TypesOfStorms\r \`\`\`\r \r **Output**\r \r The following table shows only the first 5 rows. To see the full output, run the query.\r \r | State | TypesOfStorms |\r |---|---|\r | TEXAS | 27 |\r | CALIFORNIA | 26 |\r | PENNSYLVANIA | 25 |\r | GEORGIA | 24 |\r | ILLINOIS | 23 |\r |...|...|\r \r ### Histogram\r \r The following example calculates a histogram storm event types that had storms lasting longer than 1 day. Because \`Duration\` has many values, use \`bin()\` to group its values into 1-day intervals.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NQQ6CQAxF9ybeoUtIcOEBxo2ycwcXGKCRMZmWlA4GwuG1EKObn+bn9f1KWWI5Iel4PKwwCD+xVdiaeh6wgFsSr4EJHJTU1SEinKBSL2q3Pb16FPxxFzh3Vo8pRi9hwd125UTqWsssh2b+37gjPbR3TaDsqyk+lnzTsKjhO/MGpa0usbAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project EventType, Duration = EndTime - StartTime\r | where Duration > 1d\r | summarize EventCount=count() by EventType, Length=bin(Duration, 1d)\r | sort by Length\r \`\`\`\r \r **Output**\r \r | EventType | Length | EventCount |\r |---|---|---|\r | Drought | 30.00:00:00 | 1646 |\r | Wildfire | 30.00:00:00 | 11 |\r | Heat | 30.00:00:00 | 14 |\r | Flood | 30.00:00:00 | 20 |\r | Heavy Rain | 29.00:00:00 | 42 |\r | ... | ... | ... |\r \r ### Aggregates default values\r \r When the input of \`summarize\` operator has at least one empty group-by key, its result is empty, too.\r \r When the input of \`summarize\` operator doesn't have an empty group-by key, the result is the default values of the aggregates used in the \`summarize\`:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAz2PwQ7CIBBE7yb+A0cwHLz0YqI/YkyzBaQbAU3ZNtT48S7EGg4zmTe7WSwQvyE4WU7hmby63va7j8hzjDDh2wlIa1/OBA/Xs5VFaQGT7yMUjn9OFi0OG8C0AUx/sPg2OcwYbDajiyDpadcEEQ27TBOmWlFcagur1nnWl5uMS4T1Ri26jqMxBEZCZ7JuaSU+eFO8114RF3HkgCx6l6nBhb8EyfAe9QXbqS6i+AAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(x:long)[]\r | summarize any_x=take_any(x), arg_max_x=arg_max(x, *), arg_min_x=arg_min(x, *), avg(x), buildschema(todynamic(tostring(x))), max(x), min(x), percentile(x, 55), hll(x) ,stdev(x), sum(x), sumif(x, x > 0), tdigest(x), variance(x)\r \`\`\`\r \r **Output**\r \r |any_x|arg_max_x|arg_min_x|avg_x|schema_x|max_x|min_x|percentile_x_55|hll_x|stdev_x|sum_x|sumif_x|tdigest_x|variance_x|\r |---|---|---|---|---|---|---|---|---|---|---|---|---|---|\r ||||NaN||||||0|0|0||0|\r \r The result of \`avg_x(x)\` is \`NaN\` due to dividing by 0.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjQqrnPy8dM3oWF6uGoXi0tzcxKLMqlQFheT80rwSjQpNHQgrM02jQsFOwUBTQUchBSGXApfUUYDIAwDGwdg7WgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(x:long)[]\r | summarize count(x), countif(x > 0) , dcount(x), dcountif(x, x > 0)\r \`\`\`\r \r **Output**\r \r |count_x|countif_|dcount_x|dcountif_x|\r |---|---|---|---|\r |0|0|0|0|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjQqrnPy8dM3oWF6uGoXi0tzcxKLMqlQFhdzE7NT44tQSjQpNHQgnJ7MYxAMATGERsTsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(x:long)[]\r | summarize make_set(x), make_list(x)\r \`\`\`\r \r **Output**\r \r |set_x|list_x|\r |---|---|\r |[]|[]|\r \r The aggregate avg sums all the non-nulls and counts only those which participated in the calculation (won't take nulls into account).\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy2KSwqAIBgG90F3+JYKbQxaehihXxF8hI/Q6PAptJqBmaSCITToFD0ESsSOXOiCWJcX1AqFEx0SVmvWICXEhkTKsVCd478fnM89V+9Vsg9NY31UdZvBD+MI2XFlAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 2 step 1\r | extend y = iff(x == 1, real(null), real(5))\r | summarize sum(y), avg(y)\r \`\`\`\r \r **Output**\r \r |sum_y|avg_y|\r |---|---|\r |5|5|\r \r The regular count will count nulls:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAy3KTQqAIBAG0H3QHb6lA20MWnoYqTEEf2JU0OjwEbR7iyc2nYwOJzlCo2asKJUv6Hl6wL1yOjBg4J1THcZALxC2QaUWAv3eiL5eWoxW/M3Yc0tVDXoBSiga018AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 2 step 1\r | extend y = iff(x == 1, real(null), real(5))\r | summarize count(y)\r \`\`\`\r \r **Output**\r \r |count_y|\r |---|\r |2|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA03KSwqAIBRG4XnQHv6hQhODhq4lhK4h+YirgkWLr6BBs3PgYxNXQoPlFKBQEkbkQjtU312gViguOKDhrBUNWkMNYDJexOq9/HqS8uW5hmDYnYRgNpozFXE85Dc305SXFm8AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 2 step 1\r | extend y = iff(x == 1, real(null), real(5))\r | summarize make_set(y), make_set(y)\r \`\`\`\r \r **Output**\r \r |set_y|set_y1|\r |---|---|\r |[5.0]|[5.0]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/summarizeoperator","summarizeoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"table","The table() function references a table by providing its name as an expression of type `string`.",`## Syntax\r \r \`table(\` *TableName* [\`,\` *DataScope*] \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*TableName* | string | ✓ | The name of the table being referenced. The value of this expression must be constant at the point of call to the function, meaning it cannot vary by the data context.|\r | *DataScope* | string | | Used to restrict the table reference to data according to how this data falls under the table's effective [cache policy](../management/cachepolicy.md). If used, the actual argument must be one of the [Valid data scope values](#valid-data-scope-values).\r \r ### Valid data scope values\r \r |Value|Description|\r |--|--|\r | \`hotcache\`| Only data that is categorized as hot cache will be referenced.|\r | \`all\`| All the data in the table will be referenced.|\r | \`default\`| The default is \`all\`, except if it has been set to \`hotcache\` by the cluster admin.|\r \r ## Returns\r \r \`table(T)\` returns:\r \r * Data from table *T* if a table named *T* exists.\r * Data returned by function *T* if a table named *T* doesn't exist but a function named *T* exists. Function *T* must take no arguments and must return a tabular result.\r * A semantic error is raised if there's no table named *T* and no function named *T*.`,`### Use table() to access table of the current database\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytJTMpJ1VAPLskvynUtS80rKVbXVKhRSM4vzSsBAIdoofIcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r table('StormEvents') | count\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |59066|\r \r ### Use table() inside let statements\r \r The query above can be rewritten as a query-defined function (let statement) that receives a parameter \`tableName\` - which is passed into the table() function.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVFIy89XsFXQKElMykn1S8xNtSouKcrMS9fkquZSAAKwOEJWU6FGITm/NK+Eq9aaC6hVQz24JL8o17UsNa+kWF0TAD3GJXVRAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let foo = (tableName:string)\r {\r table(tableName) | count\r };\r foo('StormEvents')\r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |59066|\r \r ### Use table() inside Functions\r \r The same query as above can be rewritten to be used in a function that \r receives a parameter \`tableName\` - which is passed into the table() function.\r \r \`\`\`\r .create function foo(tableName:string)\r {\r table(tableName) | count\r };\r \`\`\`\r \r > [!NOTE]\r > Such functions can be used only locally and not in the cross-cluster query.\r \r ### Use table() with non-constant parameter\r \r A parameter, which isn't a scalar constant string, can't be passed as a parameter to the \`table()\` function.\r \r Below, given an example of workaround for such case.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEIMVSwVSgoyswrUaiwNbTmygGJGSGJGUHE4pMz8vOLU4ESGvHFqTmpySX5RVbFJUBF6Zpc1VwKQFCal5mfB2ZpAE2tUSjPSC1KVYCrVrC1VVAPMVTX1IGqMcKlxkhdk6vWmgtqpQZYAADWO8bZrAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let T1 = print x=1;\r let T2 = print x=2;\r let _choose = (_selector:string)\r {\r union\r (T1 | where _selector == 'T1'),\r (T2 | where _selector == 'T2')\r };\r _choose('T2')\r \r \`\`\`\r \r **Output**\r \r |x|\r |---|\r |2|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/tablefunction","tablefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"take","Return up to the specified number of rows.",`There is no guarantee which records are returned, unless\r the source data is sorted. If the data is sorted, then the top values will be returned.\r \r > The \`take\` and \`limit\` operators are equivalent\r \r > [!NOTE]\r > \`take\` is a simple, quick, and efficient way to view a small sample of records when browsing data interactively, but be aware that it doesn't guarantee any consistency in its results when executing multiple times, even if the data set hasn't changed.\r > Even if the number of rows returned by the query isn't explicitly limited by the query (no \`take\` operator is used), Kusto limits that number by default. For more details, see [Kusto query limits](../concepts/querylimits.md).\r \r ## Syntax\r \r \`take\` *NumberOfRows*\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*NumberOfRows*|int|✓|The number of rows to return.|\r \r ## Paging of query results\r \r Methods for implementing paging include:\r \r * Export the result of a query to an external storage and paging through the\r generated data.\r * Write a middle-tier application that provides a stateful paging API by caching\r the results of a Kusto query.\r * Use pagination in [Stored query results](../management/stored-query-results.md#pagination).`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSspVqhRKEnMTlUwBQDEz2b8FAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents | take 5\r \`\`\`\r \r ## See also\r \r * [sort operator](sort-operator.md)\r * [top operator](topoperator.md)\r * [top-nested operator](topnestedoperator.md)`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/takeoperator","takeoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"take_any",`Arbitrarily chooses one record for each group in a [summarize operator](summarizeoperator.md),\r and returns the value of one or more expressions over each such record.`,`> **Deprecated aliases:** any()\r \r > [!NOTE]\r > The deprecated version adds \`any_\` prefix to the columns returned by the \`any()\` aggregation.\r \r ## Syntax\r \r \`take_any(\`*expr_1* [\`,\` *expr_2* ...]\`)\`\r \r \`take_any(\`*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr_N* | string | ✓ | The expression used for selecting a record. If the wildcard value (\`*\`) is given in place of an expression, all records will be selected.|\r \r ## Returns\r \r The \`take_any\` aggregation function returns the values of the expressions calculated\r for each of the records selected Indeterministically from each group of the summarize operator.\r \r If the \`*\` argument is provided, the function behaves as if the expressions are all columns\r of the input to the summarize operator barring the group-by columns, if any.\r \r ## Remarks\r \r This function is useful when you want to get a sample value of one or more columns\r per value of the compound group key.\r \r When the function is provided with a single column reference, it will attempt to\r return a non-null/non-empty value, if such value is present.\r \r As a result of the indeterministic nature of this function, using this function multiple times in\r a single application of the \`summarize\` operator isn't equivalent to using\r this function a single time with multiple expressions. The former may have each application\r select a different record, while the latter guarantees that all values are calculated\r over a single record (per distinct group).`,`Show indeterministic State:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc6bc487453a064d3c9de.northeurope/databases/NewDatabase1?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSguzc1NLMqsSlUoScxOjU/Mq9QILkksSdUEALgBS0YoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize take_any(State)\r \`\`\`\r \r **Output**\r \r |State|\r |---|\r |ATLANTIC SOUTH|\r \r Show all the details for a random record:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc6bc487453a064d3c9de.northeurope/databases/NewDatabase1?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSgoys9KTS5RCC5JLCoJycxN1VFwLcgszk9J9UzRAYmWgERAykMqC1JBOopLc3MTizKrUhVKErNT4xPzKjW0NAGzMGIFVgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project StartTime, EpisodeId, State, EventType\r | summarize take_any(*)\r \`\`\`\r \r **Output**\r \r |StartTime|EpisodeId|State|EventType|\r |---|---|---|---|\r |2007-09-29 08:11:00.0000000|11091|ATLANTIC SOUTH|Waterspout|\r \r Show all the details of a random record for each State starting with 'A':\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc6bc487453a064d3c9de.northeurope/databases/NewDatabase1?query=H4sIAAAAAAAAAyWMMQ7CMBAEeyT+cEoFKJ+gSEGd9OggK8Ugx9bdQmTE4xMr7c7O9EwWuy9m+vHwl2WCQXoqIU41+hI4SXNtKs2WXniycuMQIlrpcvA04ja2u7UtNTaUjGr4J0a18INQ37jrXE6XszzKfl4BiZpjAH0AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State startswith "A"\r | project StartTime, EpisodeId, State, EventType\r | summarize take_any(*) by State\r \`\`\`\r \r **Output**\r \r |State|StartTime|EpisodeId|EventType|\r |---|---|---|---|\r |ALASKA|2007-02-01 00:00:00.0000000|1733|Flood|\r |ATLANTIC SOUTH|2007-09-29 08:11:00.0000000|11091|Waterspout|\r |ATLANTIC NORTH|2007-11-27 00:00:00.0000000|11523|Marine Thunderstorm Wind|\r |ARIZONA|2007-12-01 10:40:00.0000000|11955|Flash Flood|\r |AMERICAN SAMOA|2007-12-07 14:00:00.0000000|13183|Flash Flood|\r |ARKANSAS|2007-12-09 16:00:00.0000000|11319|Lightning|\r |ALABAMA|2007-12-15 18:00:00.0000000|12580|Heavy Rain|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/take-any-aggfunction","take-any-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"take_anyif",`Arbitrarily selects one record for each group in a [summarize operator](summarizeoperator.md) in records for which the *predicate*\r is 'true'. The function returns the value of an expression over each such record.`,`This function is useful when you want to get a sample value of one column per value of the compound group key, subject to some predicate that is *true*. If such a value is present, the function attempts to return a non-null/non-empty value.\r \r > **Deprecated aliases:** anyif()\r \r > [!NOTE]\r > The deprecated version adds \`any_\` prefix to the columns returned by the \`any()\` aggregation.\r \r ## Syntax\r \r \`take_anyif(\` *expr*\`,\` *predicate* \`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for selecting a record. |\r | *predicate* | string | ✓ | Indicates which records may be considered for evaluation. |\r \r ## Returns\r \r The \`take_anyif\` aggregation function returns the value of the expression calculated\r for each of the records randomly selected from each group of the summarize operator. Only records for which *predicate* returns 'true' may be selected. If the predicate doesn't return 'true', a null value is produced.`,`Pick a random EventType from Storm events, where event description has a key phrase.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc6bc487453a064d3c9de.northeurope/databases/NewDatabase1?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSguzc1NLMqsSlUoScxOjU/Mq8xM0wBLh1QWpOoogJl+iUVFiSWZZakKGYnFCurFJUX5eekK5Zl5KeqaABMQsZRQAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize take_anyif(EventType, EventNarrative has 'strong wind')\r \`\`\`\r \r **Output**\r \r |EventType|\r |---|\r |Strong Wind|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/take-anyif-aggfunction","take-anyif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tan","Returns the tangent value of the specified number.",`## Syntax\r \r \`tan(\`*x*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *x* | real | ✓ | The number for which to calculate the tangent. |\r \r ## Returns\r \r The result of \`tan(\`*x*\`)\``,"","https://docs.microsoft.com/azure/data-explorer/kusto/query/tanfunction","")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tdigest","Calculates the intermediate results of [`percentiles()`](percentiles-aggfunction.md) across the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r For more information, see the [underlying algorithm (T-Digest) and the estimated error](percentiles-aggfunction.md#estimation-error-in-percentiles).\r \r > [!IMPORTANT]\r >The results of tdigest() and tdigest_merge() can be stored and later retrieved. For example, you may want to create daily percentiles summary, which can then be used to calculate weekly percentiles.\r > However, the precise binary representation of these results may change over time. There's no guarantee that these functions will produce identical results for identical inputs, and therefore we don't advise relying on them.\r \r ## Syntax\r \r \`tdigest(\`*expr* [\`,\` *weight*]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *expr* | string | ✓ | The expression used for the aggregation calculation. |\r | *weight* | string | | The weights of the values for the aggregation calculation. |\r \r ## Returns\r \r The Intermediate results of weighted percentiles of \`*expr*\` across the group.\r \r > [!TIP]\r >\r >- Use the aggregation function [tdigest_merge()](tdigest-merge-aggfunction.md) to merge the output of \`tdigest\` again across another group.\r >- Use the function [percentile_tdigest()](percentile-tdigestfunction.md) to calculate the percentile/percentilew of the \`tdigest\` results.`,`This example shows the results of the tdigest percentiles sorted by state.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvc6bc487453a064d3c9de.northeurope/databases/NewDatabase1?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSguzc1NLMqsSlUoSclMTy0u0XBJzE1MTw0oyi9ILSqp1FRIqlQILkksSQUAy2eq1DkAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize tdigest(DamageProperty) by State\r \`\`\`\r \r The results table shown includes only the first 10 rows.\r \r | State | tdigest_DamageProperty |\r |--|--|\r | NEBRASKA | [[7],[800,250,300000,5000,240000,1500000,20000,550000,0,75000,100000,1000,10000,30000,13000,2000000,1000000,650000,125000,35000,7000,2500000,4000000,450000,85000,460000,500000,6000,150000,350000,4000,72500,1200000,180000,400000,25000,50000,2000,45000,8000,120000,200000,40000,1200,15000,55000,3000,250000],[5,1,3,72,1,1,44,1,1351,12,24,17,46,13,6,1,2,1,2,6,8,1,1,1,2,1,4,2,6,1,2,2,1,1,2,26,18,12,2,2,1,7,6,4,28,4,6,6]] |\r | MINNESOTA | [[7],[700,500,2000000,2500,1200000,12000000,16000,7000000,0,300000,425000,750,6000,30000,10000,22000000,10000000,9600000,600000,50000,4000,27000000,35000000,4000000,400000,5000000,6000000,3000,750000,2500000,2000,250000,11000000,38000000,3000000,20000,120000,1000,100000,5000,500000,1000000,60000,800,15000,200000,1500,1500000,900000],[1,3,1,3,1,2,1,1,1793,1,1,2,2,2,3,1,1,1,2,2,1,1,1,1,2,1,2,1,1,1,6,1,1,1,3,5,1,5,2,5,2,2,1,2,2,2,2,1,1]] |\r | KANSAS | [[7],[667,200,6000000,3400,80000,300000,18875,210000,0,45857,750000,37500000,10000,81150000,15000000,6400000,2570000,225000,59400,25000,5000,400000,7000000,4500000,2500000,6500000,200000,4500,70000,122500,2785,12000000,1900000,18200000,150000,1150000,27000000,2000,30000,2000000,250000000,75000,26000,1500,1500000,1000000,2500,100000,21600000,50000,335000,600000,175000,500000,160000,51000,40000,20000,15000,252500,7520,350000,250000,3400000,1000,338000,16000000,106000,4840000,305000,540000,337500,9800000,45000,12500,700000,4000000,71000,30000000,35000,3700000,22000,56000],[12,2,2,5,2,3,8,1,2751,7,2,1,37,1,1,1,1,2,5,12,33,8,1,1,1,2,10,1,5,2,7,1,4,1,5,1,1,9,11,4,1,5,2,6,4,8,2,23,1,44,2,3,2,3,1,1,1,18,5,2,5,1,7,1,25,1,1,3,1,1,1,2,6,1,1,2,1,1,1,3,1,1,1]] |\r | NEW MEXICO | [[7],[600,500,2500000,7000,1500,28000,40000,10000,0,500000,20000,1000,21000,70000,25000,3500000,200000,16500000,50000,100000,15000,4000,5000,2000],[1,3,1,1,1,1,1,7,466,1,7,4,1,1,2,1,1,1,1,2,1,4,10,8]] |\r | KENTUCKY | [[7],[600,200,700000,5000,400000,12000,15000,100000,0,60000,80000,1000,9000,20000,10000,50000,30000,300000,120000,25000,7000,3000,500000,11500000,75000,35000,8000,6000,150000,1500000,4000,56000,1911,250000,2500000,18000,45000,2000],[6,2,1,42,1,3,9,8,999,2,1,52,1,21,37,25,7,2,3,14,11,35,1,1,6,10,9,10,4,1,13,1,9,3,1,2,1,37]] |\r | VIRGINIA | [[7],[536,500,125000,3000,100000,7250,8000,60000,0,40000,50000,956,6000,11500,7000,25000,15000,98000,70000,12000,4000,2000,120000,1000000,45000,16000,5000,3500,75000,175000,2500,30000,1000,80000,300000,10000,20000,1500],[7,11,1,48,2,2,2,1,1025,2,6,9,2,2,1,5,16,1,3,5,12,122,1,1,1,1,64,2,2,1,1,7,209,3,2,42,19,6]] |\r | OREGON | [[7],[5000,1000,60000,434000,20000,50000,100000,500000,0,1500000,20400000,6000,62600000],[8,2,1,1,1,1,3,1,401,1,1,1,1]] |\r | ALASKA | [[7],[5000,1000,25000,700000,12060,15000,100000,1600000,0,10000],[5,1,1,1,1,2,1,2,242,1]] |\r | CONNECTICUT | [[7],[5000,1000,2000000,0,50000,750000,6000],[1,1,1,142,1,1,1]] |\r | NEVADA | [[7],[5000,1000,200000,1000000,30000,40000,297000,5000000,0,10000],[4,2,1,1,1,1,1,1,148,3]] |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/tdigest-aggfunction","tdigest-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tdigest_merge","Merges tdigest results across the group.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r For more information about the underlying algorithm (T-Digest) and the estimated error, see [estimation error in percentiles](percentiles-aggfunction.md#estimation-error-in-percentiles).\r \r > The \`tdigest_merge()\` and \`merge_tdigest()\` functions are equivalent\r \r > [!IMPORTANT]\r >The results of tdigest() and tdigest_merge() can be stored and later retrieved. For example, you may want to create daily percentiles summary, which can then be used to calculate weekly percentiles.\r > However, the precise binary representation of these results may change over time. There's no guarantee that these functions will produce identical results for identical inputs, and therefore we don't advise relying on them.\r \r ## Syntax\r \r \`tdigest_merge(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression used for the aggregation calculation.|\r \r ## Returns\r \r Returns the merged tdigest values of *expr* across the group.\r \r > [!NOTE]\r >\r > * Use the function [percentile_tdigest()](percentile-tdigestfunction.md) to calculate the percentiles from the \`tdigest_merge\` results.\r > * All tdigests that are included in the same group must be of the same type.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKC7NzU0syqxKVQgoSnVMT3dJzE1MTw0oyi9ILSqptC1JyUxPLS7RQBXWVEiqVAguSSxJRTEhN7UoPTUeqqVYA5uBmgCTdTq/fgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | summarize PreAggDamageProperty=tdigest(DamageProperty) by State\r | summarize tdigest_merge(PreAggDamageProperty)\r \`\`\`\r \r **Output**\r \r |merge_tdigests_PreAggDamageProperty|\r |---|\r |[[7],[91,30,73667,966,110000000,24428,2500,20000,16500000,6292,40000,123208,1000000,133091,90583,20000000,977000,20007,547000,19000000,1221,9600000,300000,70072,55940,75000,417500,1410000,20400000,331500,15000000,62000000,50222,121690000,160400,6200000,252500,450,11000000,2200000,5700000,11566,12000000,263,50000,200000,3700000,13286,171000,100000000,28200000,65000000,17709,30693,16000000,7938,5200,2875,1500000,3480000,151100000,9800000,18200000,21600000,199,2570000,30000000,38000000,72000,891250,500000000,26385,80092,27000000,35000000,754500,11500000,3262500,113945,5000,62429,175294,9071,6500000,3321,15159,21850000,300000000,22683,3000,10000000,60055,600000,52000000,496000,15000,50000000,10140000,11900000,2100000,62600000,77125,310667,70000000,101000000,2088,1608571,19182,400000,179833,775000,612000,150000000,13500000,2600000,1250000,65400,45000000,297000,2500000,40000000,24846,30000,59067,1893,15762,142571,220666,195000,2000000,355000,2275000,6000000,46000000,38264,50857,4002,97333,27750,1000,1111429,7043,272500,455200,503,37500000,10000,1489,0,1200000,110538,60000000,250000,10730,1901429,291000,698750,649000,2716667,137000000,6400000,29286,41051,6850000,102000,4602,80000000,250000000,371667,8000000,729,8120000,5000000,20830,152400,803300,349667,202000,207000,81150000,48000000,750000,26000000,8900000,239143,75000000,248000,14342,74857,5992,500000,150000,938000,10533333,45248,105000000,7000000,35030,4000000,2000,7692500,3000000,25000000,4500000,87222,12054,100000,25000,9771,4840000,28000000,1307143,32024],[19,1,3,32,1,14,45,572,1,51,126,41,101,11,12,8,2,14,4,1,27,1,58,42,20,177,6,4,1,12,10,2,9,1,5,1,2,28,3,6,1,23,4,30,610,145,1,21,4,2,1,1,24,13,1,153,5,4,26,5,1,6,1,1,28,1,5,1,11,4,1,13,44,2,4,2,1,4,9,1672,7,17,47,2,39,17,2,1,17,666,16,71,21,3,1,530,10,1,1,2,1,4,6,4,1,20,7,11,40,6,2,1,1,2,1,3,5,2,1,21,2,13,271,3,14,23,7,15,2,41,1,2,7,1,27,7,205,3,4,1403,7,69,4,10,215,1,1472,127,45756,10,13,1,198,17,7,1,12,7,6,1,1,14,7,2,2,17,1,2,3,2,48,5,21,10,5,10,21,4,5,1,2,39,2,2,7,1,1,22,7,60,175,119,3,3,40,1,8,101,15,1135,4,22,3,3,9,76,430,611,12,1,2,7,8]]|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/tdigest-merge-aggfunction","tdigest-merge-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tobool","Convert inputs to boolean (signed 8-bit) representation.",`> The \`tobool()\` and \`toboolean()\` functions are equivalent\r \r ## Syntax\r \r \`tobool(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | string | ✓ | The value to convert to boolean.|\r \r ## Returns\r \r If conversion is successful, result will be a boolean.\r If conversion isn't successful, result will be \`null\`.`,'```\r\ntobool("true") == true\r\ntobool("false") == false\r\ntobool(1) == true\r\ntobool(123) == true\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/toboolfunction","toboolfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"todatetime","Converts the input to a [datetime](./scalar-data-types/datetime.md) scalar value.",`> [!NOTE]\r > Prefer using [datetime()](./scalar-data-types/datetime.md) when possible.\r \r ## Syntax\r \r \`todatetime(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to [datetime](./scalar-data-types/datetime.md).|\r \r ## Returns\r \r If the conversion is successful, the result will be a [datetime](./scalar-data-types/datetime.md) value.\r Else, the result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJT0ksSS3JzE3VUDc00jUw0jUyMDJS11SwtVXALgMAakZnYjgAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print todatetime('12-02-2022') == datetime('12-02-2022')\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/todatetimefunction","todatetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"todecimal","Converts the input to a decimal number representation.",`> [!NOTE]\r > Prefer using [real()](./scalar-data-types/real.md) when possible.\r \r ## Syntax\r \r \`todecimal(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to a decimal.|\r \r ## Returns\r \r If conversion is successful, result will be a decimal number.\r If conversion isn't successful, result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJT0lNzsxNzNFQMjQy1jMxNTO3UNJUsLVVgInDhTUBDVgx+TIAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print todecimal("123.45678") == decimal(123.45678)\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/todecimalfunction","todecimalfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"todouble","Converts the input expression to a value of type `real`.",`> The \`todouble()\` and \`toreal()\` functions are equivalent\r \r ## Syntax\r \r \`todouble(\`*Expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to [real](scalar-data-types/real.md).|\r \r ## Returns\r \r If conversion is successful, the result is a value of type \`real\`. Otherwise, the returned value will be \`real(null)\`.`,'```\r\ntodouble("123.4") == 123.4\r\n```\r\n\r\n> [!NOTE]\r\n> Use [double() or real()](./scalar-data-types/real.md) when possible.',"https://docs.microsoft.com/azure/data-explorer/kusto/query/todoublefunction","todoublefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"toguid","Converts a string to a [`guid`](./scalar-data-types/guid.md) scalar.",`> [!NOTE]\r > If you have a hard-coded guid, we recommend using [guid()](./scalar-data-types/guid.md).\r \r ## Syntax\r \r \`toguid(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to [guid](scalar-data-types/guid.md).|\r \r ## Returns\r \r The conversion process takes the first 32 characters of the input, ignoring properly located hyphens, validates that the characters are between 0-9 or a-f, and then converts the string into a [\`guid\`](./scalar-data-types/guid.md) scalar. The rest of the string is ignored.\r \r If the conversion is successful, the result will be a [\`guid\`](./scalar-data-types/guid.md) scalar. Otherwise, the result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjeKSIisFIJGZl67JyxXNy6UABEoGhkbGJqZm5haWiUnJKalp6HwlHSwKdUEyuiARXaxqE6H2KJRkJJYoZBYr5OWXKCQqpJdmpijxcsXyctUopFaUpOalgIUUbBVK8kEMkBM1ATuW7RixAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(str: string)\r [\r "0123456789abcdef0123456789abcdef",\r "0123456789ab-cdef-0123-456789abcdef",\r "a string that is not a guid"\r ]\r | extend guid = toguid(str)\r \`\`\`\r \r **Output**\r \r |str|guid|\r |---|---|\r |0123456789abcdef0123456789abcdef|01234567-89ab-cdef-0123-456789abcdef|\r |0123456789ab-cdef-0123-456789abcdef|01234567-89ab-cdef-0123-456789abcdef|\r |a string that isn't a guid||`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/toguidfunction","toguidfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tohex","Converts input to a hexadecimal string.",`## Syntax\r \r \`tohex(\`*value*\`,\` [\`,\` *minLength* ]\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | int or long | ✓ | The value that will be converted to a hex string.|\r | *minLength* | int | | The value representing the number of leading characters to include in the output. Values between 1 and 16 are supported. Values greater than 16 will be truncated to 16. If the string is longer than *minLength* without leading characters, then *minLength* is effectively ignored. Negative numbers may only be represented at minimum by their underlying data size, so for an integer (32-bit) the *minLength* will be at minimum 8, for a long (64-bit) it will be at minimum 16.|\r \r ## Returns\r \r If conversion is successful, result will be a string value.\r If conversion is not successful, result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA42PsQ7CMAxEdyT+4baAlNIQoGLpyI/Qum2kJqkaD/18EhAliIXb7Ds/29NsHG83iGI/0LLTl2qPuoY4KiVk7hSr1X0p5VCWqM7F3TC0CGi8nUay5Bi+QxrMQezjzhdO4poj36iT/hMVyxWhkn6ufib056WEvy0NURtgjcNIruchsbVE8HnPBJje+ZnawwOAcjs/JwEAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print\r tohex(256) == '100',\r tohex(-256) == 'ffffffffffffff00', // 64-bit 2's complement of -256\r tohex(toint(-256), 8) == 'ffffff00', // 32-bit 2's complement of -256\r tohex(256, 8) == '00000100',\r tohex(256, 2) == '100' // Exceeds min length of 2, so min length is ignored.\r \`\`\`\r \r **Output**\r \r |print_0|print_1|print_2|print_3|print_04|\r |--|--|--|--|--|\r |true|true|true|true|true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/tohexfunction","tohexfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"toint","Converts the input to an integer value (signed 32-bit) number representation.",`> [!NOTE]\r > Prefer using [int()](./scalar-data-types/int.md) when possible.\r \r ## Syntax\r \r \`toint(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to an [integer](scalar-data-types/int.md).|\r \r ## Returns\r \r If the conversion is successful, the result will be an integer. Otherwise, the result will be \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJB5IaSoZGxkqaCra2CkAGAO190RQZAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print toint("123") == 123\r \`\`\`\r \r **Output**\r \r |print_0|\r |--|\r |true|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/tointfunction","tointfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tolong","Converts the input value to a long (signed 64-bit) number representation.",`> [!NOTE]\r > Prefer using [long()](./scalar-data-types/long.md) when possible.\r \r ## Syntax\r \r \`tolong(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to a [long](scalar-data-types/long.md).|\r \r ## Returns\r \r If conversion is successful, the result is a long number.\r If conversion isn't successful, the result is \`null\`.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJz8nPS9dQMjQyVtJUsLVVADIAlTTbCRoAAAA=" target="_blank">Run the query</a>\r\n\r\n```\r\ntolong("123") == 123\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/tolongfunction","tolongfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tolower","Converts the input string to lower case.",`## Syntax\r \r \`tolower(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | string | ✓ | The value to convert to a lowercase string.|\r \r ## Returns\r \r If conversion is successful, result is a lowercase string.\r If conversion isn't successful, result is \`null\`.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJz8kvTy3SUPJIzcnJV9JUsLVVUMoAswH4X1SGIQAAAA==" target="_blank">Run the query</a>\r\n\r\n```\r\ntolower("Hello") == "hello"\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/tolowerfunction","tolowerfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"top","Returns the first *N* records sorted by the specified columns.",'## Syntax\r\n\r\n*T* `| top` *NumberOfRows* `by` *Expression* [`asc` | `desc`] [`nulls first` | `nulls last`]\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The tabular input to sort. |\r\n| *NumberOfRows* | int | ✓ | The number of rows of *T* to return.|\r\n| *Expression* | string | ✓ | The scalar expression by which to sort.|\r\n| `asc` or `desc` | string | | Controls whether the selection is from the "bottom" or "top" of the range. Default `desc`.\r\n| `nulls first` or `nulls last` | string | | Controls whether null values appear at the "bottom" or "top" of the range. Default for `asc` is `nulls first`. Default for `desc` is `nulls last`.|\r\n\r\n> [!TIP]\r\n> `top 5 by name` is equivalent to the expression `sort by name | take 5` both from semantic and performance perspectives.',`Show top three storms with most direct injuries.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjJL1AwVkiqVPDMyyotykwtdsksSk0uAQCehD//JgAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top 3 by InjuriesDirect\r \`\`\`\r \r The below table shows only the relevant column. Run the query above to see more storm details for these events.\r \r |InjuriesDirect|...|\r |--|--|\r |519|...|\r |422|...|\r |200|...|\r \r ## See also\r \r * Use [top-nested](topnestedoperator.md) operator to produce hierarchical (nested) top results.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/topoperator","topoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"top-hitters",`Returns an approximation for the most popular distinct values, or the values\r with the largest sum, in the input.`,"> [!NOTE]\r\n> `top-hitters` uses an approximation algorithm optimized for performance\r\n> when the input data is large.\r\n> The approximation is based on the [Count-Min-Sketch](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) algorithm. \r\n\r\n## Syntax\r\n\r\n*T* `|` `top-hitters` *NumberOfValues* `of` *ValueExpression* [ `by` *SummingExpression* ]\r\n\r\n## Parameters\r\n\r\n| Name | Type | Required | Description |\r\n|--|--|--|--|\r\n| *T* | string | ✓ | The input tabular expression.|\r\n| *NumberOfValues* | int, long, or real | ✓ | The number of distinct values of *ValueExpression*.|\r\n| *ValueExpression* | string | ✓ | An expression over the input table *T* whose distinct values are returned.|\r\n| *SummingExpression* | string | | If specified, a numeric expression over the input table *T* whose sum per distinct value of *ValueExpression* establishes which values to emit. If not specified, the count of each distinct value of *ValueExpression* is used instead.|\r\n\r\n## Remarks\r\n\r\nThe first syntax (no *SummingExpression*) is conceptually equivalent to:\r\n\r\n*T*\r\n`|` `summarize` `C``=``count()` `by` *ValueExpression*\r\n`|` `top` *NumberOfValues* by `C` `desc`\r\n\r\nThe second syntax (with *SummingExpression*) is conceptually equivalent to:\r\n\r\n*T*\r\n`|` `summarize` `S``=``sum(*SummingExpression*)` `by` *ValueExpression*\r\n`|` `top` *NumberOfValues* by `S` `desc`",`### Get most frequent items\r \r The next example shows how to find top-5 types of storms.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKMkv0M3ILClJLSpWMFXIT1MAy4RUFqQCAFP10SMoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top-hitters 5 of EventType \r \`\`\`\r \r **Output**\r \r | EventType | approximate_count_EventType |\r |---|---|\r | Thunderstorm Wind | 13015 |\r | Hail | 12711 |\r | Flash Flood | 3688 |\r | Drought | 3616 |\r | Winter Weather | 3349 |\r \r ### Get top hitters based on column value\r \r The next example shows how to find the States with the most "Thunderstorm Wind" events.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVAHNDKgtSFWxtFZRCMkrzUlKLikEKFcIz81KUgApL8gt0MzJLSoDiCoYGCvlpCsEliSWpAPMxVM5OAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where EventType == "Thunderstorm Wind"\r | top-hitters 10 of State \r \`\`\`\r \r **Output**\r \r | State | approximate_sum_State |\r |---|---|\r | TEXAS | 830 |\r | GEORGIA | 609 |\r | MICHIGAN | 602 |\r | IOWA | 585 |\r | PENNSYLVANIA | 549 |\r | ILLINOIS | 533 |\r | NEW YORK | 502 |\r | VIRGINIA | 482 |\r | KANSAS | 476 |\r | OHIO | 455 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/tophittersoperator","tophittersoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"top-nested","Produces a hierarchical aggregation and top values selection, where each level is a refinement of the previous one.",`\`\`\`\r T | top-nested 3 of Location with others="Others" by sum(MachinesNumber), top-nested 4 of bin(Timestamp,5m) by sum(MachinesNumber)\r \`\`\`\r \r The \`top-nested\` operator accepts tabular data as input, and one or more aggregation clauses.\r The first aggregation clause (left-most) subdivides the input records into partitions, according\r to the unique values of some expression over those records. The clause then keeps a certain number of records\r that maximize or minimize this expression over the records. The next aggregation clause then\r applies a similar function, in a nested fashion. Each following clause is applied to the partition produced\r by the previous clause. This process continues for all aggregation clauses.\r \r For example, the \`top-nested\` operator can be used to answer the following question: "For a table containing sales\r figures, such as country/region, salesperson, and amount sold: what are the top five countries/regions by sales? What are the top three salespeople in each of these countries/regions?"\r \r ## Syntax\r \r *T* \`|\` \`top-nested\` *TopNestedClause* [\`,\` \`top-nested\` *TopNestedClause2*]...\r \r Where *TopNestedClause* has the following syntax:\r \r [ *N* ] \`of\` [*ExprName* \`=\`] *Expr* [\`with\` \`others\` \`=\` *ConstExpr*] \`by\` [*AggName* \`=\`] *Aggregation* [\`asc\` | \`desc\`]\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r |*T*|string|✓|The input tabular expression.|\r |*N*|long||The number of top values to return for this hierarchy level. If omitted, all distinct values will be returned.|\r |*ExprName*|string||If specified, sets the name of the output column corresponding to the values of *Expr*.|\r |*Expr*|string|✓|An expression over the input record indicating which value to return for this hierarchy level. Typically it's a column reference from *T*, or some calculation, such as \`bin()\`, over such a column.\r |*ConstExpr*|string||If specified, for each hierarchy level, 1 record will be added with the value that is the aggregation over all records that didn't "make it to the top".|\r |*AggName*|string||If specified, this identifier sets the column name in the output for the value of *Aggregation*.|\r |*Aggregation*|string||The aggregation function to apply to all records sharing the same value of *Expr*. The value of this aggregation determines which of the resulting records are "top". For the possible values, see [supported aggregation functions](#supported-aggregation-functions).|\r |\`asc\` or \`desc\`|string||Controls whether selection is actually from the "bottom" or "top" of the range of aggregated values. The default is \`desc\`.|\r \r ### Supported aggregation functions\r \r The following aggregation functions are supported:\r \r * [sum()](sum-aggfunction.md)\r * [count()](count-aggfunction.md)\r * [max()](max-aggfunction.md)\r * [min()](min-aggfunction.md)\r * [dcount()](dcountif-aggfunction.md)\r * [avg()](avg-aggfunction.md)\r * [percentile()](percentiles-aggfunction.md)\r * [percentilew()](percentiles-aggfunction.md)\r \r > [!NOTE]\r > Any algebraic combination of the aggregations is also supported.\r \r ## Returns\r \r This operator returns a table that has two columns for each aggregation clause:\r \r * One column holds the distinct values of the clause's *\`Expr\`* calculation (having the\r column name *ExprName* if specified)\r * One column holds the result of the *Aggregation*\r calculation (having the column name *AggregationName* if specified)\r \r ## Notes\r \r Input columns that aren't specified as *\`Expr\`* values aren't outputted.\r To get all values at a certain level, add an aggregation count that:\r \r * Omits the value of *N*\r * Uses the column name as the value of *\`Expr\`*\r * Uses \`Ignore=max(1)\` as the aggregation, and then ignore (or project-away)\r the column \`Ignore\`.\r \r The number of records may grow exponentially with the number of aggregation clauses\r ((N1+1) \\* (N2+1) \\* ...). Record growth is even faster if no *N* limit is specified. Take into account that this operator may consume a considerable amount of resources.\r \r If the distribution of the aggregation is considerably non-uniform,\r limit the number of distinct values to return (by using *N*) and use the\r \`with others=\` *ConstExpr* option to get an indication for the "weight" of all other\r cases.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKMkv0M1LLS5JTVEwUshPUwguSSxJVUiqVCguzdVwSk3PzPNJLNHU4UJSZwxWl19alExAoSFIoWteik9+cmJJZn4ehmoAdn/LsYsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top-nested 2 of State by sum(BeginLat),\r top-nested 3 of Source by sum(BeginLat),\r top-nested 1 of EndLocation by sum(BeginLat)\r \`\`\`\r \r **Output**\r \r |State|aggregated_State|Source|aggregated_Source|EndLocation|aggregated_EndLocation|\r |---|---|---|---|---|---|\r |KANSAS|87771.2355000001|Law Enforcement|18744.823|FT SCOTT|264.858|\r |KANSAS|87771.2355000001|Public|22855.6206|BUCKLIN|488.2457|\r |KANSAS|87771.2355000001|Trained Spotter|21279.7083|SHARON SPGS|388.7404|\r |TEXAS|123400.5101|Public|13650.9079|AMARILLO|246.2598|\r |TEXAS|123400.5101|Law Enforcement|37228.5966|PERRYTON|289.3178|\r |TEXAS|123400.5101|Trained Spotter|13997.7124|CLAUDE|421.44|\r \r Use the option 'with others':\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKMkv0M1LLS5JTVEwUshPUwguSSxJVSjPLMlQyC/JSC0qVrBVUHLMyVHwB/Eg0sVKCkmVCsWluRpOqemZeT6JJZo6XArIRhmDjcovLUpOJaTUEKTUNS/FJz85sSQzPw+33UBFCjBVWJwAABtuhnPYAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top-nested 2 of State with others = "All Other States" by sum(BeginLat),\r top-nested 3 of Source by sum(BeginLat),\r top-nested 1 of EndLocation with others = "All Other End Locations" by sum(BeginLat)\r \`\`\`\r \r **Output**\r \r |State|aggregated_State|Source|aggregated_Source|EndLocation|aggregated_EndLocation|\r |---|---|---|---|---|---|\r |KANSAS|87771.2355000001|Law Enforcement|18744.823|FT SCOTT|264.858|\r |KANSAS|87771.2355000001|Public|22855.6206|BUCKLIN|488.2457|\r |KANSAS|87771.2355000001|Trained Spotter|21279.7083|SHARON SPGS|388.7404|\r |TEXAS|123400.5101|Public|13650.9079|AMARILLO|246.2598|\r |TEXAS|123400.5101|Law Enforcement|37228.5966|PERRYTON|289.3178|\r |TEXAS|123400.5101|Trained Spotter|13997.7124|CLAUDE|421.44|\r |KANSAS|87771.2355000001|Law Enforcement|18744.823|All Other End Locations|18479.965|\r |KANSAS|87771.2355000001|Public|22855.6206|All Other End Locations|22367.3749|\r |KANSAS|87771.2355000001|Trained Spotter|21279.7083|All Other End Locations|20890.9679|\r |TEXAS|123400.5101|Public|13650.9079|All Other End Locations|13404.6481|\r |TEXAS|123400.5101|Law Enforcement|37228.5966|All Other End Locations|36939.2788|\r |TEXAS|123400.5101|Trained Spotter|13997.7124|All Other End Locations|13576.2724|\r |KANSAS|87771.2355000001|||All Other End Locations|24891.0836|\r |TEXAS|123400.5101|||All Other End Locations|58523.2932000001|\r |All Other States|1149279.5923|||All Other End Locations|1149279.5923|\r \r The following query shows the same results for the first level used in the example above.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKM9ILUpVCC5JLElVUMzMU9BQD3GNcAxW11FQ93b0CwayNIGqiktzcxOLMqtSQSwNp9T0zDyfxBJNAPC7f85LAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where State !in ('TEXAS', 'KANSAS')\r | summarize sum(BeginLat)\r \`\`\`\r \r **Output**\r \r |sum_BeginLat|\r |---|\r |1149279.5923|\r \r Request another column (EventType) to the top-nested result.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA43OMQ6CQBQE0J5TTAmJFNjbmNDR4QW+y9dgsvs3u4NK4uEVKC102nmZTE9Lvr1rYC5eoMU6aKYO2MMu6ClUbDnPyJMvj3odQyesdgW+vU3J6V++WXwbhs6ccLTwy2P1y9HTHHXbp484wMuzbKrP+5jspo61PGTt3mt/gc7cAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top-nested 2 of State by sum(BeginLat),\r top-nested 2 of Source by sum(BeginLat),\r top-nested 1 of EndLocation by sum(BeginLat),\r top-nested of EventType by tmp = max(1)\r | project-away tmp\r \`\`\`\r \r **Output**\r \r |State|aggregated_State|Source|aggregated_Source|EndLocation|aggregated_EndLocation|EventType|\r |---|---|---|---|---|---|---|\r |KANSAS|87771.2355000001|Trained Spotter|21279.7083|SHARON SPGS|388.7404|Thunderstorm Wind|\r |KANSAS|87771.2355000001|Trained Spotter|21279.7083|SHARON SPGS|388.7404|Hail|\r |KANSAS|87771.2355000001|Trained Spotter|21279.7083|SHARON SPGS|388.7404|Tornado|\r |KANSAS|87771.2355000001|Public|22855.6206|BUCKLIN|488.2457|Hail|\r |KANSAS|87771.2355000001|Public|22855.6206|BUCKLIN|488.2457|Thunderstorm Wind|\r |KANSAS|87771.2355000001|Public|22855.6206|BUCKLIN|488.2457|Flood|\r |TEXAS|123400.5101|Trained Spotter|13997.7124|CLAUDE|421.44|Hail|\r |TEXAS|123400.5101|Law Enforcement|37228.5966|PERRYTON|289.3178|Hail|\r |TEXAS|123400.5101|Law Enforcement|37228.5966|PERRYTON|289.3178|Flood|\r |TEXAS|123400.5101|Law Enforcement|37228.5966|PERRYTON|289.3178|Flash Flood|\r \r Give an index sort order for each value in this level (per group) to sort the result by the last nested level (in this example by EndLocation):\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA4WPwYoCMQyG7z5FjjPQAV326kXw5m0eYIjTbC3aVtKM6OLDm7KrVlzYHNP///K1l8RhfaIoeXYFSccuUhay8AHpC3pBIYDtBfIUmhU5HzcorQGdt2yaeKR/s58lu452k0YUn2IpvDbUI7ElLi8/AuYXbgCdY3K6s0PF0IYSArL/ppqdYQkB9zQcfJamejCwmOu0Sqbntp/Ca+Pva4/y3e+upxp0FgWCj9aPngqNMTpq5qrOjJfhQNHJrnbJLXSwUGj5eDh1dD6iIurEm6V5XLgB1CPS3MABAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top-nested 2 of State by sum(BeginLat), top-nested 2 of Source by sum(BeginLat), top-nested 4 of EndLocation by sum(BeginLat)\r | order by State , Source, aggregated_EndLocation\r | summarize EndLocations = make_list(EndLocation, 10000) , endLocationSums = make_list(aggregated_EndLocation, 10000) by State, Source\r | extend indicies = range(0, array_length(EndLocations) - 1, 1)\r | mv-expand EndLocations, endLocationSums, indicies\r \`\`\`\r \r **Output**\r \r |State|Source|EndLocations|endLocationSums|indices|\r |---|---|---|---|---|\r |TEXAS|Trained Spotter|CLAUDE|421.44|0|\r |TEXAS|Trained Spotter|AMARILLO|316.8892|1|\r |TEXAS|Trained Spotter|DALHART|252.6186|2|\r |TEXAS|Trained Spotter|PERRYTON|216.7826|3|\r |TEXAS|Law Enforcement|PERRYTON|289.3178|0|\r |TEXAS|Law Enforcement|LEAKEY|267.9825|1|\r |TEXAS|Law Enforcement|BRACKETTVILLE|264.3483|2|\r |TEXAS|Law Enforcement|GILMER|261.9068|3|\r |KANSAS|Trained Spotter|SHARON SPGS|388.7404|0|\r |KANSAS|Trained Spotter|ATWOOD|358.6136|1|\r |KANSAS|Trained Spotter|LENORA|317.0718|2|\r |KANSAS|Trained Spotter|SCOTT CITY|307.84|3|\r |KANSAS|Public|BUCKLIN|488.2457|0|\r |KANSAS|Public|ASHLAND|446.4218|1|\r |KANSAS|Public|PROTECTION|446.11|2|\r |KANSAS|Public|MEADE STATE PARK|371.1|3|\r \r The following example returns the two most-recent events\r for each US state, with some information per event.\r Note the use of the \`max(1)\` (which is then projected away)\r for columns which just require propagation through the operator\r without any selection logic.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA22PMQ7CMAxF957CI6BWomVm7NC5XCDEBhUpceRYBSQOTwoFAmL1f0//u1cW147kNRY3UA6Vp6iEwAfo1SjB/grd0bPQeuvMZVEvywJysJlR0d3gMrx+4O/gV0tS6/Fbaf43TGgYIiN1+IE3M5xmB+ETWa3M2bzSVTqzIMkkPB8x0ZbZUKRo7wy+F8H+AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | top-nested of State by Ignore0=max(1),\r top-nested 2 of StartTime by Ignore1=max(StartTime),\r top-nested of EndTime by Ignore2=max(1),\r top-nested of EpisodeId by Ignore3=max(1)\r | project-away Ignore*\r | order by State asc, StartTime desc\r \`\`\`\r \r ### Retrieve the latest records per identity\r \r If you have a table with an ID column and a timestamp column, you can use the top-nested operator to query the latest two records for each unique value of ID. The latest records are defined by the highest value of timestamp.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA43QzW4CIRAH8DtPMeG0JmyyYLVq4sV48RlMD2PBigpscIya+PCFZpc2JrYNBAL5/fkYjZTa5mgqq2dwomj9hwCyzpwIXTsDjWTyUkCgnYkrvw3RIdngez4AALZmaQS+wIgHLkqqUo0c1Y1MfSCASy6eu/G3U7+51+xUk92wd8vg8aifw5e/oZxkOPoHnGY45uyN3YFCW/tUK6MhbMFq2NxAn527NXOH1yr/BtgPpDIr5S1afumy/5hKmcfql6jqLkqPaWPYm3eq8YL9K0R3fjerT8+D6uvwAQAA" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(id: string, timestamp: datetime, otherInformation: string) \r [\r "Barak", datetime(2015-01-01), "1",\r "Barak", datetime(2016-01-01), "2",\r "Barak", datetime(2017-01-20), "3",\r "Donald", datetime(2017-01-20), "4",\r "Donald", datetime(2017-01-18), "5",\r "Donald", datetime(2017-01-19), "6"\r ]\r | top-nested of id by dummy0=max(1), \r top-nested 2 of timestamp by dummy1=max(timestamp), \r top-nested of otherInformation by dummy2=max(1)\r | project-away dummy0, dummy1, dummy2 \r \`\`\`\r \r **Output**\r \r | id | timestamp | otherInformation |\r |---|---|---|\r | Barak | 2016-01-01T00:00:00Z | 2 |\r | Donald | 2017-01-19T00:00:00Z | 6 |\r | Barak | 2017-01-20T00:00:00Z | 3 |\r | Donald | 2017-01-20T00:00:00Z | 4 |\r \r Here's a step-by-step explanation of the query:\r \r 1. The \`datatable\` creates a test dataset.\r 1. The first \`top-nested\` clause returns all distinct values of \`id\`.\r 1. The second \`top-nested\` clause selects the top two records with the highest \`timestamp\` for each id.\r 1. The third \`top-nested\` clause adds the \`otherInformation\` column for each record.\r 1. The \`project-away\` operator removes the dummy columns introduced by the top-nested operator.`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/topnestedoperator","topnestedoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"toscalar","Returns a scalar constant value of the evaluated expression.",`This function is useful for queries that require staged calculations. For example,\r calculate a total count of events, and then use the result to filter groups\r that exceed a certain percent of all events.\r \r Any two statements must be separated by a semicolon.\r \r ## Syntax\r \r \`toscalar(\`*expression*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *expression* | string | ✓ | The value to convert to a scalar value.|\r \r ## Returns\r \r A scalar constant value of the evaluated expression.\r If the result is a tabular, then the first column and first row will be taken for conversion.\r \r > [!TIP]\r > You can use a [let statement](letstatement.md) for readability of the query when using \`toscalar()\`.\r \r ## Limitations\r \r \`toscalar()\` can't be applied on a scenario that applies the function on each row. This is because the function can only be calculated a constant number of times during the query execution.\r Usually, when this limitation is hit, the following error will be returned: \`can't use '<column name>' as it is defined outside its row-context scope.\`\r \r In the following example, the query fails with the error:\r \r > \`'toscalar': can't use 'x' as it is defined outside its row-context scope.\` \r \r \`\`\`\r let _dataset1 = datatable(x:long)[1,2,3,4,5];\r let _dataset2 = datatable(x:long, y:long) [ 1, 2, 3, 4, 5, 6];\r let tg = (x_: long)\r {\r toscalar(_dataset2| where x == x_ | project y);\r };\r _dataset1\r | extend y = tg(x)\r \`\`\`\r \r This failure can be mitigated by using the \`join\` operator, as in the following example:\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVGIT0ksSSxOLTFUsFUAMUsSk3JSNSqsFHLy89I1ow11FIx0FIx1FEx0FExjrblykLQYYdOio1AJ1auAqllHwQyoH24dV41CVn5mnoIG3DRNhfw8hQoFoERBUX5WanKJQgXQMAB+d0ZipAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let _dataset1 = datatable(x: long)[1, 2, 3, 4, 5];\r let _dataset2 = datatable(x: long, y: long) [1, 2, 3, 4, 5, 6];\r _dataset1\r | join (_dataset2) on x \r | project x, y\r \`\`\`\r \r **Output**\r \r |x|y|\r |---|---|\r |1|2|\r |3|4|\r |5|6|`,`Evaluate \`Start\`, \`End\`, and \`Step\` as scalar constants, and use the result for \`range\` evaluation.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA02NQQrCQAxF94J3+EuFbupOJEtP0BMMNS3COFPSCIP08M1kELoL/7/3E1kxaBAFQfM6hhjkssg7KQr118f5FI14ptexl5BmRsEk+YPectyxKi92bxjzN+lfHGp6MG+1aPqv6e25TdQfPuLOBi7KHllPTnWwgIzrHKQK7lv8zY7AAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let Start = toscalar(print x=1);\r let End = toscalar(range x from 1 to 9 step 1 | count);\r let Step = toscalar(2);\r range z from Start to End step Step | extend start=Start, end=End, step=Step\r \`\`\`\r \r **Output**\r \r |z|start|end|step|\r |---|---|---|---|\r |1|1|9|2|\r |3|1|9|2|\r |5|1|9|2|\r |7|1|9|2|\r |9|1|9|2|\r \r The following example shows how \`toscalar\` can be used to "fix" an expression\r so that it will be calculated precisely once. In this case, the expression being\r calculated returns a different value per evaluation.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0XLsQqAIBRG4T3wHf5RoUXX8FlC8nYJTEONDHr4bGo9HydQBWtY1FQWF1yWka6Zz81LpSYxhM9N9z/3ml1kQsOa0w7dXxiUSge0GB5QqxQ9mmU94rZsXqEZQWVlAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let g1 = toscalar(new_guid());\r let g2 = new_guid();\r range x from 1 to 2 step 1\r | extend x=g1, y=g2\r \`\`\`\r \r **Output**\r \r |x|y|\r |---|---|\r |e6a15e72-756d-4c93-93d3-fe85c18d19a3|c2937642-0d30-4b98-a157-a6706e217620|\r |e6a15e72-756d-4c93-93d3-fe85c18d19a3|c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/toscalarfunction","toscalarfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"tostring","Converts the input to a string representation.",`## Syntax\r \r \`tostring(\`*value*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *value* | scalar | ✓ | The value to convert to a string.|\r \r ## Returns\r \r If *value* is non-null, the result is a string representation of *value*.\r If *value* is null, the result is an empty string.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJLy4BMtI1DI2MNRVsbRWUgAwlAFmZlSocAAAA" target="_blank">Run the query</a>\r\n\r\n```\r\ntostring(123) == "123"\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/tostringfunction","tostringfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"totimespan","Converts the input to a [timespan](./scalar-data-types/timespan.md) scalar value.",`> **Deprecated aliases:** totime()\r \r ## Syntax\r \r \`totimespan(\`*value*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Description|\r |--|--|--|--|\r | *value* | string | ✓ | The value to convert to a [timespan](./scalar-data-types/timespan.md).|\r \r ## Returns\r \r If conversion is successful, result will be a [timespan](./scalar-data-types/timespan.md) value.\r Else, result will be null.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJL8nMTS0uSMzTUDLQMzCwMjC0MjBQ0lSwtVUAyWgY5mbmaQIAkicpMSwAAAA=" target="_blank">Run the query</a>\r\n\r\n```\r\ntotimespan("0.00:01:00") == time(1min)\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/totimespanfunction","totimespanfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"toupper","Converts a string to upper case.",`## Syntax\r \r \`toupper(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | string | ✓ | The value to convert to an uppercase string.|\r \r ## Returns\r \r If conversion is successful, result is an uppercase string.\r If conversion isn't successful, result is \`null\`.`,'> [!div class="nextstepaction"]\r\n> <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSjJLy0oSC3SUMpIzcnJV9JUsLVVUPJw9fHxVwIAC8jUKyEAAAA=" target="_blank">Run the query</a>\r\n\r\n```\r\ntoupper("hello") == "HELLO"\r\n```',"https://docs.microsoft.com/azure/data-explorer/kusto/query/toupperfunction","toupperfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"translate",`Replaces a set of characters ('searchList') with another set of characters ('replacementList') in a given a string.\r The function searches for characters in the 'searchList' and replaces them with the corresponding characters in 'replacementList'`,`## Syntax\r \r \`translate(\`*searchList*\`,\` *replacementList*\`,\` *source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *searchList* | string | ✓ | The list of characters that should be replaced.|\r | *replacementList* | string | ✓ | The list of characters that should replace the characters in *searchList*.|\r | *source* | string | ✓ | A string to search.|\r \r ## Returns\r \r *source* after replacing all occurrences of characters in 'replacementList' with the corresponding characters in 'searchList'`,'|Input |Output |\r\n|--------------------------------------|---------|\r\n|`translate("abc", "x", "abc")` |`"xxx"` |\r\n|`translate("abc", "", "ab")` |`""` |\r\n|`translate("krasp", "otsku", "spark")`|`"kusto"`|',"https://docs.microsoft.com/azure/data-explorer/kusto/query/translatefunction","translatefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"treepath","Enumerates all the path expressions that identify leaves in a dynamic object.",`## Syntax\r \r \`treepath(\`*object*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *object* | dynamic | ✓| A dynamic property bag object for which to enumerate the path expressions.|\r \r ## Returns\r \r An array of path expressions.`,`|Expression|Evaluates to|\r |---|---|\r |\`treepath(parse_json('{"a":"b", "c":123}'))\` | \`["['a']","['c']"]\`|\r |\`treepath(parse_json('{"prop1":[1,2,3,4], "prop2":"value2"}'))\`|\`["['prop1']","['prop1'][0]","['prop2']"]\`|\r |\`treepath(parse_json('{"listProperty":[100,200,300,"abcde",{"x":"y"}]}'))\`|\`["['listProperty']","['listProperty'][0]","['listProperty'][0]['x']"]\`|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/treepathfunction","treepathfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"trim","Removes all leading and trailing matches of the specified regular expression.",`## Syntax\r \r \`trim(\`*regex*\`,\` *source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *regex* | string | ✓ | The string or [regular expression](re2.md) to be trimmed from *source*.|\r | *source* | string | ✓ | The source string from which to trim *regex*.|\r \r ## Returns\r \r *source* after trimming matches of *regex* found in the beginning and/or the end of *source*.`,`The following statement trims *substring* from the start and the end of the *string_to_trim*.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLinKzEuPL8mPBzJyFWwVHJR0dTNKSgqKrfT1k4BSesn5ubq6Sta8XDkg5aVJEB1AlUoQ4QIgF4s5qAI6CiAyNzUlHq4dJKABN08HVb0mAHnS2GacAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let string_to_trim = @"--https://bing.com--";\r let substring = "--";\r print string_to_trim = string_to_trim, trimmed_string = trim(substring,string_to_trim)\r \`\`\`\r \r **Output**\r \r |string_to_trim|trimmed_string|\r |---|---|\r |--https://bing.com--|https://bing.com|\r \r The next statement trims all non-word characters from start and end of the string.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5OWqUSgoys9KTS4BihQp2ILI5MQSDSVdBQUlHaWQVKCAkk6FjoOSvr6CipImSENqRUlqXopCSVFmbm5qSjxEH4in4aAUHRdTHqutpAMU1AQAsu/uCXcAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | project str = strcat("- ","Te st",x,@"// $")\r | extend trimmed_str = trim(@"[^\\w]+",str)\r \`\`\`\r \r **Output**\r \r |str|trimmed_str|\r |---|---|\r |- Te st1// $|Te st1|\r |- Te st2// $|Te st2|\r |- Te st3// $|Te st3|\r |- Te st4// $|Te st4|\r |- Te st5// $|Te st5|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/trimfunction","trimfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"trim_end","Removes trailing match of the specified regular expression.",`## Syntax\r \r \`trim_end(\`*regex*\`,\` *source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *regex* | string | ✓ | The string or [regular expression](re2.md) to be trimmed from the end of *source*.|\r | *source* | string | ✓ | The source string from which to trim *regex*.|\r \r ## Returns\r \r *source* after trimming matches of *regex* found in the end of *source*.`,`The following statement trims *substring* from the end of *string_to_trim*.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLinKzEuPL8mPBzJyFWwVHJSSgAJ6yfm5Sta8XDkgJaVJEFVAWSWYRAFQAItuVAEdEJGbmhIP1w8SiE/NS9GAG6qDqkUTAKQH9A2VAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let string_to_trim = @"bing.com";\r let substring = ".com";\r print string_to_trim = string_to_trim,trimmed_string = trim_end(substring,string_to_trim)\r \`\`\`\r \r **Output**\r \r |string_to_trim|trimmed_string|\r |--------------|--------------|\r |bing.com |bing |\r \r The next statement trims all non-word characters from the end of the string.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUSguKVKwBZHJiSUaSroKCko6SiGpQAElHQclfX0FFSVNXq4ahdSKktS8FIWSoszc3NSUeIguEC8eKKzhoBQdF1Meq62kA5TQBADbLZbMWQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print str = strcat("- ","Te st",x,@"// $")\r | extend trimmed_str = trim_end(@"[^\\w]+",str)\r \`\`\`\r \r **Output**\r \r |str |trimmed_str|\r |-------------|-----------|\r |- Te st1// $|- Te st1 |\r |- Te st2// $|- Te st2 |\r |- Te st3// $|- Te st3 |\r |- Te st4// $|- Te st4 |\r |- Te st5// $|- Te st5 |`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/trimendfunction","trimendfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"trim_start","Removes leading match of the specified regular expression.",`## Syntax\r \r \`trim_start(\`*regex*\`,\` *source*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *regex* | string | ✓ | The string or [regular expression](re2.md) to be trimmed from the beginning of *source*.|\r | *source* | string | ✓ | The source string from which to trim *regex*.|\r \r ## Returns\r \r *source* after trimming match of *regex* found in the beginning of *source*.`,`The following statement trims *substring* from the start of *string_to_trim*.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLinKzEuPL8mPBzJyFWwVHJQySkoKiq309ZOAEnrJ+blK1rxcOSClpUkQ1UBVcEUgyQKgIBaTUAV0QERuako83AyQAJCXWFSiATdaB1WTJgD3gw1dowAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let string_to_trim = @"https://bing.com";\r let substring = "https://";\r print string_to_trim = string_to_trim,trimmed_string = trim_start(substring,string_to_trim)\r \`\`\`\r \r **Output**\r \r |string_to_trim|trimmed_string|\r |---|---|\r |https://bing.com|bing.com|\r \r The next statement trims all non-word characters from the beginning of the string.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5OWqUSgoys9KTS4BihQp2ILI5MQSDSVdBQUlHaWQVKCAkk6FjoOSvr6CipImSENqRUlqXopCSVFmbm5qSjxEH4gHZCYWlWg4KEXHxZTHaivpAKU0AZNZAoR9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | project str = strcat("- ","Te st",x,@"// $")\r | extend trimmed_str = trim_start(@"[^\\w]+",str)\r \`\`\`\r \r **Output**\r \r |str|trimmed_str|\r |---|---|\r |- Te st1// $|Te st1// $|\r |- Te st2// $|Te st2// $|\r |- Te st3// $|Te st3// $|\r |- Te st4// $|Te st4// $|\r |- Te st5// $|Te st5// $|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/trimstartfunction","trimstartfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"unicode_codepoints_from_string","Returns a dynamic array of the Unicode codepoints of the input string. This function is the inverse operation of [`unicode_codepoints_to_string()`](unicode-codepoints-to-string-function.md) function.",`> **Deprecated aliases:** to_utf8()\r \r ## Syntax\r \r \`unicode_codepoints_from_string(\`*value*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *value* | string | ✓ | The source string to convert. |\r \r ## Returns\r \r Returns a dynamic array of the Unicode codepoints of the characters that make up the string provided to this function.\r See [\`unicode_codepoints_to_string()\`](unicode-codepoints-to-string-function.md))`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVSjNy0zOT0mNBxEF+UDx4vi0ovzc+OISoKJ0DaVHk5Y9mrTh0aR1jyatfzRplZImADy1iJs9AAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = unicode_codepoints_from_string("\u24A6\u24B0\u24AE\u24AF\u24AA")\r \`\`\`\r \r **Output**\r \r |arr|\r |---|\r |[9382, 9392, 9390, 9391, 9386]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUUgsKlKwVSjNy0zOT0mNBxEF+UDx4vi0ovzc+OISoKJ0DaXry69Pvb7w+ozrUxV0FbxLi0vylTQBiYjgf0AAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print arr = unicode_codepoints_from_string("\u05E7\u05D5\u05E1\u05D8\u05D5 - Kusto")\r \`\`\`\r \r **Output**\r \r |arr|\r |---|\r |[1511, 1493, 1505, 1496, 1493, 32, 45, 32, 75, 117, 115, 116, 111]|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUSguKVKwVSjNy0zOT0mNBxEF+UDx4viS/HigXGZeugYWybSi/FyYtJJ3aXFJvpKmJgA5JJpZUQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print str = unicode_codepoints_to_string(unicode_codepoints_from_string("Kusto"))\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |Kusto|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unicode-codepoints-from-string-function","unicode-codepoints-from-string-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"unicode_codepoints_to_string","Returns the string represented by the Unicode codepoints. This function is the inverse operation of [`unicode_codepoints_from_string()`](unicode-codepoints-from-string-function.md) function.",`> **Deprecated aliases:** make_string()\r \r ## Syntax\r \r \`unicode_codepoints_to_string (\`*values*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *values* | int, long, or dynamic | ✓ | One or more comma-separated values to convert. The values may also be a [dynamic array](scalar-data-types/dynamic.md).|\r \r > [!NOTE]\r > This function receives up to 64 arguments.\r \r ## Returns\r \r Returns the string made of the UTF characters whose Unicode codepoint value is provided by the arguments to this function. The input must consist of valid Unicode codepoints.\r If any argument isn't a valid Unicode codepoint, the function returns \`null\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUSguKVKwVSjNy0zOT0mNBxEF+UDx4viS/HigXGZeuoa5qY6CoaE5iACzzECEoSYA+KAQ+EAAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str = unicode_codepoints_to_string(75, 117, 115, 116, 111)\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |Kusto|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUSguKVKwVSjNy0zOT0mNBxEF+UDx4viS/HigXGZeukZKZV5ibmayRrS5qY6CoaE5iACzzECEYaymJgBfBO+kSwAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print str = unicode_codepoints_to_string(dynamic([75, 117, 115, 116, 111]))\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |Kusto|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUSguKVKwVSjNy0zOT0mNBxEF+UDx4viS/HigXGZeukZKZV5ibmayRrS5qY6CoaE5iDCN1QRRZiDCUBMAeB3lVUsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str = unicode_codepoints_to_string(dynamic([75, 117, 115]), 116, 111)\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |Kusto|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUSguKVKwVSjNy0zOT0mNBxEF+UDx4viS/HigXGZeuoa5qY6CoQEQG5rDGHARMxjDUBMACrIR/1AAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r print str = unicode_codepoints_to_string(75, 10, 117, 10, 115, 10, 116, 10, 111)\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r |K<br>u<br>s<br>t<br>o|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/kvce69202ceceed490b88d.northeurope/databases/Other?query=H4sIAAAAAAAAAysoyswrUSguKVKwVSjNy0zOT0mNBxEF+UDx4viS/HigXGZeukZRYl56qoaJhY6puaaOAoRnZqpjaQDnWZrrGBoZaWoCAIEH/7dTAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print str = unicode_codepoints_to_string(range(48,57), range(65,90), range(97,122))\r \`\`\`\r \r **Output**\r \r |str|\r |---|\r 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unicode-codepoints-to-string-function","unicode-codepoints-to-string-function.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"union","Takes two or more tables and returns the rows of all of them.","## Syntax\r\n\r\n[ *T* `|` ] `union` [ *UnionParameters* ] [`kind=` `inner`|`outer`] [`withsource=` *ColumnName*] [`isfuzzy=` `true`|`false`] *Tables*\r\n\r\n> [!NOTE]\r\n> The operation of the `union` operator can be altered by setting the `best_effort` request property to `true`, using either a [set statement](./setstatement.md) or through [client request properties](../api/netfx/request-properties.md). When this property is set to `true`, the `union` operator will disregard fuzzy resolution and connectivity failures to execute any of the sub-expressions being \u201Cunioned\u201D and yield a warning in the query status results.\r\n\r\n## Parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|*T*|string||The input tabular expression.|\r\n|*UnionParameters*|string||Zero or more space-separated parameters in the form of *Name* `=` *Value* that control the behavior of the row-match operation and execution plan. See [supported union parameters](#supported-union-parameters).|\r\n|`kind`|string||Either `inner` or `outer`. `inner` causes the result to have the subset of columns that are common to all of the input tables. `outer` causes the result to have all the columns that occur in any of the inputs. Cells that aren't defined by an input row are set to `null`. The default is `outer`.<br/><br/>With `outer`, the result has all the columns that occur in any of the inputs, one column for each name and type occurrences. This means that if a column appears in multiple tables and has multiple types, it has a corresponding column for each type in the union's result. This column name is suffixed with a '_' followed by the origin column [type](./scalar-data-types/index.md).|\r\n|`withsource=`*ColumnName*|string||If specified, the output includes a column called *ColumnName* whose value indicates which source table has contributed each row. If the query effectively references tables from more than one database including the default database, then the value of this column has a table name qualified with the database. __cluster and database__ qualifications are present in the value if more than one cluster is referenced.|\r\n|`isfuzzy`|bool||If set to `true`, allows fuzzy resolution of union legs. The set of union sources is reduced to the set of table references that exist and are accessible at the time while analyzing the query and preparing for execution. If at least one such table was found, any resolution failure yields a warning in the query status results, but won't prevent the query execution. If no resolutions were successful, the query returns an error. The default is `false`.<br/><br/>`isfuzzy=true` only applies to the `union` sources resolution phase. Once the set of source tables is determined, possible additional query failures won't be suppressed.|\r\n|*Tables*|string||One or more comma-separated table references, a query expression enclosed with parenthesis, or a set of tables specified with a wildcard. For example, `E*` would form the union of all the tables in the database whose names begin `E`.|\r\n\r\n### Supported union parameters\r\n\r\n|Name|Type|Required|Description|\r\n|--|--|--|--|\r\n|`hint.concurrency`|int||Hints the system how many concurrent subqueries of the `union` operator should be executed in parallel. The default is the number of CPU cores on the single node of the cluster (2 to 16).|\r\n|`hint.spread`|int||Hints the system how many nodes should be used by the concurrent `union` subqueries execution. The default is 1.|\r\n\r\n> [!NOTE]\r\n>\r\n> * The `union` scope can include [let statements](./letstatement.md) if attributed with the `view` keyword.\r\n> * The `union` scope will not include [functions](../management/functions.md). To include a function, define a [let statement](./letstatement.md) with the `view` keyword.\r\n> * There's no guarantee of the order in which the union legs will appear, but if each leg has an `order by` operator, then each leg will be sorted.\r\n\r\n## Returns\r\n\r\nA table with as many rows as there are in all the input tables.",`### Tables with string in name or column\r \r \`\`\`\r union K* | where * has "Kusto"\r \`\`\`\r \r Rows from all tables in the database whose name starts with \`K\`, and in which any column includes the word \`Kusto\`.\r \r ### Distinct count\r \r \`\`\`\r union withsource=SourceTable kind=outer Query, Command\r | where Timestamp > ago(1d)\r | summarize dcount(UserId)\r \`\`\`\r \r The number of distinct users that have produced\r either a \`Query\` event or a \`Command\` event over the past day. In the result, the 'SourceTable' column will indicate either "Query" or "Command".\r \r \`\`\`\r Query\r | where Timestamp > ago(1d)\r | union withsource=SourceTable kind=outer \r (Command | where Timestamp > ago(1d))\r | summarize dcount(UserId)\r \`\`\`\r \r This more efficient version produces the same result. It filters each table before creating the union.\r \r ### Using \`isfuzzy=true\`\r \r \`\`\`\r // Using union isfuzzy=true to access non-existing view: \r let View_1 = view () { print x=1 };\r let View_2 = view () { print x=1 };\r let OtherView_1 = view () { print x=1 };\r union isfuzzy=true\r (View_1 | where x > 0), \r (View_2 | where x > 0),\r (View_3 | where x > 0)\r | count \r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |2|\r \r Observing Query Status - the following warning returned:\r \`Failed to resolve entity 'View_3'\`\r \r \`\`\`\r // Using union isfuzzy=true and wildcard access:\r let View_1 = view () { print x=1 };\r let View_2 = view () { print x=1 };\r let OtherView_1 = view () { print x=1 };\r union isfuzzy=true View*, SomeView*, OtherView*\r | count \r \`\`\`\r \r **Output**\r \r |Count|\r |---|\r |3|\r \r Observing Query Status - the following warning returned:\r \`Failed to resolve entity 'SomeView*'\`\r \r ### Source columns types mismatch\r \r \`\`\`\r let View_1 = view () { print x=1 };\r let View_2 = view () { print x=toint(2) };\r union withsource=TableName View_1, View_2\r \`\`\`\r \r **Output**\r \r |TableName|x_long|x_int|\r |---------|------|-----|\r |View_1 |1 | |\r |View_2 | |2 |\r \r \`\`\`\r let View_1 = view () { print x=1 };\r let View_2 = view () { print x=toint(2) };\r let View_3 = view () { print x_long=3 };\r union withsource=TableName View_1, View_2, View_3 \r \`\`\`\r \r **Output**\r \r |TableName|x_long1|x_int |x_long|\r |---------|-------|------|------|\r |View_1 |1 | | |\r |View_2 | |2 | |\r |View_3 | | |3 |\r \r Column \`x\` from \`View_1\` received the suffix \`_long\`, and as a column named \`x_long\` already exists in the result schema, the column names were de-duplicated, producing a new column- \`x_long1\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unionoperator","unionoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"unixtime_microseconds_todatetime","Converts unix-epoch microseconds to UTC datetime.",`## Syntax\r \r \`unixtime_microseconds_todatetime(\`*microseconds*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *microseconds* | real | ✓ | The epoch timestamp in microseconds. A \`datetime\` value that occurs before the epoch time (1970-01-01 00:00:00) has a negative timestamp value.|\r \r ## Returns\r \r If the conversion is successful, the result is a [datetime](./scalar-data-types/datetime.md) value. Otherwise, the result is null.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJLEmNL8nMTVWwVSjNy6wAMeNzM5OL8otTk/PzUorjS/JBakDiGoamJmbGBgYWBlCgCQC7i8BNRAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print date_time = unixtime_microseconds_todatetime(1546300800000000)\r \`\`\`\r \r **Output**\r \r |date_time|\r |---|\r |2019-01-01 00:00:00.0000000|\r \r ## See also\r \r * Convert unix-epoch seconds to UTC datetime using [unixtime_seconds_todatetime()](unixtime-seconds-todatetimefunction.md).\r * Convert unix-epoch milliseconds to UTC datetime using [unixtime_milliseconds_todatetime()](unixtime-milliseconds-todatetimefunction.md).\r * Convert unix-epoch nanoseconds to UTC datetime using [unixtime_nanoseconds_todatetime()](unixtime-nanoseconds-todatetimefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unixtime-microseconds-todatetimefunction","unixtime-microseconds-todatetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"unixtime_milliseconds_todatetime","Converts unix-epoch milliseconds to UTC datetime.",`## Syntax\r \r \`unixtime_milliseconds_todatetime(\`*milliseconds*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *milliseconds* | real | ✓ | The epoch timestamp in microseconds. A \`datetime\` value that occurs before the epoch time (1970-01-01 00:00:00) has a negative timestamp value.|\r \r ## Returns\r \r If the conversion is successful, the result is a [datetime](./scalar-data-types/datetime.md) value. Otherwise, the result is null.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJLEmNL8nMTVWwVSjNy6wAMeNzM3NyMotTk/PzUorjS/JBakDiGoamJmbGBgYWBiCgCQDATIC6QQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print date_time = unixtime_milliseconds_todatetime(1546300800000)\r \`\`\`\r \r **Output**\r \r |date_time|\r |---|\r |2019-01-01 00:00:00.0000000|\r \r ## See also\r \r * Convert unix-epoch seconds to UTC datetime using [unixtime_seconds_todatetime()](unixtime-seconds-todatetimefunction.md).\r * Convert unix-epoch microseconds to UTC datetime using [unixtime_microseconds_todatetime()](unixtime-microseconds-todatetimefunction.md).\r * Convert unix-epoch nanoseconds to UTC datetime using [unixtime_nanoseconds_todatetime()](unixtime-nanoseconds-todatetimefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unixtime-milliseconds-todatetimefunction","unixtime-milliseconds-todatetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"unixtime_nanoseconds_todatetime","Converts unix-epoch nanoseconds to UTC datetime.",`## Syntax\r \r \`unixtime_nanoseconds_todatetime(\`*nanoseconds*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *nanoseconds* | real | ✓ | The epoch timestamp in nanoseconds. A \`datetime\` value that occurs before the epoch time (1970-01-01 00:00:00) has a negative timestamp value.|\r \r ## Returns\r \r If the conversion is successful, the result is a [datetime](./scalar-data-types/datetime.md) value. Otherwise, the result is null.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJLEmNL8nMTVWwVSjNy6wAMePzEvPyi1OT8/NSiuNL8kFKQMIahqYmZsYGBhYGCKAJAOcnRh5GAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r print date_time = unixtime_nanoseconds_todatetime(1546300800000000000)\r \`\`\`\r \r **Output**\r \r |date_time|\r |---|\r |2019-01-01 00:00:00.0000000|\r \r ## See also\r \r * Convert unix-epoch seconds to UTC datetime using [unixtime_seconds_todatetime()](unixtime-seconds-todatetimefunction.md).\r * Convert unix-epoch milliseconds to UTC datetime using [unixtime_milliseconds_todatetime()](unixtime-milliseconds-todatetimefunction.md).\r * Convert unix-epoch microseconds to UTC datetime using [unixtime_microseconds_todatetime()](unixtime-microseconds-todatetimefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unixtime-nanoseconds-todatetimefunction","unixtime-nanoseconds-todatetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"unixtime_seconds_todatetime","Converts unix-epoch seconds to UTC datetime.",`## Syntax\r \r \`unixtime_seconds_todatetime(\`*seconds*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *seconds* | real | ✓ | The epoch timestamp in seconds. A \`datetime\` value that occurs before the epoch time (1970-01-01 00:00:00) has a negative timestamp value.|\r \r ## Returns\r \r If the conversion is successful, the result is a [datetime](./scalar-data-types/datetime.md) value. Otherwise, the result is null.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUUhJLEmNL8nMTVWwVSjNy6wAMeOLU5Pz81KK40vyQdIgIQ1DUxMzYwMDCwMDTQDkH54GOQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print date_time = unixtime_seconds_todatetime(1546300800)\r \`\`\`\r \r **Output**\r \r |date_time|\r |---|\r |2019-01-01 00:00:00.0000000|\r \r ## See also\r \r * Convert unix-epoch milliseconds to UTC datetime using [unixtime_milliseconds_todatetime()](unixtime-milliseconds-todatetimefunction.md).\r * Convert unix-epoch microseconds to UTC datetime using [unixtime_microseconds_todatetime()](unixtime-microseconds-todatetimefunction.md).\r * Convert unix-epoch nanoseconds to UTC datetime using [unixtime_nanoseconds_todatetime()](unixtime-nanoseconds-todatetimefunction.md).`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/unixtime-seconds-todatetimefunction","unixtime-seconds-todatetimefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"url_decode","The function converts an encoded URL into a regular URL representation.",`For more information about URL encoding and decoding, see [Percent-encoding](https://en.wikipedia.org/wiki/Percent-encoding).\r \r ## Syntax\r \r \`url_decode(\`*encoded_url*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *encoded_url* | string | ✓ | The encoded URL to decode.|\r \r ## Returns\r \r URL (string) in a regular representation.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLcpRsFVwUM8oKSkoVjVOVDVKA6Ly8nK9pMy8dL3k/FwgV92al6ugKDOvRCG/KDM9My8RpAeoU0chJTU5PyU1BcKNh/A0gExNAHjpCSdcAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r let url = @'https%3a%2f%2fwww.bing.com%2f';\r print original = url, decoded = url_decode(url)\r \`\`\`\r \r **Output**\r \r |original|decoded|\r |---|---|\r |https%3a%2f%2fwww.bing.com%2f|https://www.bing.com/|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/urldecodefunction","urldecodefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"url_encode",`The function converts characters of the input URL into a format that can be transmitted over the internet.\r Differs from [url_encode_component](./urlencodecomponentfunction.md) by encoding spaces as '+' and not as '%20' (see application/x-www-form-urlencoded [here](https://en.wikipedia.org/wiki/Percent-encoding)).`,`For more information about URL encoding and decoding, see [Percent-encoding](https://en.wikipedia.org/wiki/Percent-encoding).\r \r ## Syntax\r \r \`url_encode(\`*url*\`)\`\r \r ## Parameters\r \r |Name|Type|Required|Parameters|\r |--|--|--|--|\r |*url*|string|✓|The URL to encode.|\r \r ## Returns\r \r URL (string) converted into a format that can be transmitted over the Internet.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA8tJLVEoLcpRsFVwUM8oKSkottLXLy8v10vKzEvXS87P1c9IzcnJVyjPL8pJUbfmKijKzCtRyC/KTM/MSwTpAurVUUjNS85PSU2BcOMhPA0gUxMAGwCJQ14AAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r let url = @'https://www.bing.com/hello world';\r print original = url, encoded = url_encode(url)\r \`\`\`\r \r **Output**\r \r |original|encoded|\r |---|---|\r |https://www.bing.com/hello world/|https%3a%2f%2fwww.bing.com%2fhello+world|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/urlencodefunction","urlencodefunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"url_encode_component","The function converts characters of the input URL into a format that can be transmitted over the internet. Differs from [url_encode](./urlencodefunction.md) by encoding spaces as '%20' and not as '+'.",`For more information about URL encoding and decoding, see [Percent-encoding](https://en.wikipedia.org/wiki/Percent-encoding).\r \r ## Syntax\r \r \`url_encode_component(\`*url*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *url* | string | ✓ | The URL to encode.|\r \r ## Returns\r \r URL (string) converted into a format that can be transmitted over the Internet.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAyXLMQqAMAxA0V3wDtmqIO2uCN5E1AZbiEmpkV7fiuP/8AgVnkwww2KCarpH50opdo982kMuF5BIoEgm78zUNilHVpAcz8jb56oeAPkQj/7P9a+18iSMrF2d/QtxbpMUagAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r let url = @'https://www.bing.com/hello world/';\r print original = url, encoded = url_encode_component(url)\r \`\`\`\r \r **Output**\r \r |original|encoded|\r |---|---|\r |https://www.bing.com/hello world/|https%3a%2f%2fwww.bing.com%2fhello%20world|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/urlencodecomponentfunction","urlencodecomponentfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"variance","Calculates the variance of *expr* across the group, considering the group as a [sample](https://en.wikipedia.org/wiki/Sample_%28statistics%29).",`The following formula is used:\r \r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`variance(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | real | ✓ | The expression used for the variance calculation.|\r \r ## Returns\r \r Returns the variance value of *expr* across the group.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5KpRKC7NzU0syqxKVchNzE6Nz8ksLtGo0NRRKAMKJuYlpwI5ADQ5+T5AAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | summarize make_list(x), variance(x) \r \`\`\`\r \r **Output**\r \r |list_x|variance_x|\r |---|---|\r |[ 1, 2, 3, 4, 5]|2.5|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/variance-aggfunction","variance-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"varianceif","Calculates the [variance](variance-aggfunction.md) of *expr* in records for which *predicate* evaluates to `true`.",`[!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`varianceif(\`*expr*\`,\` *predicate*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression to use for the variance calculation.|\r |*predicate*| string | ✓ | If *predicate* evaluates to \`true\`, the *expr* calculated value will be added to the variance.|\r \r ## Returns\r \r Returns the variance value of *expr* in records for which *predicate* evaluates to \`true\`.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzA0MFAoLkktUDDkqlEoLs3NTSzKrEpVKANSiXnJqZlpGhU6ChWqRgq2tgoGmgA5lfgVQAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 100 step 1\r | summarize varianceif(x, x%2 == 0)\r \`\`\`\r \r **Output**\r \r |varianceif_x|\r |---|\r |850|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/varianceif-aggfunction","varianceif-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"variancep","Calculates the variance of *expr* across the group, considering the group as a [population](https://en.wikipedia.org/wiki/Statistical_population).",`The following formula is used:\r \r \r [!INCLUDE [data-explorer-agg-function-summarize-note](../../includes/data-explorer-agg-function-summarize-note.md)]\r \r ## Syntax\r \r \`variancep(\`*expr*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r |*expr* | string | ✓ | The expression to use for the variance calculation.|\r \r ## Returns\r \r Returns the variance value of *expr* across the group.`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAytKzEtPVahQSCvKz1UwVCjJVzBVKC5JLVAw5KpRKC7NzU0syqxKVchNzE6Nz8ksLtGo0NRRKAMKJuYlpxYAeQCFH59wQQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r range x from 1 to 5 step 1\r | summarize make_list(x), variancep(x) \r \`\`\`\r \r **Output**\r \r |list_x|variance_x|\r |---|---|\r |[ 1, 2, 3, 4, 5]|2|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/variancep-aggfunction","variancep-aggfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"week_of_year","Returns an integer that represents the week number. The week number is calculated from the first week of a year, which is the one that includes the first Thursday, according to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Week_dates).",`**Deprecated aliases:** weekofyear()\r \r > [!NOTE]\r > \`weekofyear()\` wasn't ISO 8601 compliant; the first week of a year was defined as the week with the year's first Wednesday in it.\r \r ## Syntax\r \r \`week_of_year(\`*date*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *date* | datetime | ✓ | The date for which to return the week of the year.|\r \r ## Returns\r \r \`week number\` - The week number that contains the given date.`,"|Input |Output|\r\n|-----------------------------------------|------|\r\n|`week_of_year(datetime(2020-12-31))` |`53` |\r\n|`week_of_year(datetime(2020-06-15))` |`25` |\r\n|`week_of_year(datetime(1970-01-01))` |`1` |\r\n|`week_of_year(datetime(2000-01-01))` |`52` |\r\n\r\n> [!NOTE]\r\n> `weekofyear()` is an obsolete variant of this function. `weekofyear()` was not ISO 8601 compliant; the first week of a year was defined as the week with the year's first Wednesday in it.\r\nThe current version of this function, `week_of_year()`, is ISO 8601 compliant; the first week of a year is defined as the week with the year's first Thursday in it.","https://docs.microsoft.com/azure/data-explorer/kusto/query/weekofyearfunction","weekofyearfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"welch_test","Computes the p_value of the [Welch-test function](https://en.wikipedia.org/wiki/Welch%27s_t-test)",`## Syntax\r \r \`welch_test(\`*mean1*\`,\` *variance1*\`,\` *count1*\`,\` *mean2*\`,\` *variance2*\`,\` *count2*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *mean1* | real or long | ✓ | The mean (average) value of the first series.|\r | *variance1* | real or long | ✓ | The variance value of the first series.|\r | *count1* | real or long | ✓ | The count of values in the first series.|\r | *mean2* | real or long | ✓ | The mean (average) value of the second series.|\r | *variance2* | real or long | ✓ | The variance value of the second series.|\r | *count2* | real or long | ✓ | The count of values in the second series.|\r \r ## Returns\r \r From [Wikipedia](https://en.wikipedia.org/wiki/Welch%27s_t-test):\r \r In statistics, Welch's t-test is a two-sample location test that's used to test the hypothesis that two populations have equal means.\r Welch's t-test is an adaptation of Student's t-test, and is more reliable when the two samples have unequal variances and unequal sample sizes. These tests are often referred to as "unpaired" or "independent samples" t-tests.\r The tests are typically applied when the statistical units underlying the two samples being compared are non-overlapping.\r Welch's t-test is less popular than Student's t-test, and may be less familiar to readers. The test is also called "Welch's unequal variances t-test", or "unequal variances t-test".`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA2WP3UrEMBCF7xf2HXKZQgydsT/uRV7DGxGJadRCk5ZtGnfFhzeTqBTNxWE4fOfMZDmPPhwPLL0VmGLD1Ws3Gv6AvWwFQ5C1YHAixVvZpbnPTi9PSTtSrCVkkmYkJpGQU91vFmSftXmsxPc6/LMOcrzOhXe5pNkpHdNmvzBNnmuJu9WloZzUZiatOx4+mYs39rJoP9Anw8zCdbHzCx/m7XmylaBb/rmUWzfn9Hn8sMyB0vGVr5DoCComV3tji2FAmXnzgafZYQGRQNyBZBj8AandXoJNJy33etqsereTeXsKdg3cgYggDAiHIqIwWH0B4CiCU6cBAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r // s1, s2 values are from https://en.wikipedia.org/wiki/Welch%27s_t-test\r print\r s1 = dynamic([27.5, 21.0, 19.0, 23.6, 17.0, 17.9, 16.9, 20.1, 21.9, 22.6, 23.1, 19.6, 19.0, 21.7, 21.4]),\r s2 = dynamic([27.1, 22.0, 20.8, 23.4, 23.4, 23.5, 25.8, 22.0, 24.8, 20.2, 21.9, 22.1, 22.9, 20.5, 24.4])\r | mv-expand s1 to typeof(double), s2 to typeof(double)\r | summarize m1=avg(s1), v1=variance(s1), c1=count(), m2=avg(s2), v2=variance(s2), c2=count()\r | extend pValue=welch_test(m1,v1,c1,m2,v2,c2)\r // pValue = 0.021\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/welch-testfunction","welch-testfunction.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.OperatorToken,"where","Filters a table to the subset of rows that satisfy a predicate.",`> The \`where\` and \`filter\` operators are equivalent\r \r ## Syntax\r \r *T* \`| where\` *Predicate*\r \r ## Parameters\r \r | Name | Type | Required | Description |\r | -- | -- | -- | -- |\r | *T* | string | ✓ | Tabular input whose records are to be filtered. |\r | *Predicate* | string | ✓ | Expression that evaluates to a bool for each row in *T*.\r \r ## Returns\r \r Rows in *T* for which *Predicate* is \`true\`.\r \r > [!NOTE]\r > All filtering functions return false when compared with null values. Use special null-aware functions to write queries that handle null values.\r >\r > * [isnull()](./isnullfunction.md)\r > * [isnotnull()](./isnotnullfunction.md)\r > * [isempty()](./isemptyfunction.md)\r > * [isnotempty()](./isnotemptyfunction.md)\r \r ## Performance tips\r \r * **Use simple comparisons** between column names and constants. ('Constant' means constant over the table - so \`now()\` and \`ago()\` are OK, and so are scalar values assigned using a [\`let\` statement](./letstatement.md).)\r For example, prefer \`where Timestamp >= ago(1d)\` to \`where bin(Timestamp, 1d) == ago(1d)\`.\r * **Simplest terms first**: If you have multiple clauses conjoined with \`and\`, put first the clauses that involve just one column. So \`Timestamp > ago(1d) and OpId == EventId\` is better than the other way around.\r \r For more information, see the summary of [available String operators](./datatypes-string-operators.md) and the summary of [available Numerical operators](./numoperators.md).`,`### Order comparisons by complexity\r \r The following query returns storm records that report damaged property, are floods, and start and end in different places.\r \r Notice that we put the comparison between two columns last, as the where operator can't use the index and forces a scan.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5qpRKCjKz0pNLlFwScxNTE8NKMovSC0qqdRRACsIqSxI1VFwSk3PzPPJT04syczPA8rkpcA4QP3lGalFqWi6FewUDLgUgCAxLwVhkIKtrYKSW05+fooSXBLFaAVFW2TDAe7+E2GoAAAA" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | project DamageProperty, EventType, BeginLocation, EndLocation\r | where DamageProperty > 0\r and EventType == "Flood"\r and BeginLocation != EndLocation \r \`\`\`\r \r The following table only shows the top 10 results. To see the full output, run the query.\r \r |DamageProperty|EventType|BeginLocation|EndLocation|\r |--|--|--|--|\r |5000 |Flood|FAYETTE CITY LOWBER|\r |5000 |Flood|MORRISVILLE WEST WAYNESBURG|\r |10000|Flood|COPELAND HARRIS GROVE|\r |5000 |Flood|GLENFORD MT PERRY|\r |25000|Flood|EAST SENECA BUFFALO AIRPARK ARPT|\r |20000|Flood|EBENEZER SLOAN|\r |10000|Flood|BUEL CALHOUN|\r |10000|Flood|GOODHOPE WEST MILFORD|\r |5000 |Flood|DUNKIRK FOREST|\r |20000|Flood|FARMINGTON MANNINGTON|\r \r ### Check if column contains string\r \r The following query returns the rows in which the word "cow" appears in any column.\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAwsuyS/KdS1LzSsp5uWqUSjPSC1KVdBSyEgsVlBKzi9XAgC3DyzDIAAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r StormEvents\r | where * has "cow"\r \`\`\``,"https://docs.microsoft.com/azure/data-explorer/kusto/query/whereoperator","whereoperator.md")),this.AddTopic(new Kusto.Data.IntelliSense.CslTopicDocumentation(Kusto.Data.IntelliSense.CslCommandToken.Kind.FunctionNameToken,"zip","The `zip` function accepts any number of `dynamic` arrays, and returns an\r\narray whose elements are each an array holding the elements of the input\r\narrays of the same index.",`## Syntax\r \r \`zip(\`*arrays*\`)\`\r \r ## Parameters\r \r | Name | Type | Required | Description |\r |--|--|--|--|\r | *arrays* | dynamic | ✓ | The dynamic array values to zip. The function accepts between 2-16 arrays.|`,`> [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUajKLNBIqcxLzM1M1og21DHWMY3V1FGAixjpmOiYxWpqAgB4H4QJLQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print zip(dynamic([1,3,5]), dynamic([2,4,6]))\r \`\`\`\r \r **Output** \r \r |print_0|\r |--|\r |\`[[1,2],[3,4],[5,6]]\`|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAAysoyswrUajKLNBIqcxLzM1M1ohWclTSUTAEIj3TWE0dBbh4da2OgpKTUqymJgDjejoyNQAAAA==" target="_blank">Run the query</a>\r \r \`\`\`\r print zip(dynamic(["A", 1, 1.5]), dynamic([{}, "B"]))\r \`\`\`\r \r **Output** \r \r |print_0|\r |--|\r |\`[["A",{}], [1,"B"], [1.5, null]]\`|\r \r > [!div class="nextstepaction"]\r > <a href="https://dataexplorer.azure.com/clusters/help/databases/Samples?query=H4sIAAAAAAAAA0tJLAHCpJxUjUSrzLwSHYUkq+KSosy8dE2FaEMdpfy8VCUdIx2lkvJ8JR1jIJ1RlJqqFMvLVaNQXJqbm1iUWZWqkKhgq5CbmJ0an5NZXKKRqAk0BEUkSROkvqAoPys1uUShKrNAIxGoRBMADfxJ3HsAAAA=" target="_blank">Run the query</a>\r \r \`\`\`\r datatable(a:int, b:string) [1,"one",2,"two",3,"three"]\r | summarize a = make_list(a), b = make_list(b)\r | project zip(a, b)\r \`\`\`\r \r **Output** \r \r |print_0|\r |--|\r |\`[[1,"one"],[2,"two"],[3,"three"]]\`|`,"https://docs.microsoft.com/azure/data-explorer/kusto/query/zipfunction","zipfunction.md")))}}}),Bridge.ns("Kusto.Data.IntelliSense.CslDocumentation",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CslDocumentation,{f1:function(e){return e.value}}),Bridge.define("Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult",{$kind:"nested enum",statics:{fields:{None:0,AppendEntities:1,ReplaceEntities:2}}}),Bridge.define("Kusto.Data.IntelliSense.CslTopicDocumentation",{props:{TokenKind:0,Name:null,ShortDescription:null,LongDescription:null,Examples:null,Url:null,MarkdownSource:null},ctors:{ctor:function(e,t,n,r,s,a,i){a===void 0&&(a=null),i===void 0&&(i=null),this.$initialize(),this.TokenKind=e,this.Name=t,this.ShortDescription=n,this.LongDescription=r,this.Examples=s,this.Url=a,this.MarkdownSource=i}},methods:{GetMarkDownText:function(){var e,t=new System.Text.StringBuilder,n;t.appendFormat(System.String.format("## {0} [web]({1})",this.Name,this.Url)),t.appendLine(),t.appendLine(),e=Bridge.getEnumerator(System.Array.init([this.ShortDescription,this.LongDescription,this.Examples],System.String));try{for(;e.moveNext();)n=e.Current,System.String.isNullOrEmpty(n)||(t.appendLine(n),t.appendLine())}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}return t.toString()},equals:function(e){if(e==null)return!1;var t=Bridge.as(e,Kusto.Data.IntelliSense.CslTopicDocumentation);return t==null?!1:this.TokenKind===t.TokenKind&&Bridge.referenceEquals(this.Name,t.Name)&&Bridge.referenceEquals(this.ShortDescription,t.ShortDescription)&&Bridge.referenceEquals(this.Examples,t.Examples)},getHashCode:function(){var e,t,n,r;return Bridge.getHashCode(this.TokenKind)^Bridge.getHashCode(this.Name)^(e=(t=this.ShortDescription)!=null?Bridge.getHashCode(t):null,e??0)^(n=(r=this.Examples)!=null?Bridge.getHashCode(r):null,n??0)}}}),Bridge.define("Kusto.Data.IntelliSense.DMRuleKind",{$kind:"enum",statics:{fields:{None:0,Start:0,YieldAdminCommandsOptions:0,YieldShowCommandOptions:1,YieldShowClustersKeywordOptions:2,YieldShowClustersSettingsKeywordOptions:3,YieldShowClustersSettingsVersionKeywordOptions:4,YieldShowClustersSettingsWithEncryptedSecretsKeywordOptions:5,YieldShowPrincipalRolesCommandOptions:6,YieldAlterCommandOptions:7,YieldAlterMergeCommandOptions:8,YieldAlterClustersSettingsKeywordOptions:9,YieldCreateCommandOptions:10,YieldDropCommandOptions:11,YieldAddCommandOptions:12,YieldAddOrAlterCommandOptions:13,YieldAddDataObtainerKeyworkOptions:14,YieldAddDataObtainerInitializeKeyworkOptions:15,YieldAddDataObtainerInitializeWithKeyworkOptions:16,YieldGetCommandOptions:17,YieldGetIngestionQueuesCommandOptions:18,YieldGetIngestionQueuesTypeCommandOptions:19,YieldFlushCommandOptions:20,YieldInitializeCommandOptions:21,YieldInitializeClusterConfigCommandOptions:22,YieldInitializeClusterConfigEncryptionCommandOptions:23,YieldResetCommandOptions:24,YieldSetCommandOptions:25,YieldAlterClustersSettingsFromKeywordOptions:26,YieldAlterObtainerQueuesOptions:27,YieldAddOrAlterEventHubIngestionSourceSettingsOptions:28,YieldPurgeShowCommandOptions:29,YieldPurgeShowCommandFromKeywordOptions:30,YieldPurgeShowCommandToKeywordOptions:31,YieldPurgeTableCommandOptions:32,YieldPurgeMaterializedViewTableCommandOptions:33,YieldPurgeTableInDatabaseCommandOptions:34,YieldPurgeTableRecordsInDatabaseCommandOptions:35,YieldPurgeRetryCommandOptions:36,YieldPurgeRetryCommandFromKeywordOptions:37,YieldPurgeRetryCommandToKeywordOptions:38,YieldPurgeCancelCommandOptions:39,YieldPurgeCancelAllCommandsOptions:40,YieldClearCommandOptions:41,YieldClearIngestionQueuesCommandOptions:42,RefreshPolicyCacheCommandOptions:43},ctors:{init:function(){this.None=Kusto.Data.IntelliSense.RuleKind.None,this.Start=Kusto.Data.IntelliSense.RuleKind.Last}}}}),Bridge.define("Kusto.Data.IntelliSense.EntityDataType",{$kind:"enum",statics:{fields:{Empty:0,Object:1,DBNull:2,Boolean:3,Char:4,SByte:5,Byte:6,Int16:7,UInt16:8,Int32:9,UInt32:10,Int64:11,UInt64:12,Single:13,Double:14,Decimal:15,DateTime:16,String:18,Dynamic:19,TimeSpan:20}}}),Bridge.define("Kusto.Data.IntelliSense.EntityDataTypeConverter",{statics:{methods:{FromType:function(e){var t={v:Kusto.Data.IntelliSense.EntityDataType.String};return System.Enum.tryParse(Kusto.Data.IntelliSense.EntityDataType,e,t)||Bridge.referenceEquals(e,"Guid")&&(t.v=Kusto.Data.IntelliSense.EntityDataType.String),t.v}}}}),Bridge.define("Kusto.Data.IntelliSense.ExpressionEntity",{fields:{Operator:null,Name:null,Arguments:null,IsGenerated:!1},ctors:{init:function(){this.IsGenerated=!1}},methods:{FirstArgument:function(){return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,this.Arguments)?System.Linq.Enumerable.from(this.Arguments,System.String).first():""}}}),Bridge.define("Kusto.Data.IntelliSense.ExpressionEntityParser",{statics:{methods:{ParseEntities:function(e){return Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntitiesList(Kusto.Data.IntelliSense.ExpressionEntity,e,Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntityExpression)},ParseEntities$1:function(e,t){return Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntitiesList(Kusto.Data.IntelliSense.ExpressionEntity,e,Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntityExpression,t)},ParseEntitiesList:function(e,t,n,r){var s,a,i,l,o;if(r===void 0&&(r=null),s=new(System.Collections.Generic.List$1(e)).ctor,System.String.isNullOrWhiteSpace(t))return s;var d=0,m=System.String.toCharArray(t,0,t.length),c=0,p={v:0},h=-1;for(a=0;a<m.length;a=a+1|0)if(i=m[System.Array.index(a,m)],d===0){if(c=a,i===61)d=2,h=a+1|0;else if(System.Char.isDigit(i)||System.Char.isLetter(i)||i===42)p.v=0,d=1,h=a;else if(i===91)a=Kusto.Data.IntelliSense.ExpressionEntityParser.IndexOfClosingBracket(m,93,a+1|0),p.v=s.Count,Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,s,c,a,n),p.v=s.Count-p.v|0;else if(i===40)a=Kusto.Data.IntelliSense.ExpressionEntityParser.IndexOfClosingBracket(m,41,a+1|0),p.v=s.Count,Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,s,c,a,n),p.v=s.Count-p.v|0;else if(i===41){Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,s,c,a,n);break}a===(m.length-1|0)&&(a=a-1|0,d===0&&(d=1))}else if(d===1){if(p.v=0,i===61)Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,s,c,a-1|0,n),d=2;else if(i===44)Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,s,c,a-1|0,n),d=0;else if(i===40){if(l=Kusto.Data.IntelliSense.ExpressionEntityParser.IndexOfClosingBracket(m,41,a+1|0),Kusto.Data.IntelliSense.ExpressionEntityParser.GenerateMultipleColumnOutput(e,t,a,h,l,p,s,n,r)){a=l+1|0,d=0;continue}a=l}a===(m.length-1|0)&&Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,s,c,a,n)}else if(d===2){if(i===44)p.v=0,d=0;else if(i===40)o=Kusto.Data.IntelliSense.ExpressionEntityParser.IndexOfClosingBracket(m,41,a+1|0),Kusto.Data.IntelliSense.ExpressionEntityParser.GenerateMultipleColumnOutput(e,t,a,h,o,p,s,n,r),a=o;else if(i===41)break}return s},GenerateMultipleColumnOutput:function(e,t,n,r,s,a,i,l,o){var d=!1,m,c;return Bridge.staticEquals(o,null)||r===-1||(m=new(System.Collections.Generic.List$1(e)).ctor,Kusto.Data.IntelliSense.ExpressionEntityParser.AddEntity(e,t,m,n,s,l),c=t.substr(r,n-r|0).trim(),d=o(c,m,a.v,i),a.v=0,r=-1),d},AddEntity:function(e,t,n,r,s,a){var i=(s-r|0)+1|0,l,o;i<=0||(l=(r+i|0)>=t.length?t.substr(r):t.substr(r,i),l=Kusto.Data.IntelliSense.ExpressionEntityParser.UnescapeEntityName(l),o=a(l),n.AddRange(o))},UnescapeEntityName:function(e){return e=e.trim(),e=Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalancedSquareBrackets(e),Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalancedSingleAndDoubleQuotes(e)},NormalizeEntityName:function(e){var t,n;if(System.String.isNullOrEmpty(e))return"";if(!System.Linq.Enumerable.from(e,System.Char).contains(46)&&!System.Linq.Enumerable.from(e,System.Char).contains(91))return e;var r=new System.Text.StringBuilder,s=System.String.toCharArray(e,0,e.length),a=0;for(t=0;t<s.length;t=t+1|0)switch(n=s[System.Array.index(t,s)],a){case 0:n===46?(r.append("_"),a=1):n===91?(r.append("_"),a=2):r.append(String.fromCharCode(n));break;case 1:n!==91&&r.append(String.fromCharCode(n)),a=2;break;case 2:if(n===39||n===34){var i=t+1|0,l=Kusto.Data.IntelliSense.ExpressionEntityParser.ConsumeTill(s,i,n),o=e.substr(i,l-i|0);o=System.String.replaceAll(o,String.fromCharCode(32),String.fromCharCode(95)),r.append(o),t=l}else n===93?a=0:r.append(String.fromCharCode(n));break}return r.toString()},ConsumeTill:function(e,t,n){for(var r=t;r<e.length;r=r+1|0)if(e[System.Array.index(r,e)]===n)return r;return e.length},ParseEntityExpression:function(e){var t,n=System.String.indexOf(e,String.fromCharCode(61)),r=System.String.indexOf(e,String.fromCharCode(40)),s,a,i,l,o;if(n>0&&(r<0||n<r))return s=Kusto.Data.IntelliSense.ExpressionEntityParser.NormalizeEntityName(e.substr(0,n).trim()),System.Array.init([(t=new Kusto.Data.IntelliSense.ExpressionEntity,t.Name=s,t)],Kusto.Data.IntelliSense.ExpressionEntity);if(r<0)return a=System.String.indexOf(e,String.fromCharCode(41)),a>=0&&(e=e.substr(0,a)),i=Kusto.Data.IntelliSense.ExpressionEntityParser.NormalizeEntityName(e.trim()),System.Array.init([(t=new Kusto.Data.IntelliSense.ExpressionEntity,t.Name=i,t)],Kusto.Data.IntelliSense.ExpressionEntity);if(r===0)return l=Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalancedRoundBrackets(e),o=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntitiesList(System.String,l,u.$.Kusto.Data.IntelliSense.ExpressionEntityParser.f1),System.Linq.Enumerable.from(o,System.String).select(u.$.Kusto.Data.IntelliSense.ExpressionEntityParser.f2);var d=e.substr(0,r).trim(),m=Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalancedRoundBrackets(e.substr(r)),c=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntitiesList(System.String,m,u.$.Kusto.Data.IntelliSense.ExpressionEntityParser.f1),p=(t=new Kusto.Data.IntelliSense.ExpressionEntity,t.Operator=d,t);return System.Linq.Enumerable.from(c,System.String).any()&&(p.Name=Kusto.Cloud.Platform.Utils.ExtendedString.TrimBalancedRoundBrackets(c.getItem(0)),p.Arguments=System.Linq.Enumerable.from(c,System.String).skip(1).ToArray(System.String)),System.Array.init([p],Kusto.Data.IntelliSense.ExpressionEntity)},IndexOfClosingBracket:function(e,t,n){for(var r,s=n;s<e.length;s=s+1|0)if(r=e[System.Array.index(s,e)],r===40)s=Kusto.Data.IntelliSense.ExpressionEntityParser.IndexOfClosingBracket(e,41,s+1|0);else if(r===91)s=Kusto.Data.IntelliSense.ExpressionEntityParser.IndexOfClosingBracket(e,93,s+1|0);else if(r===t)return s;return e.length}}}}),Bridge.ns("Kusto.Data.IntelliSense.ExpressionEntityParser",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.ExpressionEntityParser,{f1:function(e){return System.Array.init([e.trim()],System.String)},f2:function(e){var t;return t=new Kusto.Data.IntelliSense.ExpressionEntity,t.Name=Kusto.Data.IntelliSense.ExpressionEntityParser.NormalizeEntityName(e),t}}),Bridge.define("Kusto.Data.IntelliSense.IKustoIntelliSenseSchemaResolver",{$kind:"interface"}),Bridge.define("Kusto.Data.IntelliSense.IntelliSenseCommandTip",{fields:{m_signature:null},props:{Name:null,Signature:{get:function(){if(System.String.isNullOrEmpty(this.m_signature))if(this.NameSuffix!=null)this.m_signature=(this.Name||"")+(this.NameSuffix||"");else if(this.Parameters!=null&&System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).any()){var e=Bridge.toArray(System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).select(u.$.Kusto.Data.IntelliSense.IntelliSenseCommandTip.f1)).join(", ");this.m_signature=System.String.format("<b>{0}(</b>{1}<b>)</b>",this.Name,e)}else this.m_signature=(this.Name||"")+"()";return this.m_signature}},Summary:null,Usage:null,NameSuffix:null,Parameters:null},methods:{GetSignatureWithBoldParameter:function(e){var t,n,r,s,a,i;return this.Parameters!=null&&System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).any()?System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).count()>e?(s=System.Array.init([System.String.format("<b>{0}</b>",[(t=(n=Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,System.Linq.Enumerable.from(this.Parameters,n).ToArray(n)))[System.Array.index(e,t)].PlainSignature])],System.String),a=Bridge.toArray(System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).take(e).select(u.$.Kusto.Data.IntelliSense.IntelliSenseCommandTip.f2).concat(s).concat(System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).skip(e+1|0).select(u.$.Kusto.Data.IntelliSense.IntelliSenseCommandTip.f2))).join(", "),r=System.String.format('<font color="blue"><b>{0}</font>(</b>{1}<b>)</b>',this.Name,a)):(i=Bridge.toArray(System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).select(u.$.Kusto.Data.IntelliSense.IntelliSenseCommandTip.f2)).join(", "),r=System.String.format('<font color="blue"><b>{0}</font>(</b>{1}<b>)</b>',this.Name,i)):r=this.NameSuffix!=null?(this.Name||"")+(this.NameSuffix||""):(this.Name||"")+"()",r},Clone:function(){var e,t=this.Parameters!=null&&System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).any()?System.Linq.Enumerable.from(this.Parameters,Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter).select(u.$.Kusto.Data.IntelliSense.IntelliSenseCommandTip.f3).ToArray(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter):null;return e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=this.Name,e.NameSuffix=this.NameSuffix,e.Parameters=t,e.Summary=this.Summary,e.Usage=this.Usage,e}}}),Bridge.ns("Kusto.Data.IntelliSense.IntelliSenseCommandTip",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.IntelliSenseCommandTip,{f1:function(e){return e.Singature},f2:function(e){return e.PlainSignature},f3:function(e){return e.Clone()}}),Bridge.define("Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter",{props:{Name:null,Description:null,DataType:null,Optional:!1,IsArgsArray:!1,Singature:{get:function(){return this.IsArgsArray?"...":System.String.format("<b>{0}{1}</b> <i>{2}</i>",this.Optional?"[?] ":"",this.DataType,this.Name)}},PlainSignature:{get:function(){return this.IsArgsArray?"...":System.String.format('{0}<font color="blue">{1}</font> <i>{2}</i>',this.Optional?"[?] ":"",this.DataType,this.Name)}}},methods:{Clone:function(){var e;return e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType=this.DataType,e.Description=this.Description,e.IsArgsArray=this.IsArgsArray,e.Name=this.Name,e.Optional=this.Optional,e}}}),Bridge.define("Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer",{$kind:"nested class",statics:{fields:{Tracer:null},ctors:{init:function(){this.Tracer=new Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.PrivateTracer}}},methods:{TraceVerbose:function(e,t){t===void 0&&(t=[])}}}),Bridge.define("Kusto.Data.IntelliSense.KustoCommandContext",{inherits:function(){return[System.IEquatable$1(Kusto.Data.IntelliSense.KustoCommandContext)]},statics:{fields:{Empty:null},ctors:{init:function(){this.Empty=new Kusto.Data.IntelliSense.KustoCommandContext("")}}},props:{Context:null,Operation:0},alias:["equalsT","System$IEquatable$1$Kusto$Data$IntelliSense$KustoCommandContext$equalsT"],ctors:{ctor:function(e,t){t===void 0&&(t=0),this.$initialize(),this.Context=e,this.Operation=t}},methods:{equalsT:function(e){return e!=null&&System.String.equals(e.Context,this.Context)&&e.Operation===this.Operation},getHashCode:function(){return Bridge.getHashCode(this.Context)^Bridge.getHashCode(this.Operation)},Flatten:function(){return System.Linq.Enumerable.from(System.String.split(this.Context,System.Array.init([44],System.Char).map(function(e){return String.fromCharCode(e)}),null,1),System.String).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.KustoCommandContext.f1)).ToArray(Kusto.Data.IntelliSense.KustoCommandContext)},IsEmpty:function(){return System.String.isNullOrEmpty(this.Context)}}}),Bridge.ns("Kusto.Data.IntelliSense.KustoCommandContext",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.KustoCommandContext,{f1:function(e){return new Kusto.Data.IntelliSense.KustoCommandContext(e.trim(),this.Operation)}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseAccountEntity",{props:{Name:null}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity",{props:{ConnectionString:null,Alias:null,Databases:null,Plugins:null},methods:{Clone:function(){var e,t,n;return e=new Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity,e.ConnectionString=this.ConnectionString,e.Alias=this.Alias,e.Databases=(t=this.Databases)!=null?System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).select(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity.f1).ToArray(Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity):null,e.Plugins=(n=this.Plugins)!=null?System.Linq.Enumerable.from(n,Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity).select(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity.f2).ToArray(Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity):null,e}}}),Bridge.ns("Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity,{f1:function(e){return e.Clone()},f2:function(e){return e.Clone()}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity",{props:{Name:null,TypeCode:0},methods:{Clone:function(){var e;return e=new Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity,e.Name=this.Name,e.TypeCode=this.TypeCode,e}}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity",{props:{Name:null,Alias:null,Tables:null,Functions:null,IsInitialized:!1},methods:{Clone:function(){var e,t,n;return e=new Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,e.Name=this.Name,e.Alias=this.Alias,e.Tables=(t=this.Tables)!=null?System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).select(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity.f1).ToArray(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity):null,e.Functions=(n=this.Functions)!=null?System.Linq.Enumerable.from(n,Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity).select(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity.f2).ToArray(Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity):null,e.IsInitialized=this.IsInitialized,e}}}),Bridge.ns("Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,{f1:function(e){return e.Clone()},f2:function(e){return e.Clone()}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity",{props:{Name:null,CallName:null,Expression:null},methods:{Clone:function(){var e;return e=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,e.Name=this.Name,e.CallName=this.CallName,e.Expression=this.Expression,e}}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity",{props:{Name:null},methods:{Clone:function(){var e;return e=new Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity,e.Name=this.Name,e}}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseQuerySchema",{props:{Cluster:null,Database:null},ctors:{ctor:function(e,t){this.$initialize(),this.Cluster=e,this.Database=t}},methods:{Clone:function(){return new Kusto.Data.IntelliSense.KustoIntelliSenseQuerySchema(this.Cluster!=null?this.Cluster.Clone():null,this.Database!=null?this.Database.Clone():null)}}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseServiceEntity",{props:{Name:null}}),Bridge.define("Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity",{props:{Name:null,IsInvisible:!1,Columns:null},methods:{Clone:function(){var e,t;return e=new Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,e.Name=this.Name,e.Columns=(t=this.Columns)!=null?System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity.f1).ToArray(Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity):null,e.IsInvisible=this.IsInvisible,e}}}),Bridge.ns("Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,{f1:function(e){return e.Clone()}}),Bridge.define("Kusto.Data.IntelliSense.OptionKind",{$kind:"enum",statics:{fields:{None:0,Operator:1,Command:2,Service:3,Policy:4,Database:5,Table:6,DataType:7,Literal:8,Parameter:9,IngestionMapping:10,ExpressionFunction:11,Option:12,OptionKind:13,OptionRender:14,Column:15,ColumnString:16,ColumnNumeric:17,ColumnDateTime:18,ColumnTimespan:19,FunctionLocal:20,FunctionServerSide:21,FunctionAggregation:22,FunctionFilter:23,FunctionScalar:24,ClientDirective:25,MaterializedView:26,Graph:27}}}),Bridge.define("Kusto.Data.IntelliSense.ParseMode",{$kind:"enum",statics:{fields:{CommandTokensOnly:0,TokenizeAllText:1}}}),Bridge.define("Kusto.Data.IntelliSense.RuleKind",{$kind:"enum",statics:{fields:{None:0,YieldColumnNamesForFilter:1,YieldColumnNamesForProject:2,YieldColumnNamesForProjectAway:3,YieldColumnNamesForProjectRename:4,YieldColumnNamesForJoin:5,YieldKindFlavorsForJoin:6,YieldKindFlavorsForReduceBy:7,YieldColumnNamesForOrdering:8,YieldColumnNamesForTwoParamFunctions:9,YieldColumnNamesForThreeParamFunctions:10,YieldColumnNamesForManyParamFunctions:11,YieldColumnNamesAndFunctionsForExtend:12,YieldColumnNamesForMakeSeries:13,YieldTableNames:14,YieldTableNamesForFindIn:15,YieldRenderOptions:16,YieldRenderKindKeywordOption:17,YieldRenderKindOptions:18,YieldOperatorsAfterPipe:19,YieldStringComparisonOptions:20,YieldNumericComparisonOptions:21,YieldDateTimeOperatorsOptions:22,YieldSummarizeOperatorOptions:23,YieldAscendingDescendingOptions:24,YieldNumericScalarOptions:25,YieldByKeywordOptions:26,YieldWithKeywordOptions:27,YieldStarOption:28,YieldParseTypesKeywordOptions:29,YieldColumnNamesForParse:30,YieldColumnNamesForDiffPatternsPluginSplitParameter:31,YieldParseKeywordKindsOptions:32,YieldRangeFromOptions:33,YieldRangeFromToOptions:34,YieldRangeFromToStepOptions:35,YieldQueryParameters:36,YieldEvaluateOperatorOptions:37,YieldPostJoinOptions:38,YieldPostFindInOptions:39,YieldPostFindOptions:40,YieldTopNestedOfKeywordOption:41,YieldTopNestedOthersOption:42,YieldTopNestedKeywordOption:43,YieldTopHittersKeywordOption:44,YieldTimespanOptions:45,YieldDatabaseNamesOptions:46,YieldClusterNamesOptions:47,YieldDatabaseFunctionOption:48,YieldNullsFirstNullsLastOptions:49,YieldTableNamesForRemoteQueryOptions:50,YieldColumnNamesForRender:51,YieldColumnNamesForFilterInFind:52,YieldColumnNamesForProjectInFind:53,YieldEndOrContinueFindInOptions:54,YieldPostFindInListOptions:55,YieldFindProjectSmartOptions:56,YieldMakeSeriesOperatorOptions:57,YieldMakeSeriesOperatorForDefaultOrOn:58,YieldMakeSeriesOperatorForOn:59,YieldMakeSeriesOperatorForRange:60,YieldMakeSeriesOperatorForBy:61,YieldPostSearchOptions:62,YieldPostSearchKindOptions:63,YieldSearchKindOptions:64,YieldInsideSearchOptions:65,YieldClientDirectivesOptions:66,YieldClientDirective_ConnectOptions:67,Last:68}}}),Bridge.define("Kusto.Data.Net.Common.ExtendedKustoDataStreamFormat",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Net.Common.KustoDataStreamFormat.KustoJsonDataStream:return"KustoJsonDataStream";case Kusto.Data.Net.Common.KustoDataStreamFormat.KustoDataStream:return"KustoDataStream";default:break}return System.String.format("[unknown: {0}]",[Bridge.box(e,System.Int32)])},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Net.Common.KustoDataStreamFormat};return Kusto.Data.Net.Common.ExtendedKustoDataStreamFormat.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Net.Common.KustoDataStreamFormat.KustoJsonDataStream:return!0;case Kusto.Data.Net.Common.KustoDataStreamFormat.KustoDataStream:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Net.Common.KustoDataStreamFormat};if(Kusto.Data.Net.Common.ExtendedKustoDataStreamFormat.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"0":case"KustoJsonDataStream":return t.v=Kusto.Data.Net.Common.KustoDataStreamFormat.KustoJsonDataStream,!0;case"1":case"KustoDataStream":return t.v=Kusto.Data.Net.Common.KustoDataStreamFormat.KustoDataStream,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"kustojsondatastream":return t.v=Kusto.Data.Net.Common.KustoDataStreamFormat.KustoJsonDataStream,!0;case"kustodatastream":return t.v=Kusto.Data.Net.Common.KustoDataStreamFormat.KustoDataStream,!0;default:break}if(!r){var s={v:0};if(System.Int32.tryParse(e,s))return t.v=s.v,!0}return t.v=0,!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Net.Common.KustoDataStreamFormat.KustoJsonDataStream:return"JSON representation of the Kusto Data Stream (stable).";case Kusto.Data.Net.Common.KustoDataStreamFormat.KustoDataStream:return"Binary data stream emitted by the Kusto engine. For internal use only (may change with no notice).";default:return null}}}}}),Bridge.define("Kusto.Data.Net.Common.ExtendedRemoteServiceType",{statics:{methods:{FastToString:function(e){switch(e){case Kusto.Data.Net.Common.RemoteServiceType.Admin:return"Admin";case Kusto.Data.Net.Common.RemoteServiceType.Query:return"Query";case Kusto.Data.Net.Common.RemoteServiceType.UIRedirect:return"UIRedirect";case Kusto.Data.Net.Common.RemoteServiceType.DataManagement:return"DataManagement";case Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement:return"ClusterManagement";case Kusto.Data.Net.Common.RemoteServiceType.Bridge:return"Bridge";case Kusto.Data.Net.Common.RemoteServiceType.Ping:return"Ping";case Kusto.Data.Net.Common.RemoteServiceType.CustomType:return"CustomType";case Kusto.Data.Net.Common.RemoteServiceType.StreamIngest:return"StreamIngest";case Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin:return"PassiveLogin";case Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider:return"ArmResourceProvider";case Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata:return"AuthMetadata";case Kusto.Data.Net.Common.RemoteServiceType.Flighting:return"Flighting";case Kusto.Data.Net.Common.RemoteServiceType.HealthSuite:return"HealthSuite";case Kusto.Data.Net.Common.RemoteServiceType.Gaia:return"Gaia";case Kusto.Data.Net.Common.RemoteServiceType.Proxy:return"Proxy";case Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider:return"SaasResourceProvider";case Kusto.Data.Net.Common.RemoteServiceType.Dashboard:return"Dashboard";case Kusto.Data.Net.Common.RemoteServiceType.Assistant:return"Assistant";case Kusto.Data.Net.Common.RemoteServiceType.AllControlCommands:return"AllControlCommands";default:break}var t=Kusto.Data.Net.Common.ExtendedRemoteServiceType.FastGetFlags(e);return Bridge.toArray(t).join("|")},FastIsDefined$1:function(e){var t={v:new Kusto.Data.Net.Common.RemoteServiceType};return Kusto.Data.Net.Common.ExtendedRemoteServiceType.FastTryParse(e,t,!1,!0)},FastIsDefined:function(e){switch(e){case Kusto.Data.Net.Common.RemoteServiceType.Admin:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Query:return!0;case Kusto.Data.Net.Common.RemoteServiceType.UIRedirect:return!0;case Kusto.Data.Net.Common.RemoteServiceType.DataManagement:return!0;case Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Bridge:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Ping:return!0;case Kusto.Data.Net.Common.RemoteServiceType.CustomType:return!0;case Kusto.Data.Net.Common.RemoteServiceType.StreamIngest:return!0;case Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin:return!0;case Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider:return!0;case Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Flighting:return!0;case Kusto.Data.Net.Common.RemoteServiceType.HealthSuite:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Gaia:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Proxy:return!0;case Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Dashboard:return!0;case Kusto.Data.Net.Common.RemoteServiceType.Assistant:return!0;case Kusto.Data.Net.Common.RemoteServiceType.AllControlCommands:return!0;default:return!1}},FastHasFlag$1:function(e,t){return(e&t)===t},FastHasFlag:function(e,t){return(e&t)===t},FastHasAllFlags:function(e,t){return(e&t)===t},FastHasAnyFlags:function(e,t){return(e&t)!=0},FastCountIntersectionsWith:function(e,t){var n=e&t;return Kusto.Cloud.Platform.Utils.BitTwiddling.CountBits(n)},FastParse:function(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r={v:new Kusto.Data.Net.Common.RemoteServiceType};if(Kusto.Data.Net.Common.ExtendedRemoteServiceType.FastTryParse(e,r,t,n))return r.v;throw new System.Exception("Invalid enum value: "+(e||""))},FastTryParse:function(e,t,n,r){var s,a,i,l,o;switch(n===void 0&&(n=!1),r===void 0&&(r=!1),e){case"1":case"Admin":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Admin,!0;case"2":case"Query":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Query,!0;case"4":case"UIRedirect":return t.v=Kusto.Data.Net.Common.RemoteServiceType.UIRedirect,!0;case"8":case"DataManagement":return t.v=Kusto.Data.Net.Common.RemoteServiceType.DataManagement,!0;case"16":case"ClusterManagement":return t.v=Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement,!0;case"32":case"Bridge":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Bridge,!0;case"64":case"Ping":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Ping,!0;case"1024":case"CustomType":return t.v=Kusto.Data.Net.Common.RemoteServiceType.CustomType,!0;case"2048":case"StreamIngest":return t.v=Kusto.Data.Net.Common.RemoteServiceType.StreamIngest,!0;case"4096":case"PassiveLogin":return t.v=Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin,!0;case"8192":case"ArmResourceProvider":return t.v=Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider,!0;case"16384":case"AuthMetadata":return t.v=Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata,!0;case"32768":case"Flighting":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Flighting,!0;case"65536":case"HealthSuite":return t.v=Kusto.Data.Net.Common.RemoteServiceType.HealthSuite,!0;case"131072":case"Gaia":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Gaia,!0;case"262144":case"Proxy":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Proxy,!0;case"524288":case"SaasResourceProvider":return t.v=Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider,!0;case"1048576":case"Dashboard":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Dashboard,!0;case"2097152":case"Assistant":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Assistant,!0;case"Admin | DataManagement | ClusterManagement | Bridge":case"AllControlCommands":return t.v=Kusto.Data.Net.Common.RemoteServiceType.AllControlCommands,!0;default:break}if(n&&!System.String.isNullOrEmpty(e))switch(e.toLowerCase()){case"admin":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Admin,!0;case"query":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Query,!0;case"uiredirect":return t.v=Kusto.Data.Net.Common.RemoteServiceType.UIRedirect,!0;case"datamanagement":return t.v=Kusto.Data.Net.Common.RemoteServiceType.DataManagement,!0;case"clustermanagement":return t.v=Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement,!0;case"bridge":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Bridge,!0;case"ping":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Ping,!0;case"customtype":return t.v=Kusto.Data.Net.Common.RemoteServiceType.CustomType,!0;case"streamingest":return t.v=Kusto.Data.Net.Common.RemoteServiceType.StreamIngest,!0;case"passivelogin":return t.v=Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin,!0;case"armresourceprovider":return t.v=Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider,!0;case"authmetadata":return t.v=Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata,!0;case"flighting":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Flighting,!0;case"healthsuite":return t.v=Kusto.Data.Net.Common.RemoteServiceType.HealthSuite,!0;case"gaia":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Gaia,!0;case"proxy":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Proxy,!0;case"saasresourceprovider":return t.v=Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider,!0;case"dashboard":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Dashboard,!0;case"assistant":return t.v=Kusto.Data.Net.Common.RemoteServiceType.Assistant,!0;case"allcontrolcommands":return t.v=Kusto.Data.Net.Common.RemoteServiceType.AllControlCommands,!0;default:break}if(!r&&(a={v:0},System.Int32.tryParse(e,a)))return t.v=a.v,!0;if(t.v=0,!System.String.isNullOrEmpty(e)&&System.String.contains(e,"|")){i=System.String.split(e,System.Array.init([124],System.Char).map(function(d){return String.fromCharCode(d)}),null,1),s=Bridge.getEnumerator(i);try{for(;s.moveNext();)if(l=s.Current,o={v:new Kusto.Data.Net.Common.RemoteServiceType},Kusto.Data.Net.Common.ExtendedRemoteServiceType.FastTryParse(l,o,n,r))t.v|=o.v;else return t.v=0,!1}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}return!0}return!1},FastGetHashCode:function(e){return e},FastGetDescription:function(e){switch(e){case Kusto.Data.Net.Common.RemoteServiceType.Admin:return"Controls Kusto Engine.";case Kusto.Data.Net.Common.RemoteServiceType.Query:return"Queries Kusto Engine.";case Kusto.Data.Net.Common.RemoteServiceType.UIRedirect:return"Redirects to Kusto.Explorer or similar client.";case Kusto.Data.Net.Common.RemoteServiceType.DataManagement:return"Controls Kusto DM.";case Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement:return"Controls Kusto CM.";case Kusto.Data.Net.Common.RemoteServiceType.Bridge:return"Controls Kusto Bridge to Geneva/Aria pipelines.";case Kusto.Data.Net.Common.RemoteServiceType.Ping:return"Load-balancer ping responder.";case Kusto.Data.Net.Common.RemoteServiceType.CustomType:return"Custom.";case Kusto.Data.Net.Common.RemoteServiceType.StreamIngest:return"Streaming ingestion into Kusto Engine.";case Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin:return"Manages passive authentication flows.";case Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider:return"Controls Kusto RP.";case Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata:return"Authentication metadata information.";case Kusto.Data.Net.Common.RemoteServiceType.Flighting:return"Controls Kusto Flighting.";case Kusto.Data.Net.Common.RemoteServiceType.HealthSuite:return"Controls Kusto HealthSuite.";case Kusto.Data.Net.Common.RemoteServiceType.Gaia:return"Controls Kusto Gaia.";case Kusto.Data.Net.Common.RemoteServiceType.Proxy:return"Proxy to other services/endpoints.";case Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider:return"Controls Kusto SaaS Resource Provider.";case Kusto.Data.Net.Common.RemoteServiceType.Dashboard:return"Controls Kusto Dashboard.";case Kusto.Data.Net.Common.RemoteServiceType.Assistant:return"Kusto assistant for generative AI capabilities";case Kusto.Data.Net.Common.RemoteServiceType.AllControlCommands:return"A bitwise OR of all service types that provide control commands.";default:return null}},FastGetFlags:function(e){return new(Bridge.GeneratorEnumerable$1(Kusto.Data.Net.Common.RemoteServiceType))(Bridge.fn.bind(this,function(t){var n=0,r,s,a,i=new(Bridge.GeneratorEnumerator$1(Kusto.Data.Net.Common.RemoteServiceType))(Bridge.fn.bind(this,function(){try{for(;;)switch(n){case 0:if((t&Kusto.Data.Net.Common.RemoteServiceType.Admin)===Kusto.Data.Net.Common.RemoteServiceType.Admin){n=1;continue}n=3;continue;case 1:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Admin,n=2,!0;case 2:n=3;continue;case 3:if((t&Kusto.Data.Net.Common.RemoteServiceType.Query)===Kusto.Data.Net.Common.RemoteServiceType.Query){n=4;continue}n=6;continue;case 4:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Query,n=5,!0;case 5:n=6;continue;case 6:if((t&Kusto.Data.Net.Common.RemoteServiceType.UIRedirect)===Kusto.Data.Net.Common.RemoteServiceType.UIRedirect){n=7;continue}n=9;continue;case 7:return i.current=Kusto.Data.Net.Common.RemoteServiceType.UIRedirect,n=8,!0;case 8:n=9;continue;case 9:if((t&Kusto.Data.Net.Common.RemoteServiceType.DataManagement)===Kusto.Data.Net.Common.RemoteServiceType.DataManagement){n=10;continue}n=12;continue;case 10:return i.current=Kusto.Data.Net.Common.RemoteServiceType.DataManagement,n=11,!0;case 11:n=12;continue;case 12:if((t&Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement)===Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement){n=13;continue}n=15;continue;case 13:return i.current=Kusto.Data.Net.Common.RemoteServiceType.ClusterManagement,n=14,!0;case 14:n=15;continue;case 15:if((t&Kusto.Data.Net.Common.RemoteServiceType.Bridge)===Kusto.Data.Net.Common.RemoteServiceType.Bridge){n=16;continue}n=18;continue;case 16:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Bridge,n=17,!0;case 17:n=18;continue;case 18:if((t&Kusto.Data.Net.Common.RemoteServiceType.Ping)===Kusto.Data.Net.Common.RemoteServiceType.Ping){n=19;continue}n=21;continue;case 19:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Ping,n=20,!0;case 20:n=21;continue;case 21:if((t&Kusto.Data.Net.Common.RemoteServiceType.CustomType)===Kusto.Data.Net.Common.RemoteServiceType.CustomType){n=22;continue}n=24;continue;case 22:return i.current=Kusto.Data.Net.Common.RemoteServiceType.CustomType,n=23,!0;case 23:n=24;continue;case 24:if((t&Kusto.Data.Net.Common.RemoteServiceType.StreamIngest)===Kusto.Data.Net.Common.RemoteServiceType.StreamIngest){n=25;continue}n=27;continue;case 25:return i.current=Kusto.Data.Net.Common.RemoteServiceType.StreamIngest,n=26,!0;case 26:n=27;continue;case 27:if((t&Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin)===Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin){n=28;continue}n=30;continue;case 28:return i.current=Kusto.Data.Net.Common.RemoteServiceType.PassiveLogin,n=29,!0;case 29:n=30;continue;case 30:if((t&Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider)===Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider){n=31;continue}n=33;continue;case 31:return i.current=Kusto.Data.Net.Common.RemoteServiceType.ArmResourceProvider,n=32,!0;case 32:n=33;continue;case 33:if((t&Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata)===Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata){n=34;continue}n=36;continue;case 34:return i.current=Kusto.Data.Net.Common.RemoteServiceType.AuthMetadata,n=35,!0;case 35:n=36;continue;case 36:if((t&Kusto.Data.Net.Common.RemoteServiceType.Flighting)===Kusto.Data.Net.Common.RemoteServiceType.Flighting){n=37;continue}n=39;continue;case 37:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Flighting,n=38,!0;case 38:n=39;continue;case 39:if((t&Kusto.Data.Net.Common.RemoteServiceType.HealthSuite)===Kusto.Data.Net.Common.RemoteServiceType.HealthSuite){n=40;continue}n=42;continue;case 40:return i.current=Kusto.Data.Net.Common.RemoteServiceType.HealthSuite,n=41,!0;case 41:n=42;continue;case 42:if((t&Kusto.Data.Net.Common.RemoteServiceType.Gaia)===Kusto.Data.Net.Common.RemoteServiceType.Gaia){n=43;continue}n=45;continue;case 43:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Gaia,n=44,!0;case 44:n=45;continue;case 45:if((t&Kusto.Data.Net.Common.RemoteServiceType.Proxy)===Kusto.Data.Net.Common.RemoteServiceType.Proxy){n=46;continue}n=48;continue;case 46:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Proxy,n=47,!0;case 47:n=48;continue;case 48:if((t&Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider)===Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider){n=49;continue}n=51;continue;case 49:return i.current=Kusto.Data.Net.Common.RemoteServiceType.SaasResourceProvider,n=50,!0;case 50:n=51;continue;case 51:if((t&Kusto.Data.Net.Common.RemoteServiceType.Dashboard)===Kusto.Data.Net.Common.RemoteServiceType.Dashboard){n=52;continue}n=54;continue;case 52:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Dashboard,n=53,!0;case 53:n=54;continue;case 54:if((t&Kusto.Data.Net.Common.RemoteServiceType.Assistant)===Kusto.Data.Net.Common.RemoteServiceType.Assistant){n=55;continue}n=57;continue;case 55:return i.current=Kusto.Data.Net.Common.RemoteServiceType.Assistant,n=56,!0;case 56:n=57;continue;case 57:default:return!1}}catch(l){throw a=System.Exception.create(l),a}}));return i},arguments))}}}}),Bridge.define("Kusto.Data.Net.Common.KustoDataStreamFormat",{$kind:"enum",statics:{fields:{KustoJsonDataStream:0,KustoDataStream:1}}}),Bridge.define("Kusto.Data.Net.Common.RemoteServiceType",{$kind:"enum",statics:{fields:{Admin:1,Query:2,UIRedirect:4,DataManagement:8,ClusterManagement:16,Bridge:32,Ping:64,CustomType:1024,StreamIngest:2048,PassiveLogin:4096,ArmResourceProvider:8192,AuthMetadata:16384,Flighting:32768,HealthSuite:65536,Gaia:131072,Proxy:262144,SaasResourceProvider:524288,Dashboard:1048576,Assistant:2097152,AllControlCommands:57}},$flags:!0}),Bridge.define("Kusto.Data.Utils.AxisVisualizationMode",{$kind:"enum",statics:{fields:{Linear:0,Log:1}}}),Bridge.define("Kusto.Data.Utils.ChartVisualizationOptions",{statics:{fields:{Default:null},ctors:{init:function(){this.Default=new Kusto.Data.Utils.ChartVisualizationOptions}},methods:{ResolveVisualizationKindFromDirection:function(e){switch(e){case"piechart":return Kusto.Data.Utils.VisualizationKind.PieChart;case"barchart":return Kusto.Data.Utils.VisualizationKind.BarChart;case"card":return Kusto.Data.Utils.VisualizationKind.Card;case"columnchart":return Kusto.Data.Utils.VisualizationKind.ColumnChart;case"scatterchart":return Kusto.Data.Utils.VisualizationKind.ScatterChart;case"areachart":return Kusto.Data.Utils.VisualizationKind.AreaChart;case"stackedareachart":return Kusto.Data.Utils.VisualizationKind.StackedAreaChart;case"ladderchart":return Kusto.Data.Utils.VisualizationKind.TimeLadderChart;case"timechart":return Kusto.Data.Utils.VisualizationKind.TimeLineChart;case"linechart":return Kusto.Data.Utils.VisualizationKind.LineChart;case"anomalychart":return Kusto.Data.Utils.VisualizationKind.TimeLineWithAnomalyChart;case"pivotchart":return Kusto.Data.Utils.VisualizationKind.PivotChart;case"timeline":case"timepivot":return Kusto.Data.Utils.VisualizationKind.TimePivot;case"3Dchart":return Kusto.Data.Utils.VisualizationKind.ThreeDChart;case"treemap":return Kusto.Data.Utils.VisualizationKind.TreeMap;case"plotly":return Kusto.Data.Utils.VisualizationKind.Plotly;default:return Kusto.Data.Utils.VisualizationKind.None}},ResolveModeFromString:function(e,t){if(t===Kusto.Data.Utils.VisualizationKind.StackedAreaChart)return Kusto.Data.Utils.VisualizationMode.Stacked;switch(e){case"default":return Kusto.Data.Utils.VisualizationMode.Default;case"stacked":return Kusto.Data.Utils.VisualizationMode.Stacked;case"stacked100":return Kusto.Data.Utils.VisualizationMode.Stacked100;case"unstacked":return Kusto.Data.Utils.VisualizationMode.Unstacked;case"map":return Kusto.Data.Utils.VisualizationMode.Map;default:return Kusto.Data.Utils.VisualizationMode.Default}},ResolveYSplitFromString:function(e){switch(e){case"axes":return Kusto.Data.Utils.SplitVisualizationMode.Axes;case"panels":return Kusto.Data.Utils.SplitVisualizationMode.Panels;case"none":return Kusto.Data.Utils.SplitVisualizationMode.None;default:return Kusto.Data.Utils.SplitVisualizationMode.None}},ResolveLegendModeFromString:function(e){switch(e){case"hidden":return Kusto.Data.Utils.LegendVisualizationMode.Hidden;case"visible":return Kusto.Data.Utils.LegendVisualizationMode.Visible;default:return Kusto.Data.Utils.LegendVisualizationMode.Visible}},ResolveAxisModeFromString:function(e){switch(e){case"log":return Kusto.Data.Utils.AxisVisualizationMode.Log;case"linear":return Kusto.Data.Utils.AxisVisualizationMode.Linear;default:return Kusto.Data.Utils.AxisVisualizationMode.Linear}}}},fields:{m_visualizationDirection:null,m_mode:null,m_ysplit:null,m_legend:null,m_xaxis:null,m_yaxis:null},props:{VisualizationKindString:{get:function(){return this.m_visualizationDirection},set:function(e){this.m_visualizationDirection=e,this.Visualization=Kusto.Data.Utils.ChartVisualizationOptions.ResolveVisualizationKindFromDirection(this.m_visualizationDirection)}},KindString:{get:function(){return this.m_mode},set:function(e){this.m_mode=e,this.Mode=Kusto.Data.Utils.ChartVisualizationOptions.ResolveModeFromString(this.m_mode,this.Visualization)}},YSplitString:{get:function(){return this.m_ysplit},set:function(e){this.m_ysplit=e,this.YSplit=Kusto.Data.Utils.ChartVisualizationOptions.ResolveYSplitFromString(this.m_ysplit)}},LegendString:{get:function(){return this.m_legend},set:function(e){this.m_legend=e,this.Legend=Kusto.Data.Utils.ChartVisualizationOptions.ResolveLegendModeFromString(this.m_legend)}},XAxisString:{get:function(){return this.m_xaxis},set:function(e){this.m_xaxis=e,this.XAxis=Kusto.Data.Utils.ChartVisualizationOptions.ResolveAxisModeFromString(this.m_xaxis)}},YAxisString:{get:function(){return this.m_yaxis},set:function(e){this.m_yaxis=e,this.YAxis=Kusto.Data.Utils.ChartVisualizationOptions.ResolveAxisModeFromString(this.m_yaxis)}},Title:null,XColumn:null,Series:null,YColumns:null,AnomalyColumns:null,XTitle:null,YTitle:null,Accumulate:!1,IsQuerySorted:!1,Ymin:0,Ymax:0,Xmin:null,Xmax:null,Mode:0,Visualization:0,XAxis:0,YAxis:0,YSplit:0,Legend:0,TableIndex:0},ctors:{init:function(){this.Ymin=Number.NaN,this.Ymax=Number.NaN},ctor:function(e){e===void 0&&(e=-1),this.$initialize(),this.TableIndex=e}}}),Bridge.define("Kusto.Data.Utils.LegendVisualizationMode",{$kind:"enum",statics:{fields:{Visible:0,Hidden:1}}}),Bridge.define("Kusto.Data.Utils.SplitVisualizationMode",{$kind:"enum",statics:{fields:{None:0,Axes:1,Panels:2}}}),Bridge.define("Kusto.Data.Utils.VisualizationKind",{$kind:"enum",statics:{fields:{None:0,PieChart:1,BarChart:2,Card:3,ColumnChart:4,TimeLineChart:5,TimeLineWithAnomalyChart:6,LineChart:7,TimeLadderChart:8,PivotChart:9,Plotly:10,ScatterChart:11,AreaChart:12,StackedAreaChart:13,TimePivot:14,ThreeDChart:15,TreeMap:16,GraphChart:17}}}),Bridge.define("Kusto.Data.Utils.VisualizationMode",{$kind:"enum",statics:{fields:{Default:0,Unstacked:1,Stacked:2,Stacked100:3,Map:4}}}),Bridge.define("Kusto.JavaScript.Client.App",{statics:{methods:{Test:function(){var e,t;Kusto.UT.IntelliSenseRulesTests.InitializeTestClass(),e=new Kusto.UT.IntelliSenseRulesTests,e.IntelliSenseCommandEntitiesTest(),e.IntelliSenseCommandEntitiesForTablesTest(),e.IntelliSenseCommandEntitiesUsingFunctionsTest(),e.IntelliSenseCommandEntities_FindTest(),e.IntelliSenseCommandEntities_SearchTest(),e.IntelliSenseExtendTest(),e.IntelliSenseFilterTest(),e.IntelliSenseGetCommandContextTest(),e.IntelliSenseJoinTest(),e.IntelliSenseLimitTest(),e.IntelliSenseParseOperator(),e.IntelliSenseProjectAwayTest(),e.IntelliSenseProjectRenameTest(),e.IntelliSenseProjectTest(),e.IntelliSenseQueryParametersTest(),e.IntelliSenseRangeTest(),e.IntelliSenseReduceTest(),e.IntelliSenseRenderTest(),e.IntelliSenseSummarizeTest(),e.IntelliSenseTopTest(),e.IntelliSenseTopNestedTest(),e.IntelliSenseToScalarTest(),e.IntelliSenseTimeKeywordsTest(),e.IntelliSenseEvaluateTest(),e.IntelliSenseClusterTest(),e.IntelliSenseDatabaseTest(),e.IntelliSenseFindTest(),e.IntelliSenseSearchTest(),e.IntelliSenseSampleTest(),e.IntelliSenseSampleDistinctTest(),e.IntelliSenseMakeSeriesTest(),t=new Kusto.UT.IntelliSenseCslCommandParserTests,Kusto.UT.IntelliSenseCslCommandParserTests.InitializeTestClass(),t.TestCslCommandParserEntities(),Bridge.global.alert("Success")}}}}),Bridge.define("Kusto.UT.AssertStub",{methods:{AreEqual:function(e,t){var n,r;if(!Bridge.referenceEquals(e,t))throw new System.Exception(System.String.format("Values do not match: expected='{0}', actual='{1}'",(n=e,n??"null"),(r=t,r??"null")))},AreEqual$1:function(e,t,n){var r,s;if(!Bridge.referenceEquals(e,t))throw new System.Exception(System.String.format(`Values do not match: expected='{0}', actual='{1}' {2}`,(r=e,r??"null"),(s=t,s??"null"),n))},Fail:function(e){throw new System.Exception(e)},IsTrue:function(e,t){if(!e)throw new System.Exception(t)}}}),Bridge.define("Kusto.UT.IntelliSenseCslCommandParserTests",{statics:{fields:{s_intelliSenseProvider:null},methods:{InitializeTestClass:function(){var e=new(System.Collections.Generic.List$1(System.String)).ctor,t=new(System.Collections.Generic.List$1(System.String)).ctor,n=Kusto.UT.IntelliSenseRulesTests.GenerateKustoEntities(e,t),r=new Kusto.Data.IntelliSense.KustoIntelliSenseQuerySchema(n,System.Linq.Enumerable.from(n.Databases,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).first());Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider=new Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.$ctor1(n,r,e,t,void 0,!0,!0)}}},fields:{Assert:null},ctors:{init:function(){this.Assert=new Kusto.UT.AssertStub}},methods:{TestClsCommandsPerttifier:function(){var e,t=System.Array.init([{Item1:`let ErrorCounts = (message:string) {\r ErrorCountsByBin(message, 1d)\r };\r ErrorCounts("Can not perform requested operation on nested resource. Parent resource") | extend error = "parent not found"`,Item2:`let ErrorCounts = (message:string)\r {\r ErrorCountsByBin(message, 1d)\r };\r ErrorCounts("Can not perform requested operation on nested resource. Parent resource")\r | extend error = "parent not found"`},{Item1:`Table\r //| project ProjectKind, UserId, ProjectType\r //| join (activeTable) on UserId\r //| summarize dcount(UserId) by ProjectType\r //| sort by dcount_UserId asc\r | count`,Item2:`Table\r //| project ProjectKind, UserId, ProjectType\r //| join (activeTable) on UserId\r //| summarize dcount(UserId) by ProjectType\r //| sort by dcount_UserId asc\r | count`},{Item1:`Table\r | join (Table) on Key`,Item2:`Table\r | join\r (\r Table\r )\r on Key`},{Item1:'PerRequestTable | where MSODS contains "}" | take 1',Item2:`PerRequestTable\r | where MSODS contains "}"\r | take 1`},{Item1:"let variable=1;Table | count",Item2:`let variable=1;\r Table\r | count`},{Item1:`// comment\r KustoLogs | where Timestamp > ago(1d) and EventText contains "[0]Kusto.DataNode.Exceptions.SemanticErrorException: Semantic error: Query 'Temp_MonRgLoad | project TIMESTAMP | consume' has the following semantic error: " | summarize cnt() by Source`,Item2:`// comment\r KustoLogs\r | where Timestamp > ago(1d) and EventText contains "[0]Kusto.DataNode.Exceptions.SemanticErrorException: Semantic error: Query 'Temp_MonRgLoad | project TIMESTAMP | consume' has the following semantic error: "\r | summarize cnt() by Source`},{Item1:"Table | join (Table | project x ) on x | count",Item2:`Table\r | join\r (\r Table\r | project x\r )\r on x\r | count`},{Item1:"Table | join kind=inner (Table | project x ) on x | count",Item2:`Table\r | join kind=inner\r (\r Table\r | project x\r )\r on x\r | count`},{Item1:"let foo = (i: long) { range x from 1 to 1 step 1 }; foo()",Item2:`let foo = (i: long)\r {\r range x from 1 to 1 step 1\r };\r foo()`},{Item1:"let foo = (i: long) {range x from 1 to 1 step 1 | count }; foo()",Item2:`let foo = (i: long)\r {\r range x from 1 to 1 step 1\r | count\r };\r foo()`},{Item1:`.alter function with (docstring = @'List of UserIds that are WebSites only', folder =@'Filters') UsersWithWebSiteAppsOnly() { DimAppUsage() | join kind=leftouter DimApplications() on ApplicationId | where RequestSource in ("unknown", "ibiza","ibizaaiextensionauto") | summarize by UserId = UserId }`,Item2:`.alter function with (docstring = @'List of UserIds that are WebSites only', folder =@'Filters') UsersWithWebSiteAppsOnly()\r {\r DimAppUsage()\r | join kind=leftouter\r DimApplications()\r on ApplicationId\r | where RequestSource in ("unknown", "ibiza","ibizaaiextensionauto")\r | summarize by UserId = UserId\r }`},{Item1:`.alter function with (docstring = @'List of UserIds that are WebSites only', folder =@'Filters') UsersWithWebSiteAppsOnly()\r {\r DimAppUsage()\r | join kind=leftouter DimApplications() on ApplicationId\r | where RequestSource in ("unknown", "ibiza","ibizaaiextensionauto")\r | summarize by UserId = UserId\r }`,Item2:`.alter function with (docstring = @'List of UserIds that are WebSites only', folder =@'Filters') UsersWithWebSiteAppsOnly()\r {\r DimAppUsage()\r | join kind=leftouter\r DimApplications()\r on ApplicationId\r | where RequestSource in ("unknown", "ibiza","ibizaaiextensionauto")\r | summarize by UserId = UserId\r }`},{Item1:"KustoLogs | where Timestamp > ago(6d) | where ClientActivityId=='KE.RunQuery;e0944367-3fd6-4f83-b2e9-ff0724d55053'",Item2:`KustoLogs\r | where Timestamp > ago(6d)\r | where ClientActivityId=='KE.RunQuery;e0944367-3fd6-4f83-b2e9-ff0724d55053'`},{Item1:"KustoLogs | make-series dusers=dcount(RequestSource) default=0 on Timestamp in range(ago(6d), now(), 1d) by userid | where stat(dusers).max>1000",Item2:`KustoLogs\r | make-series dusers=dcount(RequestSource) default=0 on Timestamp in range(ago(6d), now(), 1d) by userid\r | where stat(dusers).max>1000`},{Item1:`let a = 1;//comment\r print x = a * b * c//one more comment`,Item2:`let a = 1;\r //comment\r print x = a * b * c\r //one more comment`},{Item1:`let a = 1;\r //comment\r print x = a * b * c\r //one more comment`,Item2:`let a = 1;\r //comment\r print x = a * b * c\r //one more comment`},{Item1:`Table | join kind = leftouter ( Table | join (Table //comment1\r ) on $left.i == $right.i//comment2\r ) on i`,Item2:`Table\r | join kind = leftouter\r (\r Table\r | join\r (\r Table\r //comment1\r )\r on $left.i == $right.i\r //comment2\r )\r on i`},{Item1:`Table | join kind = leftouter ( Table | join Table //comment1\r on $left.i == $right.i//comment2\r ) on i`,Item2:`Table\r | join kind = leftouter\r (\r Table\r | join\r Table\r //comment1\r on $left.i == $right.i\r //comment2\r )\r on i`},{Item1:`Table| join\r ( Table\r //cmt\r | extend a\r )\r on a`,Item2:`Table\r | join\r (\r Table\r //cmt\r | extend a\r )\r on a`}],System.Tuple$2(System.String,System.String)),n,r,s,a;e=Bridge.getEnumerator(t);try{for(;e.moveNext();)n=e.Current,r=n.Item1,r=System.String.replaceAll(r,` `,""),s=Kusto.Data.Common.CslQueryParser.PrettifyQuery(r,""),a=n.Item2,a=System.String.replaceAll(a,"\r",""),this.Assert.AreEqual(a,s)}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}},TestCslCommandParserEntities:function(){var e=new Kusto.Data.IntelliSense.CslCommandParser;this.ValidateTokens(e,`Table1 \r | parse Field1 with * Column1:string * Column2:int\r | project`,Kusto.Data.IntelliSense.CslCommandToken.Kind.CalculatedColumnToken,System.Array.init(["Column1","Column2"],System.String)),this.ValidateTokens(e,`let s = now();\r Table1 \r | extend x = Field1 \r | project`,Kusto.Data.IntelliSense.CslCommandToken.Kind.TableColumnToken,System.Array.init(["Field1"],System.String)),this.ValidateTokens(e,`Table1 \r | extend x = Field1 \r | project`,Kusto.Data.IntelliSense.CslCommandToken.Kind.TableColumnToken,System.Array.init(["Field1"],System.String))},ValidateTokens:function(e,t,n,r){var s,a=(s=Kusto.Data.IntelliSense.CslCommand,System.Linq.Enumerable.from(e.Parse(Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider,t,Kusto.Data.IntelliSense.ParseMode.TokenizeAllText),s).toList(s)),i=System.Linq.Enumerable.from(a,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f1).where(function(l){return l.TokenKind===n}).select(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f2).toList(System.String);Kusto.UT.IntelliSenseRulesTests.ValidateEntities(t,r,i)},TestCslCommandParserReuse:function(){var e,t=new Kusto.Data.IntelliSense.CslCommandParser,n;e=Bridge.getEnumerator(System.Array.init([`let s = 1;\r let r = range x from s to 1 step 1;\r r | `,"Table1 | where Field1 == 'rrr' "],System.String));try{for(;e.moveNext();)n=e.Current,this.ValidateParserReuse(t,n)}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}},ValidateParserReuse:function(e,t){var n,r=System.Linq.Enumerable.from(e.Parse(Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider,t,Kusto.Data.IntelliSense.ParseMode.TokenizeAllText),Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f1).where(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f3).ToArray(Kusto.Data.IntelliSense.CslCommandToken),s=System.Linq.Enumerable.from(e.Parse(Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider,(t||"")+" ",Kusto.Data.IntelliSense.ParseMode.TokenizeAllText),Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f1).where(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f3).ToArray(Kusto.Data.IntelliSense.CslCommandToken),a,i,l;for(this.ComapreParseResultTokens(r,(n=Kusto.Data.IntelliSense.CslCommandToken,System.Linq.Enumerable.from(s,n).ToArray(n)),0,!1),a=System.Linq.Enumerable.from(e.Parse(Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider,`// comment `+(t||""),Kusto.Data.IntelliSense.ParseMode.TokenizeAllText),Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f1).where(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f3).ToArray(Kusto.Data.IntelliSense.CslCommandToken),this.Assert.AreEqual(Bridge.box(r.length,System.Int32),Bridge.box(a.length-1|0,System.Int32)),i=0;i<r.length;i=i+1|0)i<(r.length-1|0)&&(this.Assert.AreEqual(r[System.Array.index(i,r)].Value,a[System.Array.index(i+1|0,a)].Value),this.Assert.AreEqual(Bridge.box(r[System.Array.index(i,r)].TokenKind,Kusto.Data.IntelliSense.CslCommandToken.Kind,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommandToken.Kind)),Bridge.box(a[System.Array.index(i+1|0,a)].TokenKind,Kusto.Data.IntelliSense.CslCommandToken.Kind,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommandToken.Kind))));l=System.Linq.Enumerable.from(e.Parse(Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider,`// comment `+(t||""),Kusto.Data.IntelliSense.ParseMode.TokenizeAllText),Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f1).where(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f3).ToArray(Kusto.Data.IntelliSense.CslCommandToken),this.ComapreParseResultTokens(a,l,1,!1)},ComapreParseResultTokens:function(e,t,n,r){for(var s=n;s<e.length;s=s+1|0)s<(e.length-1|0)&&(r?this.Assert.AreEqual(e[System.Array.index(s,e)],t[System.Array.index(s,t)]):(this.Assert.AreEqual(e[System.Array.index(s,e)].Value,t[System.Array.index(s,t)].Value),this.Assert.AreEqual(Bridge.box(e[System.Array.index(s,e)].TokenKind,Kusto.Data.IntelliSense.CslCommandToken.Kind,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommandToken.Kind)),Bridge.box(t[System.Array.index(s,t)].TokenKind,Kusto.Data.IntelliSense.CslCommandToken.Kind,System.Enum.toStringFn(Kusto.Data.IntelliSense.CslCommandToken.Kind)))));this.Assert.AreEqual(Bridge.box(e.length,System.Int32),Bridge.box(t.length,System.Int32))},TestCslCommandParserBrackets:function(){var e=new Kusto.Data.IntelliSense.CslCommandParser;this.ValidateBracketTokens(e,"Table1 | extend x = floor(t, 1)",System.Array.init(["(t, 1)"],System.String)),this.ValidateBracketTokens(e,"Table1 | extend x = floor(t, bin(1, 1))",System.Array.init(["(t, bin(1, 1))","(1, 1)"],System.String)),this.ValidateBracketTokens(e,"Table1 | extend x = floor(t[1], bin(1, 1))",System.Array.init(["(t[1], bin(1, 1))","(1, 1)","[1]"],System.String)),this.ValidateBracketTokens(e,"Table1 | extend x = floor(t[floor(100, 100)], bin(1, 1))",System.Array.init(["(t[floor(100, 100)], bin(1, 1))","(1, 1)","[floor(100, 100)]","(100, 100)"],System.String)),this.ValidateBracketTokens(e,"Table1 | extend x = { floor(t[1], bin(1, 1)) }",System.Array.init(["(t[1], bin(1, 1))","(1, 1)","[1]","{ floor(t[1], bin(1, 1)) }"],System.String))},ValidateBracketTokens:function(e,t,n){var r,s=(r=Kusto.Data.IntelliSense.CslCommand,System.Linq.Enumerable.from(e.Parse(Kusto.UT.IntelliSenseCslCommandParserTests.s_intelliSenseProvider,t,Kusto.Data.IntelliSense.ParseMode.TokenizeAllText),r).toList(r)),a=System.Linq.Enumerable.from(s,Kusto.Data.IntelliSense.CslCommand).selectMany(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f4).select(u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f2).toList(System.String);Kusto.UT.IntelliSenseRulesTests.ValidateEntities(t,n,a)},TestCslCommandParserApiKind:function(){var e,t=u.$.Kusto.UT.IntelliSenseCslCommandParserTests.f5(new(System.Collections.Generic.List$1(System.Tuple$2(System.String,Kusto.Data.IntelliSense.ApiKind))).ctor),n;e=Bridge.getEnumerator(t);try{for(;e.moveNext();)n=e.Current,this.Assert.AreEqual(Bridge.box(Kusto.Data.IntelliSense.CslCommandParser.ResolveRequestApiKind(n.Item1),Kusto.Data.IntelliSense.ApiKind,System.Enum.toStringFn(Kusto.Data.IntelliSense.ApiKind)),Bridge.box(n.Item2,Kusto.Data.IntelliSense.ApiKind,System.Enum.toStringFn(Kusto.Data.IntelliSense.ApiKind)))}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}}}}),Bridge.ns("Kusto.UT.IntelliSenseCslCommandParserTests",u.$),Bridge.apply(u.$.Kusto.UT.IntelliSenseCslCommandParserTests,{f1:function(e){return e.Tokens},f2:function(e){return e.Value},f3:function(e){return e.TokenKind!==Kusto.Data.IntelliSense.CslCommandToken.Kind.UnknownToken},f4:function(e){return e.BracketParts},f5:function(e){return e.add({Item1:".show version",Item2:Kusto.Data.IntelliSense.ApiKind.AdminSyncCommand}),e.add({Item1:".ingest async into table",Item2:Kusto.Data.IntelliSense.ApiKind.AdminAsyncCommand}),e.add({Item1:"T",Item2:Kusto.Data.IntelliSense.ApiKind.Query}),e.add({Item1:"T async",Item2:Kusto.Data.IntelliSense.ApiKind.Query}),e.add({Item1:".long-name-command async",Item2:Kusto.Data.IntelliSense.ApiKind.AdminAsyncCommand}),e.add({Item1:".some command async",Item2:Kusto.Data.IntelliSense.ApiKind.AdminSyncCommand}),e.add({Item1:".ingest async into table",Item2:Kusto.Data.IntelliSense.ApiKind.AdminAsyncCommand}),e.add({Item1:`//comment\r .ingest \r async into table`,Item2:Kusto.Data.IntelliSense.ApiKind.AdminAsyncCommand}),e.add({Item1:`//comment\r .ingest \r \r \r async into table`,Item2:Kusto.Data.IntelliSense.ApiKind.AdminAsyncCommand}),e.add({Item1:`//comment async\r .ingest into table`,Item2:Kusto.Data.IntelliSense.ApiKind.AdminSyncCommand}),e}}),Bridge.define("Kusto.UT.IntelliSenseRulesTests",{statics:{fields:{Assert:null,s_intelliSenseProvider:null,s_columnMappings:null},ctors:{init:function(){this.Assert=new Kusto.UT.AssertStub,this.s_columnMappings=new(System.Collections.Generic.Dictionary$2(System.String,System.Array.type(System.String))).ctor}},methods:{ValidateEntities:function(e,t,n){var r,s,a,i;Kusto.UT.IntelliSenseRulesTests.Assert.IsTrue(System.Linq.Enumerable.from(t,System.String).count()===n.Count,System.String.format(`Counts of expected entities ('{0}') and actual command entities ('{1}') do not match. Expected entities: {2} Actual entities: {3} Command: {4}`,Bridge.box(System.Linq.Enumerable.from(t,System.String).count(),System.Int32),Bridge.box(n.Count,System.Int32),t.join(","),Bridge.toArray(n).join(","),e)),r=Bridge.getEnumerator(n);try{for(;r.moveNext();)a=r.Current,System.Linq.Enumerable.from(t,System.String).contains(a)||Kusto.UT.IntelliSenseRulesTests.Assert.Fail(System.String.format("Entity '{0}' is not appearing on the expected list. Command: {1}",a,e))}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}s=Bridge.getEnumerator(t);try{for(;s.moveNext();)i=s.Current,n.contains(i)||Kusto.UT.IntelliSenseRulesTests.Assert.Fail(System.String.format("Entity '{0}' is not appearing on the resolved list. Command: {1}",i,e))}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}},InitializeTestClass:function(){var e=new(System.Collections.Generic.List$1(System.String)).ctor,t=new(System.Collections.Generic.List$1(System.String)).ctor,n=Kusto.UT.IntelliSenseRulesTests.GenerateKustoEntities(e,t),r=new Kusto.Data.IntelliSense.KustoIntelliSenseQuerySchema(n,System.Linq.Enumerable.from(n.Databases,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).first());Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider=new Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.$ctor1(n,r,e,t,new Kusto.UT.IntelliSenseRulesTests.RemoteSchemaResolverMock,!0,!0)},TestIntelliSensePatterns:function(e,t){var n,r,s=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor,a,i,l,o;n=Bridge.getEnumerator(t);try{for(;n.moveNext();)a=n.Current,System.String.startsWith(System.String.trimStart(a.Input),".")||s.add((r=new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.ctor(`let variable = 1; `+(a.Input||"")),r.ExpectedMatch=a.ExpectedMatch,r.ExpectedRuleKind=a.ExpectedRuleKind,r))}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}t.AddRange(s),r=Bridge.getEnumerator(t);try{for(;r.moveNext();){var d=r.Current,m={v:null},c=e.TryMatchAnyRule(d.Input,m);c!==d.ExpectedMatch&&(i=System.String.format("Input '{0}' was incorrectly intelli-sensed. Expected: {1} ({2}), actual: {3} ({4})",d.Input,d.ExpectedMatch?"MATCH":"NO-MATCH",Bridge.box(d.ExpectedRuleKind,System.Int32),c?"MATCH":"NO-MATCH",Bridge.box(m.v!=null?m.v.Kind:0,System.Int32)),Kusto.UT.IntelliSenseRulesTests.Assert.Fail(i)),l=Bridge.toString(d.ExpectedRuleKind),d.ExpectedMatch&&d.ExpectedRuleKind!==m.v.Kind&&(o=System.String.format("Input '{0}' was incorrectly intelli-sensed. Expected rule: {1}, actual rule: {2}",d.Input,l,Bridge.box(m.v.Kind,System.Int32)),Kusto.UT.IntelliSenseRulesTests.Assert.Fail(o))}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}},GetColumnsOfTable:function(e){return Kusto.UT.IntelliSenseRulesTests.s_columnMappings.containsKey(e)?Kusto.UT.IntelliSenseRulesTests.s_columnMappings.getItem(e):null},GenerateKustoEntities:function(e,t){var n,r,s,a,i,l,o,d,m,c,p;t?.add("other"),s=new Kusto.Data.IntelliSense.KustoIntelliSenseClusterEntity,s.Plugins=System.Array.init([(n=new Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity,n.Name="test_plugin",n)],Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity),a=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity)).ctor,s.Databases=a;var h=(n=new Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,n.Name="Database1",n),g=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity)).ctor,S=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity)).ctor;h.Tables=g,h.Functions=S,a.add(h),n=Bridge.getEnumerator(System.Array.init(["Table1","['Table.2']"],System.String));try{for(;n.moveNext();){var y=n.Current,f=(r=new Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,r.Name=y,r.Columns=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity)).ctor,r),A=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity)).ctor;for(f.Columns=A,g.add(f),i=0;i<10;i=i+1|0)A.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity,r.Name="Field"+(Bridge.toString(i)||""),r.TypeCode=Kusto.Data.IntelliSense.EntityDataType.String,r));for(l=0;l<10;l=l+1|0)A.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity,r.Name="NumField"+(Bridge.toString(l)||""),r.TypeCode=Kusto.Data.IntelliSense.EntityDataType.Int32,r));for(o=0;o<5;o=o+1|0)A.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity,r.Name="DateTimeField"+(Bridge.toString(o)||""),r.TypeCode=Kusto.Data.IntelliSense.EntityDataType.DateTime,r));for(d=0;d<5;d=d+1|0)A.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity,r.Name="TimeSpanField"+(Bridge.toString(d)||""),r.TypeCode=Kusto.Data.IntelliSense.EntityDataType.TimeSpan,r));Kusto.UT.IntelliSenseRulesTests.RegisterTableEntitiesForTest(f,A)}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}for(m=(r=new Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,r.Name="Table3",r.Columns=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity)).ctor,r),c=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity)).ctor,m.Columns=c,g.add(m),p=0;p<2;p=p+1|0)c.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity,r.Name="Field"+(Bridge.toString(p)||""),r.TypeCode=Kusto.Data.IntelliSense.EntityDataType.String,r));return Kusto.UT.IntelliSenseRulesTests.RegisterTableEntitiesForTest(m,c),e!=null&&(e.add("Parameter1"),e.add("Parameter2")),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func",r.Expression="let func = () { Table1 | project NumField1 };",r.CallName="func",r)),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func1",r.Expression="let func1 = () { Table1 | project NumField1 };",r.CallName="func1",r)),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func2",r.Expression="let func2 = () { func1 };",r.CallName="func2",r)),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func3",r.Expression="let func3 = () { func1 | summarize count() by NumField2};",r.CallName="func3",r)),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func4",r.Expression="let func4 = () { func | extend NumField3 = 1};",r.CallName="func4",r)),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func5",r.Expression="let func5 = (x:datetime) { func | extend NumField3 = 1};",r.CallName="func5",r)),S.add((r=new Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,r.Name="func6",r.Expression="let func6 = () { func5(1h) };",r.CallName="func6",r)),s},RegisterTableEntitiesForTest:function(e,t){Kusto.UT.IntelliSenseRulesTests.s_columnMappings.setItem(e.Name,System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(u.$.Kusto.UT.IntelliSenseRulesTests.f1).ToArray(System.String)),Kusto.UT.IntelliSenseRulesTests.s_columnMappings.setItem("database('db1')."+(e.Name||""),System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(u.$.Kusto.UT.IntelliSenseRulesTests.f1).ToArray(System.String)),Kusto.UT.IntelliSenseRulesTests.s_columnMappings.setItem("cluster('other').database('db2')."+(e.Name||""),System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(u.$.Kusto.UT.IntelliSenseRulesTests.f1).ToArray(System.String))}}},methods:{IntelliSenseCommandEntitiesTest:function(){this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | project-away X |",System.Array.init(["Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | project-rename A=X |",System.Array.init(["A","Y","Z"],System.String)),this.TestPrintOperatorEntities(),this.TestParseOperatorEntities(),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1 | \r extend y = 1\r | `,System.Array.init(["x","y"],System.String)),this.CheckProjectedAndExtendedProperties(`\r \r // comment\r Table3\r | where Field1 == 'value { value'\r | `,System.Array.init(["Field0","Field1"],System.String)),this.CheckProjectedAndExtendedProperties(`Table3\r | where Field1 == 'value { value'\r | `,System.Array.init(["Field0","Field1"],System.String)),this.CheckProjectedAndExtendedProperties(`Table3\r | `,System.Array.init(["Field0","Field1"],System.String)),this.CheckProjectedAndExtendedProperties(`Table3\r | where Field1 == 'value{value'\r | `,System.Array.init(["Field0","Field1"],System.String)),this.CheckProjectedAndExtendedProperties(`T1 \r | summarize by key1, key2\r | `,System.Array.init(["key1","key2"],System.String)),this.TestSummarizeOperationsOverFunctions(),this.CheckProjectedAndExtendedProperties(`T1 \r | project x1, x2, key\r | join \r (T2 | project y1, y2, key) on key \r | extend e1 = 1\r | `,System.Array.init(["x1","x2","y1","y2","key","e1"],System.String)),this.CheckProjectedAndExtendedProperties("KustoSources | project Source, Data | join (KustoLogs | summarize max(ActivityID) by Source, Timestamp ) on Source |",System.Array.init(["Source","Data","max_ActivityID","Timestamp"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1\r | extend y = x + 1, z = x + 2\r | summarize val1 = sum(x)/sum(z), sumOfY=sum(y), sumOfZ =sum(z) |`,System.Array.init(["val1","sumOfY","sumOfZ"],System.String)),this.CheckProjectedAndExtendedProperties("range x from 1 to 1 step 1 | ",System.Array.init(["x"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx |`,System.Array.init(["Field1","Field2","Field3","Duration","Field4"],System.String)),this.TestArgMinMaxEntities(),this.TestProjectAssignmentEntities(),this.TestProjectedAwayEntities(),this.TestProjectedRenameEntities(),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | reduce by X |",System.Array.init(["Pattern","Count"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | mvexpand myCount=range(1, 2, 3) |",System.Array.init(["myCount","X","Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize myCount=count(X), mySum= sum(Y), myCount2 = count() by bin(Z, 10min), X |",System.Array.init(["myCount","mySum","myCount2","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(), makelist(ClusterName), makeset(SubscriptionId) by LogicalServerName | ",System.Array.init(["count_","list_ClusterName","set_SubscriptionId","LogicalServerName"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(), any(ClusterName), any(SubscriptionId) by LogicalServerName, AppName, database_id, bin(TIMESTAMP, time(10m)) | ",System.Array.init(["count_","any_ClusterName","any_SubscriptionId","LogicalServerName","AppName","database_id","TIMESTAMP"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(X), sum(Y) by bin(Z, 10min), X |",System.Array.init(["count_X","sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(X), sum(Y) by bin (Z, 10min), X |",System.Array.init(["count_X","sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize A=countif(X), countif(Y) by bin (Z, 10min), X |",System.Array.init(["A","countif_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize A=sumif(X, pred1), sumif(Y, pred2) by bin (Z, 10min), X |",System.Array.init(["A","sumif_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize percentile(X, 10), percentiles(Y, 10, 20, 99.9, 1E-8) |",System.Array.init(["percentile_X_10","percentile_Y_10","percentile_Y_20","percentile_Y_99_9","percentile_Y_1E_8"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize percentile(X / 99, 10), percentiles(Y * 1000, 10, 20, 99.9, 1E-8) |",System.Array.init(["percentile_X_10","percentile_Y_10","percentile_Y_20","percentile_Y_99_9","percentile_Y_1E_8"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx \r | join (Table2 | extend FieldA=1, FieldB=22 |`,System.Array.init(["FieldA","FieldB"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx \r | join (Table2 | extend FieldA=1, FieldB=22 | project FieldA | filter X`,System.Array.init(["FieldA"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | project Field1, Field2, Field3\r | join (\r Table2 | project Field1, Field2, Field3 ) on `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | extend Y=5 | project Field1, Field2, Field3, Y\r | join (\r Table2 | extend Y=4 | project Field1, Field2, Field3, Y ) on `,System.Array.init(["Field1","Field2","Field3","Y"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | extend X=5 | project X, timestamp, Field1\r | join (\r Table2 | make-series X=sum(Y) on timestamp in range(datetime(3000-01-01),datetime(3000-01-02),1h) by Field1) on `,System.Array.init(["X","timestamp","Field1"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | make-series X=sum(Y) on timestamp in range(datetime(3000-01-01),datetime(3000-01-02),1h) by Field1\r | join (\r Table2 | extend X=5 | project X, timestamp, Field1) on `,System.Array.init(["X","timestamp","Field1"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y | summarize count(X), sum(Y)",System.Array.init(["X","Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(X), sum(Y) |",System.Array.init(["count_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(X), sum(Y) | project count_Z",System.Array.init(["count_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(X), sum(Y) | project count_Z |",System.Array.init(["count_Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | top-nested 5 of P by count(X) asc, top-nested 6 of Q by sum(Y) desc, top-nested 6 of W by avg(I)|",System.Array.init(["aggregated_P","aggregated_Q","aggregated_W","P","Q","W"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | top-nested 5 of P by count(X) asc, top-nested 6 of Q by AggregatedSumY = sum(Y) desc, top-nested 6 of W by AggregatedAvgI = avg(I)|",System.Array.init(["aggregated_P","AggregatedSumY","AggregatedAvgI","P","Q","W"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | top-nested 5 of P by count(X) asc, top-nested 6 of Q by AggregatedSumY = sum(Y) desc, top-nested 6 of W by AggregatedAvgI = avg(I) asc, top-nested 5 of M by count(C)|",System.Array.init(["aggregated_P","AggregatedSumY","AggregatedAvgI","aggregated_M","P","Q","W","M"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | top-nested 5 of A by count() | ",System.Array.init(["aggregated_A","A"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(X), sum(Y) | ",System.Array.init(["count_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(X), sum(Y) by Z | ",System.Array.init(["count_X","sum_Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(X), sum(Y) by Z, X | ",System.Array.init(["count_X","sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(), sum(Y) by Z, X | ",System.Array.init(["count_","sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize count(X), sum(Y) | extend FieldA = x | ",System.Array.init(["count_X","sum_Y","FieldA"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(X), dcount(Y) | project dcount_Y |",System.Array.init(["dcount_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y | summarize countif(X), sum(Y)",System.Array.init(["X","Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize countif(X), sum(Y) |",System.Array.init(["countif_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize countif(X), sum(Y) | project count_Z",System.Array.init(["countif_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize sumif(X,Y), sum(Y) | project count_Z",System.Array.init(["sumif_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize countif(X), sum(Y) | project count_Z |",System.Array.init(["count_Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize countif(X), sum(Y) | ",System.Array.init(["countif_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize sumif(X,Y), sum(Y) | ",System.Array.init(["sumif_X","sum_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize countif(X), sum(Y) by Z | ",System.Array.init(["countif_X","sum_Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize sumif(X, Y), sum(Y) by Z | ",System.Array.init(["sumif_X","sum_Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize countif(X), sum(Y) by Z, X | ",System.Array.init(["countif_X","sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize sumif(X, Y), sum(Y) by Z, X | ",System.Array.init(["sumif_X","sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize countif(X), sum(Y) | extend FieldA = x | ",System.Array.init(["countif_X","sum_Y","FieldA"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize sumif(X, Y), sum(Y) | extend FieldA = x | ",System.Array.init(["sumif_X","sum_Y","FieldA"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize countif(X), dcount(Y) | project dcount_Y |",System.Array.init(["dcount_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize any(X), any(Y) | project any_Y |",System.Array.init(["any_Y"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx \r | project Duration, Field4 `,System.Array.init(["Field1","Field2","Field3","Duration","Field4"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx \r | project Duration, Field4 | `,System.Array.init(["Duration","Field4"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 | extend Duration=Field2 - Field3, Field1=xxxx | \r join ( xxxx | project X | extend Y=X, Z=X) on XXX \r join ( yyyy | project Field1, Field2, Field3 | extend Duration=Field2 - Field3, FieldX=xxxx |`,System.Array.init(["Field1","Field2","Field3","Duration","FieldX"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 | extend Duration=Field2 - Field3, Field1=xxxx | \r join ( xxxx | project X | extend Y=X, Z=X) on XXX \r join ( yyyy | project Field1, Field2, Field3 | extend Duration=Field2 - Field3, FieldX=xxxx `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | filter EventText like 'Gateway.ExecuteQuery'\r | filter Source like 'KUSKUS' or Source like 'ONESI-PROD' or Source like 'IPEPROD'\r | extend op=extract('Gateway.ExecuteQuery:.*(join|summarize|filter)', 1, EventText) , is_Join=extract('Gateway.ExecuteQuery:.*(join)', 1, EventText) \r | extend is_Filter=extract('Gateway.ExecuteQuery:.*(filter)', 1, EventText) \r | filter `,System.Array.init(["op","is_Join","is_Filter"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, Field2, Field3\r | extend op=`,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, Field2, Field3\r | extend op=Field1 - `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, Field2, Field3\r | extend op=Field1 + `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, Field2, Field3\r | extend op=Field1 / `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, Field2, Field3\r | extend op=Field1 * `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, Field2, Field3\r | extend op=Field1 + Field2, op2=`,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | filter EventText like 'Gateway.ExecuteQuery'\r \r | extend op=extract('Gateway.ExecuteQuery:.*(join|summarize|filter)', 1, EventText) \r | extend is_Join=extract('Gateway.ExecuteQuery:.*(join)', 1, EventText) \r | extend is_Filter=extract('Gateway.ExecuteQuery:.*(filter)', 1, EventText) \r | filter `,System.Array.init(["op","is_Join","is_Filter"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | filter EventText like 'Gateway.ExecuteQuery'\r \r | extend op=extract('Gateway.ExecuteQuery:.*(join|summarize|filter)', 1, EventText) \r | extend is_Join=extract('Gateway.ExecuteQuery:.*(join)', 1, EventText) \r | extend is_Filter=extract('Gateway.ExecuteQuery:.*(filter)', 1, EventText) \r | filter `,System.Array.init(["op","is_Join","is_Filter"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | make-series sum(Y) default=0 on Z in range(datetime(3000-01-01),datetime(3000-01-02),1h) by X |",System.Array.init(["sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | make-series sum_of_y=sum(Y) default= 0 on Z in range(datetime(3000-01-01),datetime(3000-01-02),1h) by X |",System.Array.init(["sum_of_y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | make-series sum_of_y=sum(Y) on Z in range(datetime(3000-01-01),datetime(3000-01-02),1h) |",System.Array.init(["sum_of_y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | make-series sum(Y) on Z in range(datetime(3000-01-01),datetime(3000-01-02),1h) by X |",System.Array.init(["sum_Y","Z","X"],System.String)),this.CheckProjectedAndExtendedProperties(` Table1\r | sample-distinct 10 of Field1 |\r `,System.Array.init(["Field1"],System.String)),this.CheckProjectedAndExtendedProperties(` Table1\r | sample-distinct 10 of log2(Field1) |\r `,System.Array.init(["Field1"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, series_stats(Field2), (rs, s)=series_fit_line(Field3) |\r `,System.Array.init(["Field1","series_stats_Field2_min","series_stats_Field2_min_idx","series_stats_Field2_max","series_stats_Field2_max_idx","series_stats_Field2_avg","series_stats_Field2_stdev","series_stats_Field2_variance","rs","s"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, series_stats(Field2), (a,b,c)=series_fit_line(Field3) |\r `,System.Array.init(["Field1","series_stats_Field2_min","series_stats_Field2_min_idx","series_stats_Field2_max","series_stats_Field2_max_idx","series_stats_Field2_avg","series_stats_Field2_stdev","series_stats_Field2_variance","a","b","c"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | extend Field1, (min, min_idx)=series_stats(Field2), (rs, s)=series_fit_line(Field3), mundane=sqrt(Field3) |\r `,System.Array.init(["Field1","min","min_idx","rs","s","mundane"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | extend Field1, series_stats(Field2), series_fit_line(Field3), mundane=sqrt(Field3) |\r `,System.Array.init(["Field1","series_stats_Field2_min","series_stats_Field2_min_idx","series_stats_Field2_max","series_stats_Field2_max_idx","series_stats_Field2_avg","series_stats_Field2_stdev","series_stats_Field2_variance","series_fit_line_Field3_rsquare","series_fit_line_Field3_slope","series_fit_line_Field3_variance","series_fit_line_Field3_rvariance","series_fit_line_Field3_interception","series_fit_line_Field3_line_fit","mundane"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, series_fit_2lines(Field2), mundane=sqrt(Field3) |\r `,System.Array.init(["Field1","series_fit_2lines_Field2_rsquare","series_fit_2lines_Field2_split_idx","series_fit_2lines_Field2_variance","series_fit_2lines_Field2_rvariance","series_fit_2lines_Field2_line_fit","series_fit_2lines_Field2_right_rsquare","series_fit_2lines_Field2_right_slope","series_fit_2lines_Field2_right_interception","series_fit_2lines_Field2_right_variance","series_fit_2lines_Field2_right_rvariance","series_fit_2lines_Field2_left_rsquare","series_fit_2lines_Field2_left_slope","series_fit_2lines_Field2_left_interception","series_fit_2lines_Field2_left_variance","series_fit_2lines_Field2_left_rvariance","mundane"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | project Field1, series_stats(Field2), (min, min_idx)=series_stats(Field2) |\r `,System.Array.init(["Field1","series_stats_Field2_min","series_stats_Field2_min_idx","series_stats_Field2_max","series_stats_Field2_max_idx","series_stats_Field2_avg","series_stats_Field2_stdev","series_stats_Field2_variance","min","min_idx"],System.String))},IntelliSenseCommandEntities_EscapedNamesTest:function(){this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1 \r | project a.b, a.[c], a.[c][d], a.[c].[e] |`,System.Array.init(["a_b","a_c","a_c_d","a_c_e"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1 \r | project a.['b'], a.['c'], a.["c"][d], a.['c'].["e"] |`,System.Array.init(["a_b","a_c","a_c_d","a_c_e"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1 \r | project a.['[b]'], a.['[c]'], a.["[c]"][d], a.['[c]'].["[e]"] |`,System.Array.init(["['a_[b]']","['a_[c]']","['a_[c]_d']","['a_[c]_[e]']"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1 \r | project a.['b c'] |`,System.Array.init(["a_b_c"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize percentile(X / 99, 10), percentiles(Y * 1000, 10, 20, 99.9, 1E-8) |",System.Array.init(["percentile_X_10","percentile_Y_10","percentile_Y_20","percentile_Y_99_9","percentile_Y_1E_8"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1 \r | extend ['abc def'] = 1\r | summarize min(['abc def']), max(['abc def']), avg(['abc def']) |`,System.Array.init(["['min_abc def']","['max_abc def']","['avg_abc def']"],System.String)),this.CheckProjectedAndExtendedProperties("range x from 1 to 1 step 1 | extend ['abc def'] = 1 | ",System.Array.init(["x","['abc def']"],System.String)),this.CheckProjectedAndExtendedProperties("range x from 1 to 1 step 1 | project ['abc def'] = 1 | ",System.Array.init(["['abc def']"],System.String))},IntelliSenseCommandEntities_FindTest:function(){this.TestEntitiesForFindFilterAndProjection("find where ",System.Array.init(["Field0","Field1","*"],System.String)),this.TestEntitiesForFindFilterAndProjection("find in (*) where ",System.Array.init(["Field0","Field1","*"],System.String)),this.TestEntitiesForFindFilterAndProjection("find in (Table1) where ",System.Array.init(["*"],System.String),!0),this.TestEntitiesForFindFilterAndProjection("find in (['Table.2']) where ",System.Array.init(["*"],System.String),!0),this.TestEntitiesForFindFilterAndProjection("find in (Table1, ['Table.2']) where ",System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).intersect(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("['Table.2']")).concat(System.Array.init(["*"],System.String)).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection("find in (database('*').Table1) where ",System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).concat(System.Array.init(["*"],System.String)).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection("find in (database('*').*1, *1) where ",System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).concat(System.Array.init(["*"],System.String)).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection("find in (Table1, Table2) where ",System.Array.init(["*"],System.String)),this.TestEntitiesForFindFilterAndProjection("find where 'abc' project ",System.Array.init(["Field0","Field1","pack(*)"],System.String)),this.TestEntitiesForFindFilterAndProjection('find in (*) where Field0 == "abc" project ',System.Array.init(["Field0","Field1","pack(*)"],System.String)),this.TestEntitiesForFindFilterAndProjection('find in (Table1) where Field0 == "abc" project ',System.Array.init(["pack(*)"],System.String),!0),this.TestEntitiesForFindFilterAndProjection(`find in (['Table.2']) where Field0 == "abc" project `,System.Array.init(["pack(*)"],System.String),!0),this.TestEntitiesForFindFilterAndProjection(`find in (Table1, ['Table.2']) where Field0 == "abc" project `,System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).intersect(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("['Table.2']")).concat(System.Array.init(["pack(*)"],System.String)).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection(`find in (database('*').Table1) where Field0 == "abc" project `,System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).concat(System.Array.init(["pack(*)"],System.String)).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection('find in (Table1, Table2) where Field0 == "abc" project ',System.Array.init(["pack(*)"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find 'abc' project Field0, Field1\r | `,System.Array.init(["source_","Field0","Field1"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find 'abc' project Field0, Field1, pack(*)\r | `,System.Array.init(["source_","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find 'abc' project Field0, pack(*)\r | `,System.Array.init(["source_","Field0","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find 'abc' project pack(*)\r | `,System.Array.init(["source_","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find where 'abc' project Field0, Field1\r | `,System.Array.init(["source_","Field0","Field1"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find where 'abc' project Field0, Field1, pack(*)\r | `,System.Array.init(["source_","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find where 'abc' project pack(*)\r | `,System.Array.init(["source_","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find withsource=Source where 'abc' project Field0, Field1\r | `,System.Array.init(["Source","Field0","Field1"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find withsource=SourceName in (*) where 'abc' \r | `,System.Array.init(["SourceName","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find withsource=SourceName in (database('db1').*, *) where 'abc'\r | `,System.Array.init(["SourceName","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find withsource=SourceName in (database('db1').*) where 'abc'\r | `,System.Array.init(["SourceName","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find withsource=SourceName in (Table1) where 'abc'\r | `,System.Linq.Enumerable.from(System.Array.init(["SourceName","pack_"],System.String),System.String).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1")).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection(`find 'abc'\r | `,System.Array.init(["source_","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find in (Table1) where 'abc'\r | `,System.Linq.Enumerable.from(System.Array.init(["source_","pack_"],System.String),System.String).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1")).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection(`find in (Table1, ['Table.2']) where 'abc'\r | `,System.Linq.Enumerable.from(System.Array.init(["source_","pack_"],System.String),System.String).union(System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).intersect(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("['Table.2']"))).ToArray(System.String)),this.TestEntitiesForFindFilterAndProjection(`find withsource=SourceName where 'abc'\r | `,System.Array.init(["SourceName","Field0","Field1","pack_"],System.String)),this.TestEntitiesForFindFilterAndProjection(`find in (Table1, database('db1').Table1) where 'abc'\r | `,System.Linq.Enumerable.from(System.Array.init(["source_","pack_"],System.String),System.String).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1")).ToArray(System.String))},IntelliSenseCommandEntities_SearchTest:function(){var e,t=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1"),System.String).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("['Table.2']")).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3")),n=System.Linq.Enumerable.from(System.Array.init(['""',"*"],System.String),System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SortedExtendFunctions),r=n.concat(System.Array.init(["in"],System.String)),s=r.concat(System.Array.init(["kind="],System.String));e=t.union(s).ToArray(System.String),this.TestOptionsForSearch("search ",e),e=t.union(r).ToArray(System.String),this.TestOptionsForSearch("search kind=case_sensitive ",e),e=t.union(n).ToArray(System.String),this.TestOptionsForSearch("search 'abc' and ",e),e=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3"),System.String).union(n).ToArray(System.String),this.TestOptionsForSearch("Table3 | search 'abc' and ",e),e=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3"),System.String).union(n).ToArray(System.String),this.TestOptionsForSearch("search in (Table3) 'abc' and ",e),e=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3"),System.String).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("['Table.2']")).union(n).ToArray(System.String),this.TestOptionsForSearch("search in (Table3,['Table.2']) 'abc' and ",e),e=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3"),System.String).union(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table1")).union(n).ToArray(System.String),this.TestOptionsForSearch("search in (T*) 'abc' and ",e),e=t.union(n).ToArray(System.String),this.TestOptionsForSearch("search in (*) 'abc' and ",e),e=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3"),System.String).union(n).ToArray(System.String),this.TestOptionsForSearch("search in (database('db1').Table3) 'abc' and ",e),e=System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable("Table3"),System.String).union(n).ToArray(System.String),this.TestOptionsForSearch("search in (database('db1').T*3) 'abc' and ",e),e=t.union(n).ToArray(System.String),this.TestOptionsForSearch("search in (database('db1').T*) 'abc' and ",e)},TestOptionsForSearch:function(e,t){var n=this.GetQueryContext(e);this.ValidateSearchRules(e,n,t)},ValidateSearchRules:function(e,t,n){var r,s={},a;Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule(e,t,Kusto.Data.IntelliSense.RuleKind.YieldPostSearchOptions,s)||Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule(e,t,Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions,s)||Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule(e,t,Kusto.Data.IntelliSense.RuleKind.YieldPostSearchKindOptions,s)||Kusto.UT.IntelliSenseRulesTests.Assert.Fail(System.String.format("No matching search rule for query '{0}'",[e])),a=(r=System.String,System.Linq.Enumerable.from(s.v.GetOptions(t),r).toList(r)),Kusto.UT.IntelliSenseRulesTests.ValidateEntities(e,n,a)},TestProjectAssignmentEntities:function(){this.CheckProjectedAndExtendedProperties(`Table1\r | project x=1 |\r `,System.Array.init(["x"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | project y=xxxx+1, z= 33, x=xxxx/2 |\r `,System.Array.init(["x","y","z"],System.String))},TestProjectedAwayEntities:function(){this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | project-away X |",System.Array.init(["Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | mvexpand myCount=range(1, 2, 3) | project-away Y |",System.Array.init(["myCount","X","Z"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project X, Y, Z | summarize myCount=count(X), mySum= sum(Y), myCount2 = count() by bin(Z, 10min), X | project-away Z |",System.Array.init(["myCount","mySum","myCount2","X"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project-away ClusterName |summarize count(), any(SubscriptionId) by LogicalServerName, AppName, database_id, bin(TIMESTAMP, time(10m)) | ",System.Array.init(["count_","any_SubscriptionId","LogicalServerName","AppName","database_id","TIMESTAMP"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | project-away X | summarize sum(Y) by bin(Z, 10min)|",System.Array.init(["sum_Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 | project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx \r | join (Table2 | extend FieldA=1, FieldB=22 | project-away FieldB | filter X`,System.Array.init(["FieldA"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize count(X), dcount(Y) | project-away count_X |",System.Array.init(["dcount_Y"],System.String)),this.CheckProjectedAndExtendedProperties("Table1 | summarize any(X), any(Y) | project-away any_Y |",System.Array.init(["any_X"],System.String)),this.CheckProjectedAndExtendedProperties(`| project Field1, Field2, Field3 \r | extend Duration=Field2 - Field3, Field4=xxxx \r | project-away Duration, Field4 | `,System.Array.init(["Field1","Field2","Field3"],System.String)),this.CheckProjectedAndExtendedProperties(`KustoLogs \r | filter EventText like 'Gateway.ExecuteQuery'\r | extend fake=1\r | extend op=extract('Gateway.ExecuteQuery:.*(join|summarize|filter)', 1, EventText) \r | extend is_Join=extract('Gateway.ExecuteQuery:.*(join)', 1, EventText) \r | extend is_Filter=extract('Gateway.ExecuteQuery:.*(filter)', 1, EventText) \r | project-away fake |`,System.Array.init(["op","is_Join","is_Filter"],System.String))},TestProjectedRenameEntities:function(){this.CheckProjectedAndExtendedProperties(`Table1 \r | project X, Y, Z \r | project-rename A=X \r | `,System.Array.init(["A","Y","Z"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 \r | project X, Y, Z \r | project-rename B=Z, A=X \r | `,System.Array.init(["A","Y","B"],System.String))},TestPrintOperatorEntities:function(){this.CheckProjectedAndExtendedProperties("print Message = 'xyz' |",System.Array.init(["Message"],System.String))},TestParseOperatorEntities:function(){this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1\r | extend str = ''string''\r | parse str with * "s" substr * |`,System.Array.init(["x","str","substr"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1\r | extend str = ''string''\r | parse str with * "s" substr 'abdc' substr2:string * |`,System.Array.init(["x","str","substr","substr2"],System.String)),this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1\r | extend str = ''string''\r | parse str with * "s" substr 'abdc' substr2:string * num1:int |`,System.Array.init(["x","str","substr","substr2","num1"],System.String))},TestArgMinMaxEntities:function(){this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmin(c0, c1, c2) |\r `,System.Array.init(["min_c0","min_c0_c1","min_c0_c2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmin(c0+1d, c1/c2, c2+c3) |\r `,System.Array.init(["min_","min__arg1","min__arg2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmax(c0, c1, c2) by group1, group2 |\r `,System.Array.init(["max_c0","max_c0_c1","max_c0_c2","group1","group2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmax(c0+1d, c1/c2, c2+c3) |\r `,System.Array.init(["max_","max__arg1","max__arg2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | project column1, column2, column3, xyz\r | summarize argmin(column1, *) by column3, column2 |\r `,System.Array.init(["min_column1","min_column1_xyz","column3","column2"],System.String),System.Array.init(["column1","column2","column3","xyz"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 \r | project column1, column2, column3, xyz\r | summarize argmin(column1, [*col*]) by column3 |\r `,System.Array.init(["min_column1","min_column1_column2","column3"],System.String),System.Array.init(["column1","column2","column3","xyz"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize arg_min(c0, c1, c2) |\r `,System.Array.init(["c0","c1","c2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize arg_min(c0+1d, c1/c2, c2+c3) |\r `,System.Array.init(["min_","min__arg1","min__arg2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize arg_min(c0+1d, c1/c2, c2) |\r `,System.Array.init(["min_","min__arg1","c2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize arg_max(c0, c1, c2) by group1, group2 |\r `,System.Array.init(["c0","c1","c2","group1","group2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize arg_max(c0+1d, c1/c2, c2+c3) |\r `,System.Array.init(["max_","max__arg1","max__arg2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize arg_max(c0, c1/c2, c2+c3, c2) |\r `,System.Array.init(["c0","max_c0_arg1","max_c0_arg2","c2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | project column1, column2, column3, xyz\r | summarize arg_min(column1, *) by column3, column2 |\r `,System.Array.init(["column1","xyz","column3","column2"],System.String),System.Array.init(["column1","column2","column3","xyz"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1 \r | project column1, column2, column3, xyz\r | summarize arg_min(column1, [*col*]) by column3 |\r `,System.Array.init(["column1","column2","column3"],System.String),System.Array.init(["column1","column2","column3","xyz"],System.String))},TestSummarizeOperationsOverFunctions:function(){this.CheckProjectedAndExtendedProperties(`range x from 1 to 1 step 1\r | extend y = x + 1, z = x + 2\r | summarize val1 = sum(x)/sum(z), sumOfY=sum(y), sumOfZ =sum(z) |`,System.Array.init(["val1","sumOfY","sumOfZ"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | project column1, column2, column3, xyz\r | summarize argmin(column1, *) by column3, column2 |\r `,System.Array.init(["min_column1","min_column1_xyz","column3","column2"],System.String),System.Array.init(["column1","column2","column3","xyz"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmax(c0, c1, c2) by group1, group2 |\r `,System.Array.init(["max_c0","max_c0_c1","max_c0_c2","group1","group2"],System.String)),this.CheckProjectedAndExtendedProperties("KustoSources | project Source, Data | join (KustoLogs | summarize max(ActivityID) by Source, Timestamp ) on Source |",System.Array.init(["Source","Data","max_ActivityID","Timestamp"],System.String)),this.CheckProjectedAndExtendedProperties("KustoSources | project Source, Data | join (KustoLogs | summarize max(strlen(ActivityID)) by Source, Timestamp ) on Source |",System.Array.init(["Source","Data","max_","Timestamp"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmin(c0, c1, c2) |\r `,System.Array.init(["min_c0","min_c0_c1","min_c0_c2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmin(strlen(c0), c1, c2) |\r `,System.Array.init(["min_","min__c1","min__c2"],System.String)),this.CheckProjectedAndExtendedProperties(`Table1\r | summarize argmax(strlen(c0), c1, c2) |\r `,System.Array.init(["max_","max__c1","max__c2"],System.String))},IntelliSenseCommandEntitiesForTablesTest:function(){this.TestTableEntities("Table1"),this.TestTableEntities("['Table.2']"),this.TestTableEntities("database('db1').Table1"),this.TestTableEntities("database('db1').['Table.2']"),this.TestTableEntities("cluster('other').database('db2').Table1"),this.TestTableEntities("cluster('other').database('db2').['Table.2']")},TestTableEntities:function(e){var t=Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.AnalyzeCommand$1(e,null).Context;this.CheckQueryProperties(e,t,Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable(e))},IntelliSenseCommandEntitiesForClusters:function(){this.CheckDatabases("cluster('other').database(",System.Array.init(["'db2'"],System.String)),this.CheckDatabases("find in (cluster('other').database(",System.Array.init(["'db2'"],System.String)),this.CheckDatabases("find in (cluster('other').database('db2').Table1, cluster('other').database(",System.Array.init(["'db2'"],System.String)),this.CheckDatabases("#connect cluster('other').database(",System.Array.init(["'db2'"],System.String))},IntelliSenseCommandEntitiesForGetSchemaOperator:function(){var e=System.Array.init(["ColumnName","ColumnOrdinal","DataType","ColumnType"],System.String);this.CheckProjectedAndExtendedProperties("Table1 | summarize count() by Source | getschema | project ",e),this.CheckProjectedAndExtendedProperties("Table1 | union (Table2) | getschema | sort by ",e),this.CheckProjectedAndExtendedProperties("Table1 | join (Table2) on ActivityId | getschema | project ",e)},CheckDatabases:function(e,t){var n,r=this.GetQueryContext(e),s={},a;Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule(e,r,Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions,s)||Kusto.UT.IntelliSenseRulesTests.Assert.Fail(System.String.format("Couldn't derive 'databases' rule for the query '{0}'",[e])),a=(n=System.String,System.Linq.Enumerable.from(s.v.GetOptions(r),n).toList(n)),Kusto.UT.IntelliSenseRulesTests.ValidateEntities(e,t,a)},IntelliSenseCommandEntitiesUsingFunctionsTest:function(){this.CheckProjectedAndExtendedProperties("func6 | ",System.Array.init(["NumField1","NumField3"],System.String)),this.CheckProjectedAndExtendedProperties("func4 | ",System.Array.init(["NumField1","NumField3"],System.String)),this.CheckProjectedAndExtendedProperties("func2 | ",System.Array.init(["NumField1"],System.String)),this.CheckProjectedAndExtendedProperties("func1 | ",System.Array.init(["NumField1"],System.String)),this.CheckProjectedAndExtendedProperties("func3 | extend y = 111 | ",System.Array.init(["count_","NumField2","y"],System.String))},IntelliSenseEntityParserTest:function(){var e='argmax(PreciseTimeStamp, IsHealthy), max(iff(IsHealthy == 1, PreciseTimeStamp, datetime("2000-01")))',t=System.Array.init(["argmax:PreciseTimeStamp",'max:iff(IsHealthy == 1, PreciseTimeStamp, datetime("2000-01"))'],System.String),n=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities(e),r=System.Linq.Enumerable.from(n,Kusto.Data.IntelliSense.ExpressionEntity).select(u.$.Kusto.UT.IntelliSenseRulesTests.f2).toList(System.String);Kusto.UT.IntelliSenseRulesTests.ValidateEntities(e,t,r);var s="(Timestamp, EventText)= argmin(Timestamp, EventText), RootActivityId",a=System.Array.init([":Timestamp",":EventText",":RootActivityId"],System.String),i=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities(s),l=System.Linq.Enumerable.from(i,Kusto.Data.IntelliSense.ExpressionEntity).select(u.$.Kusto.UT.IntelliSenseRulesTests.f2).toList(System.String);Kusto.UT.IntelliSenseRulesTests.ValidateEntities(s,a,l);var o="makeset(ReportIndex), makeset(AlertId), File_Sha256)",d=System.Array.init(["makeset:ReportIndex","makeset:AlertId",":File_Sha256"],System.String),m=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities(o),c=System.Linq.Enumerable.from(m,Kusto.Data.IntelliSense.ExpressionEntity).select(u.$.Kusto.UT.IntelliSenseRulesTests.f2).toList(System.String);Kusto.UT.IntelliSenseRulesTests.ValidateEntities(o,d,c)},GetQueryContext:function(e){return Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.AnalyzeCommand$1(e,null).Context},CheckQueryProperties:function(e,t,n){var r,s={},a;Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule(e,t,Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind,s)||Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule((e||"")+" project ",t,Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind,s)||Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.TryMatchSpecificRule((e||"")+" | project ",t,Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject,s)||Kusto.UT.IntelliSenseRulesTests.Assert.Fail(System.String.format("Couldn't derive 'find .. where', 'find .. where .. project' and 'project' rules for the query '{0}'",[e])),a=(r=System.String,System.Linq.Enumerable.from(s.v.GetOptions(t),r).toList(r)),Kusto.UT.IntelliSenseRulesTests.ValidateEntities(e,n,a)},CheckProjectedAndExtendedProperties:function(e,t,n){var r,s,a;n===void 0&&(n=null),r=Bridge.getEnumerator(System.Array.init([!0,!1],System.Boolean));try{for(;r.moveNext();){s=r.Current,System.String.contains(e,"//")||(e=System.String.replaceAll(System.String.replaceAll(e,String.fromCharCode(13),String.fromCharCode(32)),String.fromCharCode(10),String.fromCharCode(32))),n==null&&(a=Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.AnalyzeCommand$1(e,null),n=Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable(a.Context.Context));var i=new(System.Collections.Generic.List$1(System.String)).ctor,l=new(System.Collections.Generic.List$1(System.String)).ctor,o=Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.ResolveEntitiesFromCommand(e,i,n);switch(o){case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities:l.AddRange(i);break;case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None:n!=null&&l.AddRange(n);break;case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities:n!=null&&l.AddRange(n),l.AddRange(i);break}Kusto.UT.IntelliSenseRulesTests.ValidateEntities(e,t,l)}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}},TestEntitiesForFindFilterAndProjection:function(e,t,n){t===void 0&&(t=null),n===void 0&&(n=!1);var r=this.GetQueryContext(e);this.CheckQueryProperties(e,r,n?t==null?Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable(r.Context):System.Linq.Enumerable.from(Kusto.UT.IntelliSenseRulesTests.GetColumnsOfTable(r.Context),System.String).concat(t).ToArray(System.String):t)},IntelliSenseFilterTest:function(){this.TestFilter("filter","like"),this.TestFilter("filter","contains"),this.TestFilter("filter","notcontains"),this.TestFilter("where","like"),this.TestFilter("where","contains"),this.TestFilter("where","notcontains"),this.TestFilter("where","=="),this.TestFilter("where","!=")},TestFilter:function(e,t){var n=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0}",[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1",[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldStringComparisonOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} FieldX ",[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1}",[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} ",[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} 'xxx' and ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} 'xxx' and Field2 ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldStringComparisonOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} 'xxx' or ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} 'xxx' or Field2 ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldStringComparisonOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} 'xxx' |",[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} Field1 {1} 'xxx' | ",[e,t]),Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1",[e]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1 ",[e]),Kusto.Data.IntelliSense.RuleKind.YieldNumericComparisonOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1 ==",[e]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1 == 10 and ",[e]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1 == 10 and NumField1 ",[e]),Kusto.Data.IntelliSense.RuleKind.YieldNumericComparisonOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1 == 10 or ",[e]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | {0} NumField1 == 10 or NumField1 ",[e]),Kusto.Data.IntelliSense.RuleKind.YieldNumericComparisonOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | xxx Field1, Field2 | {0} ",[e]),Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Table1 | xxx Field1, Field2 {0} ",[e]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture(`Table1 | {0} Field1\r {1} \r 'dddd' `,[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture(`Table1 | filter {0}\r {1} \r 'dddd' \r `,[e,t]),Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,n)},IntelliSenseRangeTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv ",Kusto.Data.IntelliSense.RuleKind.YieldRangeFromOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) ",Kusto.Data.IntelliSense.RuleKind.YieldRangeFromToOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to datetime(2013-01-01)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to datetime(2013-01-01) ",Kusto.Data.IntelliSense.RuleKind.YieldRangeFromToStepOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to datetime(2013-01-01) st",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to datetime(2013-01-01) step 123",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from datetime(2012-01-01) to datetime(2013-01-01) step 123 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 ",Kusto.Data.IntelliSense.RuleKind.YieldRangeFromToOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to 456",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to 456 ",Kusto.Data.IntelliSense.RuleKind.YieldRangeFromToStepOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to 456 st",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to 456 step 123",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("range ziv from 123.4 to 456 step 123 ",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDatabaseTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("database",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("database(",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(" database(",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("database('xyz').",Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForRemoteQueryOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').database",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').database(",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').database('xyz').",Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForRemoteQueryOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').database('xyz').xx",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (database(",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (cluster('foo').database(",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (cluster('foo').database('db1').Table1, database(",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseClusterTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster(",Kusto.Data.IntelliSense.RuleKind.YieldClusterNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(" cluster(",Kusto.Data.IntelliSense.RuleKind.YieldClusterNamesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').cluster",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').cluster(",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').database('some')",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("cluster('foo').",Kusto.Data.IntelliSense.RuleKind.YieldDatabaseFunctionOption)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseSummarizeTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize res",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize res=",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize res =",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize res= ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize res=count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize countif(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize dcount(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize dcountif(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize max(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize min(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize avg(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize stdev(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize variance(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum( ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sumif(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) +",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) + ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) / ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) - ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) * ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+max(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+min(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+avg(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+any(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+sum(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+sum( ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+sum(Filed1)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1)+",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) +",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) + ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) / ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) - ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) * ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) - ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1 ,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1 , ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | count by ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize by Feild1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize by Feild1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize by Feild1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize by iff(1==0, Feild1, Field2),",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize by iff(1==0, Feild1, Field2), ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize count() by bin(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize count() by bin( ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize count() by bin(Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize count() by bin(Field1, ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize sum(Filed1), count(Filed2) by Field1, Filed2 | summarize count() by bin(Field1, 1), ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentile(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentile(Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentiles(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentiles(Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentilew(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForThreeParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentilew(Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentilesw(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize percentilesw(Field1,",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize arg_min(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize arg_max(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize arg_min(Field1,",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | summarize arg_max(Field1,",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | xxx Field1, Field2 | summarize ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | xxx Field1, Field2 summarize ",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseMakeSeriesTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series res",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series res=",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series res =",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series res= ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series 100*",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x= 100*",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series res=count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series count(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series countif(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series dcount(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series dcountif(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series max(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series min(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series avg(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series stdev(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series variance(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum( ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sumif(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x = sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=100*sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x= sum(Filed1) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1), avg(field2) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1), x=avg(field2) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1), avg(field2) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x= sum(Filed1)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1), avg(field2)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=10 ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default=10 ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x = sum(Filed1) default=10 ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x = sum(Filed1) default=10,y=sum(field2) default=10 ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x = sum(Filed1), y=sum(field2) default=10 ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForOn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x = sum(Filed1) default=10,y=sum(field2) default=10",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=10",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default=",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default= ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default=0, y=count() on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default=0, y=count() default=0 on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default= 0 on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x= sum(Filed1) default=0 on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x= sum(Filed1) on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x= sum(Filed1),y=avg(duration) default=0 on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1),y=avg(duration) default=0 on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0, y=count() on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) default=0 on timestamp",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForThreeParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) on timestamp in range(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForThreeParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) on timestamp in range(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForThreeParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(ago(1d), now(),1h) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForBy)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) on timestamp in range(ago(1d), now(),1h) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForBy)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) on timestamp in range(ago(1d), now(),1h) ",Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForBy)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series x=sum(Filed1) on timestamp in range(ago(1d), now(),1h)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(ago(1d), now(),1h) by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(ago(1d), now(),1h) by field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(ago(1d), now(),1h) by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0, y=count() on timestamp in range(ago(1d), now(),1h) by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1), y=count() default=0 on timestamp in range(ago(1d), now(),1h) by field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(ago(1d), now(),1h) by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | make-series sum(Filed1) default=0 on timestamp in range(ago(1d), now(),1h) by field1,",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDistinctTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1 ,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1 , ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1, Field2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1, Field2 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1, Field2, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct Field1, Field2 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct sum(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | distinct sum(Filed1), count(Field2)",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseTopNestedTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOthersOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by 1 + ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by 1+ ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by 1+",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by 1 * ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by 1 - ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A) ",Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested 1 ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A) asc, top-nested 1 of",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested 1 of ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A) desc, top-nested 1 of A",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested 1 of A ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOthersOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested 1 of A by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of A by avg(A), top-nested 1 of A by ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) ",Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) by ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) with others = 12 by ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) by avg(A) ",Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) with others = 15 by avg(A) ",Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) by avg(A) asc",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) by avg(A), ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-nested 1 of bin(A,1m) with others = 12 ",Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseTopHittersTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A ",Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by 1 + ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by 1+ ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by 1+",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by 1 * ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by 1 - ",Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by avg(A)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top-hitters 1 of A by avg(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseProjectTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Fiel",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1, Field2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1, Field2 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1, Field2,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1, Field2, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project Field1, Field2 | , ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | xxx Field1, Field2 | project ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | xxx Field1, Field2 project ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x=",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x= ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x= Fiel",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x= Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x= Field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x= Field1, y",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project x= Field1, y=",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseProjectAwayTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectAway)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Fiel",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectAway)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1, Field2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1, Field2 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1, Field2,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1, Field2, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectAway)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-away Field1, Field2 | , ",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseProjectRenameTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Fiel",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1 =",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectRename)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1 = ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectRename)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1 = z,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1 = z, ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1 = z, Feild2=",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectRename)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | project-rename Field1 = z, Feild2= ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectRename)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseLimitTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | limit",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | limit ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | limit 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | limit 2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | limit 1 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | take",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | take ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | take 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | take 2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | take 1 ",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseSampleTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample 2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample 1 ",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseSampleDistinctTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct 1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct 1 ",Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct 1 of",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct 1 of ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sample-distinct 1 of A",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseShowCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(` .show `,Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(" .show ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show xxx | .show ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show principal ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowPrincipalCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter policies ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMultiplePoliciesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete policies ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDeleteMultiplePoliciesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseClientDirectivesTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("#",Kusto.Data.IntelliSense.RuleKind.YieldClientDirectivesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("#connect",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("#connect ",Kusto.Data.IntelliSense.RuleKind.YieldClientDirective_ConnectOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAppendCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".append",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".append ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set-or-append",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set-or-append ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseReplaceCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set-or-replace",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set-or-replace ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseExtendTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx ,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx-",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx/",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx*",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx +",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx -",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx /",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx *",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+ ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx- ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx/ ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx* ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx + ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx / ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx * ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,newop1=",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,newop1=strlen(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,newop1=tostring(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,newop1=strcat(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,newop1=toupper(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy,newop1=iff(",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForThreeParamFunctions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend newop=xx+yy | summarize count(newop) by newop bin=",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseParseOperator:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForParse)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind",Kusto.Data.IntelliSense.RuleKind.YieldParseKeywordKindsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = simple ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForParse)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = regex ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForParse)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = relaxed ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForParse)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = relaxed flags = iU ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForParse)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = simple column ",Kusto.Data.IntelliSense.RuleKind.YieldWithKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = simple flags = iU column ",Kusto.Data.IntelliSense.RuleKind.YieldWithKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = regex column ",Kusto.Data.IntelliSense.RuleKind.YieldWithKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = relaxed column ",Kusto.Data.IntelliSense.RuleKind.YieldWithKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = simple column with ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = regex column with ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = relaxed column with ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = simple column with extendedCol1:",Kusto.Data.IntelliSense.RuleKind.YieldParseTypesKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = regex column with extendedCol1:",Kusto.Data.IntelliSense.RuleKind.YieldParseTypesKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = relaxed column with extendedCol1:",Kusto.Data.IntelliSense.RuleKind.YieldParseTypesKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with extendedCol1:long ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('Table1 | parse kind = simple column with extendedCol1:long "someDelemiter" ',Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = relaxed column with extendedCol1:long | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse kind = regex column with extendedCol1:long | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with extendedCol1:long | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with * 'someDelemiter' * 'someDelemiter2' * 'SomeDelemiter3' SomeStringColumn | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with * s:",Kusto.Data.IntelliSense.RuleKind.YieldParseTypesKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with * s:int ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | parse column with * s:int 'someDelimiter' ",Kusto.Data.IntelliSense.RuleKind.YieldStarOption)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseShowTableCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowTableEntitiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents where",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents where tags",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents where tags ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityWithTagsFiltersOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents hot",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx extents hot ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx principals",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx policy",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show table xxx policy ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTablePoliciesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".show table xxx | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents where",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents where tags",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents where tags ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityWithTagsFiltersOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents hot",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show tables (xxx,yyy) extents hot ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAlterTableCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTableEntitiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter-merge table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter-merge table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter-merge table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter-merge table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTableEntitiesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDeleteTableCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDeleteTableEntitiesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDropTableCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropTableEntitiesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAlterFunctionCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter function",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter function xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter function ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldFunctionNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter function xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterFunctionEntitiesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseShowDatabaseCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowDatabasePrincipalsPoliciesAndSchemaOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents hot",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents hot ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx principals",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx policy ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabasePoliciesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx policy",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".show database xxx principals | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx schema",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".show database xxx schema | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents where",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents where tags",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show database xxx extents where tags ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityWithTagsFiltersOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseShowDatabasesCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show databases",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show databases ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowDatabasesOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseShowClusterCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowClusterPrincipalsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster extents hot",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster extents hot ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster principals",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster policy ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldClusterPoliciesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show cluster policy",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".show cluster principals | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseShowBasicAuthUsersCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show basicauth",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show basicauth ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowBasicAuthOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".show basicauth users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseIngestionDuplicateCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-ingest",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-ingest ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldIngestionDuplicationOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-ingest into",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-ingest into ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-ingest into ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-ingest into ttt to h@'container'",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-failed-ingest",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-failed-ingest ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldIngestionDuplicationOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-failed-ingest into",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-failed-ingest into ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-failed-ingest into ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".dup-next-failed-ingest into ttt to h@'container'",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseColumnCommandTest:function(){var e,t=System.Array.init(["show","alter","alter-merge","delete"],System.String),n=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor,r;e=Bridge.getEnumerator(t);try{for(;e.moveNext();)r=e.Current,n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} column",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} column xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} column xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPoliciesOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} column xxx policy",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} column xxx policy ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldColumnPoliciesOptions))}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,n)},IntelliSenseDatabasePoliciesCommandTest:function(){var e,t=System.Array.init(["alter","alter-merge","delete"],System.String),n=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor,r,s;e=Bridge.getEnumerator(t);try{for(;e.moveNext();)r=e.Current,n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),s=System.String.equals(r,"alter")?Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterDatabaseCommandOptions:Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPoliciesOptions,n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx ",[r]),s)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabasePoliciesOptions)),System.String.equals(r,"alter-merge")&&(n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergePolicyRetentionOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention softdelete = ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTimeSpanPolicyOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention harddelete = ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTimeSpanPolicyOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention softdelete = xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention softdelete = xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergePolicyRetentionSoftDeleteDefinedOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention harddelete = xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention harddelete = xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention softdelete = xxx harddelete = xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} database xxx policy retention softdelete = xxx harddelete = xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)))}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,n)},IntelliSenseTablePoliciesCommandTest:function(){var e,t=System.Array.init(["alter","alter-merge","delete"],System.String),n=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor,r;e=Bridge.getEnumerator(t);try{for(;e.moveNext();)r=e.Current,n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTablePoliciesOptions)),System.String.equals(r,"alter-merge")&&(n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergePolicyRetentionOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention softdelete = ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTimeSpanPolicyOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention harddelete = ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTimeSpanPolicyOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention softdelete = xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention softdelete = xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergePolicyRetentionSoftDeleteDefinedOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention harddelete = xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention harddelete = xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention softdelete = xxx harddelete = xxx",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} table xxx policy retention softdelete = xxx harddelete = xxx ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)))}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,n)},IntelliSenseClusterPoliciesCommandTest:function(){var e,t=System.Array.init(["alter","alter-merge","delete"],System.String),n=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor,r;e=Bridge.getEnumerator(t);try{for(;e.moveNext();)r=e.Current,n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} cluster",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} cluster ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPoliciesOptions)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} cluster policy",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),n.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(System.String.format(".{0} cluster policy ",[r]),Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldClusterPoliciesOptions))}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,n)},IntelliSenseSetDatabaseUsersAdminsViewersPrettyNameCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseAdminsUsersViewersPrettyNameOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx viewers",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx ingestors",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx prettyname",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx users ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseUsersNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx admins ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseAdminsNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx viewers ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseViewersNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx ingestors ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseIngestorsNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set database xxx prettyname",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set database xxx users | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set database xxx admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set database xxx viewers| ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set database xxx ingestors | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set database xxx prettyname | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseSetClusterUsersAdminsViewersCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterAdminsUsersViewersDatabaseCreatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster viewers",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster databasecreators",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster users ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterUsersNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster admins ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterAdminsNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster viewers ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterViewersNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set cluster databasecreators ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterDatabaseCreatorsNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set cluster users | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set cluster admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set cluster viewers| ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set cluster databasecreators| ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseSetTableAdminsCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetTableAdminsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table xxx admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table xxx ingestors",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table xxx admins ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetTableAdminsNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".set table xxx ingestors ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetTableIngestorsNoneOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set table xxx admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".set table xxx ingestors | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAddDatabaseUsersAdminsViewersCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddDatabaseAdminsUsersViewersOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database xxx users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database xxx admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database xxx viewers",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add database xxx ingestors",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add database xxx users | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add database xxx admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add database xxx viewers | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add database xxx ingestors | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAddClusterUsersAdminsViewersCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add cluster",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add cluster ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add cluster users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add cluster admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add cluster viewers",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add cluster databasecreators",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add cluster users | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add cluster admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add cluster viewers | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add cluster databasecreators | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAddTableAdminsCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddTableAdminsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add table xxx admins",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add table xxx ingestors",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add table xxx admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".add table xxx ingestors | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDropDatabaseUsersAdminsViewersCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropDatabaseOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx viewers",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx ingestors",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop database xxx prettyname",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop database xxx users | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop database xxx admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop database xxx viewers | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop database xxx ingestors | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDropTableAdminsColumnsCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropTableEntitiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop table xxx admins",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop table xxx ingestors",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop table xxx admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop table xxx ingestors | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop table xxx columns ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropTableColumnsSyntaxOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDropExtentTagsCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent tags ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropExtentTagsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent tags from ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent tags from table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent tags from table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop extent tags from table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAlterExtentTagsCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter extent",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter extent ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter extent tags ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterExtentTagsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter extent tags xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseExtentsAttachCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachExtentsIntoTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt by",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt by ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt by metadata",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt by metadata ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach extents into table ttt by metadata <|",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachExtentsIntoTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt by",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt by ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt by metadata",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt by metadata ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".attach async extents into table ttt by metadata <|",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseExtentsMoveCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents (00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000)",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents (00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000) ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveSpecifiedExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents to table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents to table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents to table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents to table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveSpecifiedExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveExtentsToTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt to",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt to table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt to table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt to table abc",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move extents all from table ttt to table abc ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents (00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000)",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents (00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000) ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveSpecifiedExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents to table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents to table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents to table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents to table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveSpecifiedExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveExtentsToTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt to",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt to table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt to table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt to table abc",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".move async extents all from table ttt to table abc ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseExtentsReplaceCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldReplaceCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldReplaceExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace extents in table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace extents in table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace extents in table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace extents in table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldReplaceCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async extents",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async extents ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldReplaceExtentsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async extents in table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async extents in table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async extents in table ttt",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".replace async extents in table ttt ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseCreateDatabaseAdminCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseCreatePersistencyOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName volatile",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName volatile ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateIfNotExistsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName volatile ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName persist",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName persist ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName persist (h@'', h@'')",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create database SomeName persist (h@'', h@'') ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateIfNotExistsOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseAlterDatabaseMetadataAdminCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterDatabaseCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx persist",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx persist ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx persist metadata",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx persist metadata ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter database xxx persist metadata h@''",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseCreateAddAlterDropAdminsCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter-merge",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".alter-merge ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergeCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".add ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".delete ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDeleteCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create-or-alter ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateOrAlterOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseDropClusterUsersAdminsViewersCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop cluster",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop cluster ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop cluster users",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop cluster admins",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop cluster viewers",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".drop cluster databasecreators",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop cluster users | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop cluster admins | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop cluster viewers| ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(".drop cluster databasecreators| ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseQueryParametersTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("[",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("{",Kusto.Data.IntelliSense.RuleKind.YieldQueryParameters)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('"{',Kusto.Data.IntelliSense.RuleKind.YieldQueryParameters)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('"{q',Kusto.Data.IntelliSense.RuleKind.YieldQueryParameters)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('"{q}',Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('"{q}{',Kusto.Data.IntelliSense.RuleKind.YieldQueryParameters)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('"{q}{ ',Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseJoinTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join ",Kusto.Data.IntelliSense.RuleKind.YieldPostJoinOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join Table2 ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join Table2 on ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join (",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join ( ",Kusto.Data.IntelliSense.RuleKind.YieldTableNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join (Table2) on",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join (Table2) on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForJoin)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join (Table2 | limit 10 ) on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForJoin)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join (Table2) on ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForJoin)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join kind",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join kind=",Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForJoin)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join kind= ",Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForJoin)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join kind=xxx",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join kind=xxx ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1| join kind=xxx kind=",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseRenderTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("render",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("|render",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("|render ",Kusto.Data.IntelliSense.RuleKind.YieldRenderOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render ",Kusto.Data.IntelliSense.RuleKind.YieldRenderOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timechart",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timechart ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render areachart",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render areachart ",Kusto.Data.IntelliSense.RuleKind.YieldRenderKindKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render barchart ",Kusto.Data.IntelliSense.RuleKind.YieldRenderKindKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render columnchart ",Kusto.Data.IntelliSense.RuleKind.YieldRenderKindKeywordOption)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render areachart kind",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render areachart kind=",Kusto.Data.IntelliSense.RuleKind.YieldRenderKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render barchart kind=",Kusto.Data.IntelliSense.RuleKind.YieldRenderKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render columnchart kind=",Kusto.Data.IntelliSense.RuleKind.YieldRenderKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot ",Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForRender)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by Column1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by Column1,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by Column1, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForRender)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by Column1, Column2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by Column1, Column2,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("| render timepivot by Column1, Column2, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForRender)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseTopTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top ",Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top by ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top x by ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 ",Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by Column1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by Column1 ",Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by Column1 asc",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by Column1 asc ",Kusto.Data.IntelliSense.RuleKind.YieldNullsFirstNullsLastOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(`Table1 | top 10 by Column1 asc\r `,Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by Column1 asc nulls first",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | top 10 by Column1 ,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort ",Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by Column1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by Column1 ",Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by Column1 asc",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by Column1 asc ",Kusto.Data.IntelliSense.RuleKind.YieldNullsFirstNullsLastOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(`Table1 | sort by Column1 asc\r `,Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by Column1 asc nulls first",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | sort by Column1 ,",Kusto.Data.IntelliSense.RuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseReduceTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce by ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce by (Table2)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce kind",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce kind=",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce by Column kind=",Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForReduceBy)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce by Column kind =",Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForReduceBy)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | reduce by Column kind = ",Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForReduceBy)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseToScalarTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar(",Kusto.Data.IntelliSense.RuleKind.YieldTableNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar( ",Kusto.Data.IntelliSense.RuleKind.YieldTableNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar(Table",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar(Table ",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar(Table | ",Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("toscalar(Table | count)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("rand x from 1 to toscalar(",Kusto.Data.IntelliSense.RuleKind.YieldTableNames)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("rand x from 1 to toscalar(1) step toscalar(",Kusto.Data.IntelliSense.RuleKind.YieldTableNames)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseTimeKeywordsTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 >",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 > ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 < ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 == ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 != ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 >= ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where DateTimeField1 <= ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where Field1 == 'ff' and DateTimeField1 > ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | where Field1 == 'ff' or DateTimeField1 > ",Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("aago(",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("ago(",Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("ago( ",Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(" ago(",Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("nnow(",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("now(",Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("now( ",Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(" now( ",Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseEvaluateTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | evaluate ",Kusto.Data.IntelliSense.RuleKind.YieldEvaluateOperatorOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('Table1 | evaluate diffpatterns("split= ',Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForDiffPatternsPluginSplitParameter)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('Table1 | evaluate diffpatterns("bsplit= ',Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("Table1 | extend split=",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseExportCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export compressed",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async compressed",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export compressed async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export compressed ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async compressed ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export compressed async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandNoModifiersAndOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandWithModifiersAndOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export compressed to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandWithModifiersAndOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async compressed to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandWithModifiersAndOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async to ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandWithModifiersAndOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export to",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".export async compressed to",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSensePurgeCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWhatIfOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info table TTT",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info table TTT ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info table TTT records",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info table TTT records ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 table TTT",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 table TTT ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 table TTT records",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge maxRecords = 111 table TTT records ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111 ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111 table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111 table TTT",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111 table TTT ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111 table TTT records",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge whatif = info maxRecords = 111 table TTT records ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWhatIfOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info table TTT",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info table TTT ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info table TTT records",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info table TTT records ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 table",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 table TTT",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 table TTT ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 table TTT records",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async maxRecords = 111 table TTT records ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111 ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111 table ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111 table TTT",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111 table TTT ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111 table TTT records",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge async whatif = info maxRecords = 111 table TTT records ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSensePurgeCleanupCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge-cleanup",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge-cleanup ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeCleanupOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge-cleanup async",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".purge-cleanup async ",Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeCleanupOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseCreateRowstoreAdminCommandTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create rowstore",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor1(".create rowstore ",Kusto.Data.IntelliSense.AdminEngineRuleKind.None)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseSearchTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search ",Kusto.Data.IntelliSense.RuleKind.YieldPostSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind=",Kusto.Data.IntelliSense.RuleKind.YieldSearchKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind= ",Kusto.Data.IntelliSense.RuleKind.YieldSearchKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind = ",Kusto.Data.IntelliSense.RuleKind.YieldSearchKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind=case_sensitive",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind=case_sensitive ",Kusto.Data.IntelliSense.RuleKind.YieldPostSearchKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind=case_insensitive ",Kusto.Data.IntelliSense.RuleKind.YieldPostSearchKindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('search "ff" or',Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('search "ff" or ',Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('search "ff" and ',Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('search in (Table1) "ff" and ',Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2(`search in (Table1, ['Table.2']) "ff" or `,Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2('search kind=case_sensitive "ff" and ',Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search in (Table1)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search in (Table1) ",Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search kind=case_sensitive in (Table1) ",Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search in (Table1, ['Table.2'])",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search in (Table1, ['Table.2']) ",Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search in (Table1, database('*').*)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("search in (Table1, database('*').*) ",Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseFindTest:function(){var e=new(System.Collections.Generic.List$1(Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern)).ctor;e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource = SourceTable ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindInOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindInOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (",Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForFindIn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (",Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForFindIn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, Table2,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, Table2, ",Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForFindIn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, Table2,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, Table2, ",Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForFindIn)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2'] ",Kusto.Data.IntelliSense.RuleKind.YieldEndOrContinueFindInOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, Table2",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, Table2 ",Kusto.Data.IntelliSense.RuleKind.YieldEndOrContinueFindInOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2'])",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindInListOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, Table2)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, Table2) ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindInListOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, database('*').*)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, database('*').*) ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindInListOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, database('*').*)",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, database('*').*) ",Kusto.Data.IntelliSense.RuleKind.YieldPostFindInListOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field1 == 'abc' and",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field1 == 'abc' and ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (*, database('*').*) where * has 'abc' and",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (*, database('*').*) where * has 'abc' and ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (*, database('*').*) where 'abc' and",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (*, database('*').*) where 'abc' and ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field1 == 'abc' and",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field1 == 'abc' and ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field3 == 'abc' project",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field3 == 'abc' project ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field0 == 'abc' and DateTimeField1 > ago(1h) project",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field0 == 'abc' and DateTimeField1 > ago(1h) project ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field0 == 'abc' project DateTimeField1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field0 == 'abc' and DateTimeField1 > ago(1h) project NumField1",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project NumField2,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project NumField2, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field3 == 'abc' and DateTimeField0 > ago(1h) project Field0,",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find withsource=SourceTable in (Table1, ['Table.2']) where Field3 == 'abc' and DateTimeField0 > ago(1h) project Field0, ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project-smart",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project-smart ",Kusto.Data.IntelliSense.RuleKind.YieldFindProjectSmartOptions)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project NumField2 | where",Kusto.Data.IntelliSense.RuleKind.None)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project NumField2 | where ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter)),e.add(new Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern.$ctor2("find in (Table1, ['Table.2']) where Field8 == 'abc' project NumField2 | project ",Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject)),Kusto.UT.IntelliSenseRulesTests.TestIntelliSensePatterns(Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider,e)},IntelliSenseGetCommandContextTest:function(){var e,t,n=u.$.Kusto.UT.IntelliSenseRulesTests.f3(new(System.Collections.Generic.Dictionary$2(System.String,System.String)).ctor),r,s,a,i;e=Bridge.getEnumerator(System.Array.init([!1,!0],System.Boolean));try{for(;e.moveNext();){r=e.Current,t=Bridge.getEnumerator(n);try{for(;t.moveNext();)s=t.Current,a=s.key,a=System.String.replaceAll(System.String.replaceAll(a,String.fromCharCode(10),String.fromCharCode(32)),String.fromCharCode(13),String.fromCharCode(32)),i=Kusto.UT.IntelliSenseRulesTests.s_intelliSenseProvider.AnalyzeCommand$1(a,null).Context,Kusto.UT.IntelliSenseRulesTests.Assert.AreEqual$1(s.value,i.Context,Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("Command context was not resolved correctly for command '{0}'",[a]))}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}}}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}}}}),Bridge.ns("Kusto.UT.IntelliSenseRulesTests",u.$),Bridge.apply(u.$.Kusto.UT.IntelliSenseRulesTests,{f1:function(e){return e.Name},f2:function(e){return(e.Operator||"")+":"+(e.Name||"")},f3:function(e){return e.add("database('","database('"),e.add("database('someDB')","database('someDB')"),e.add("database('someDB').","database('someDB')."),e.add("database('someDB').Table","database('someDB').Table"),e.add("database('someDB with space')","database('someDB with space')"),e.add("database('someDB with space').","database('someDB with space')."),e.add("database('someDB with space').Table","database('someDB with space').Table"),e.add('database("someDB with space")','database("someDB with space")'),e.add('database("someDB with space").','database("someDB with space").'),e.add('database("someDB with space").Table','database("someDB with space").Table'),e.add("cluster('abc').database('","cluster('abc').database('"),e.add("cluster('abc').database('someDB')","cluster('abc').database('someDB')"),e.add("cluster('abc').database('someDB').","cluster('abc').database('someDB')."),e.add("cluster('abc').database('someDB').Table","cluster('abc').database('someDB').Table"),e.add("cluster('https://abc.kusto.windows.net').database('","cluster('https://abc.kusto.windows.net').database('"),e.add("cluster('https://abc.kusto.windows.net').database('someDB')","cluster('https://abc.kusto.windows.net').database('someDB')"),e.add("cluster('https://abc.kusto.windows.net').database('someDB').","cluster('https://abc.kusto.windows.net').database('someDB')."),e.add("cluster('https://abc.kusto.windows.net').database('someDB').Table","cluster('https://abc.kusto.windows.net').database('someDB').Table"),e.add(`cluster("https://abc.kusto.windows.net").database('`,`cluster("https://abc.kusto.windows.net").database('`),e.add(`cluster("https://abc.kusto.windows.net").database('someDB')`,`cluster("https://abc.kusto.windows.net").database('someDB')`),e.add(`cluster("https://abc.kusto.windows.net").database('someDB').`,`cluster("https://abc.kusto.windows.net").database('someDB').`),e.add(`cluster("https://abc.kusto.windows.net").database('someDB').Table`,`cluster("https://abc.kusto.windows.net").database('someDB').Table`),e.add("let x = toscalar(Table1 | ","Table1"),e.add("range x from toscalar(Table1 | count) to toscalar(Table2 | ","Table2"),e.add(`set querytrace;\r Table2 | `,"Table2"),e.add(`union\r (Table1 | where body has keyword and body has "Google" | summarize posts=dcount(link_id) | extend context = "Google"),\r (Table2 | where `,"Table2"),e.add("union (Table1), (Table2 ","Table2"),e.add(`union (Table `,"Table"),e.add("union (Table ","Table"),e.add(`let x = () {request}; let y = x; y `,"request"),e.add(`let x = request; x `,"request"),e.add(`let x = request | count; x `,"request"),e.add(`let x = request; x | count `,"request"),e.add(`let x = request; let y = x; y `,"request"),e.add(`let x = () {request | limit 100}; let y = x; y `,"request"),e.add(".show database XYZ ",".show database XYZ"),e.add("Table1 | count","Table1"),e.add("Table1 | join (Table2 | ","Table2"),e.add(`let x = 1; Table2 | `,"Table2"),e.add("range xyz from 1 to 1 step 1| ","range"),e.add("let x = () { request | where ","request"),e.add("let x = request | where ","request"),e.add(`cluster('lxprdscu02').database('Analytics Billing').ApplicationHourlyEntryCount\r | where StartTime >= ago(rangeInDaysForBililngData)\r | where DataSource == 'AI'\r | where Database in (longtailDatabases)\r | summarize totalGB=1.0*sum(SizeInBytes)/1024/1024/1024 by bin(StartTime, 1d), ApplicationName , InstrumentationKey , ClusterName, DatabasePrettyName, Database, ProfileId\r | top-nested of ClusterName by count(), top-nested of DatabasePrettyName by count(), top-nested of Database by count(),top-nested topAppCountByData of ProfileId by avg_totalGB = avg(totalGB) desc, top-nested of ApplicationName by count(), top-nested of InstrumentationKey by count()\r | project ClusterName, DatabasePrettyName , Database, ProfileId , ApplicationName ,InstrumentationKey, avg_totalGB\r | order by ClusterName , avg_totalGB desc `,"cluster('lxprdscu02').database('Analytics Billing').ApplicationHourlyEntryCount"),e.add(`database('Analytics Billing').ApplicationHourlyEntryCount\r | where StartTime >= ago(rangeInDaysForBililngData)\r | where DataSource == 'AI'\r | where Database in (longtailDatabases)\r | summarize totalGB=1.0*sum(SizeInBytes)/1024/1024/1024 by bin(StartTime, 1d), ApplicationName , InstrumentationKey , ClusterName, DatabasePrettyName, Database, ProfileId\r | top-nested of ClusterName by count(), top-nested of DatabasePrettyName by count(), top-nested of Database by count(),top-nested topAppCountByData of ProfileId by avg_totalGB = avg(totalGB) desc, top-nested of ApplicationName by count(), top-nested of InstrumentationKey by count()\r | project ClusterName, DatabasePrettyName , Database, ProfileId , ApplicationName ,InstrumentationKey, avg_totalGB\r | order by ClusterName , avg_totalGB desc `,"database('Analytics Billing').ApplicationHourlyEntryCount"),e.add("find 'abc'","*"),e.add("find in (database('*').*) 'abc'","database('*').*"),e.add(`find in (database("*").*) 'abc'`,'database("*").*'),e.add("find in (Table) where","Table"),e.add("find in (['Table']) where","['Table']"),e.add("find in (database('Office*').*, T*, cluster('somecluster').database('x').T*) 'abc'","database('Office*').*, T*, cluster('somecluster').database('x').T*"),e.add("find withsource=X 'abc'","*"),e.add("find withsource=X in (database('*').*) 'abc'","database('*').*"),e.add(`find withsource=X in (database("*").*) 'abc'`,'database("*").*'),e.add("find withsource=X in (Table) where","Table"),e.add("find withsource=X in (['Table']) where","['Table']"),e.add("find withsource=X in (database('Office*').*, T*, cluster('somecluster').database('x').T*) 'abc'","database('Office*').*, T*, cluster('somecluster').database('x').T*"),e.add("search 'abc'","*"),e.add("Table1 | search 'abc'","Table1"),e.add("search in (database('*').*) 'abc'","database('*').*"),e.add(`search in (database("*").*) 'abc'`,'database("*").*'),e.add("search in (Table) where","Table"),e.add("search in (Table1, Table2) where","Table1, Table2"),e.add("search in (['Table']) where","['Table']"),e.add("search in (database('Office*').*, T*, cluster('somecluster').database('x').T*) 'abc'","database('Office*').*, T*, cluster('somecluster').database('x').T*"),e}}),Bridge.define("Kusto.UT.IntelliSenseRulesTests.IntelliSenseTestPattern",{$kind:"nested class",props:{Input:null,ExpectedMatch:!1,ExpectedRuleKind:0},ctors:{ctor:function(e){this.$initialize(),this.Input=e,this.ExpectedRuleKind=Kusto.Data.IntelliSense.RuleKind.None,this.ExpectedMatch=!1},$ctor2:function(e,t){this.$initialize(),this.Input=e,this.ExpectedRuleKind=t,this.ExpectedMatch=t!==Kusto.Data.IntelliSense.RuleKind.None},$ctor1:function(e,t){this.$initialize(),this.Input=e,this.ExpectedRuleKind=t,this.ExpectedMatch=t!==Kusto.Data.IntelliSense.AdminEngineRuleKind.None}}}),Bridge.define("Kusto.Charting.DataChartsHelper.ChartMetaData",{inherits:[Kusto.Charting.IChartMetaData],$kind:"nested class",props:{ArgumentColumnType:0,ArgumentDataColumnIndex:0,GeospatialColumnIndexes:{get:function(){return this.GeospatiaColumnlIndexesList}},SeriesIndexes:{get:function(){return this.SeriesIndexesList}},DataIndexes:{get:function(){return this.DataIndexesList}},IsDataFormedAsSeries:!1,SeriesIndexesList:null,DataIndexesList:null,GeospatiaColumnlIndexesList:null,UnusedIndexes:null},alias:["ArgumentColumnType","Kusto$Charting$IChartMetaData$ArgumentColumnType","ArgumentDataColumnIndex","Kusto$Charting$IChartMetaData$ArgumentDataColumnIndex","GeospatialColumnIndexes","Kusto$Charting$IChartMetaData$GeospatialColumnIndexes","SeriesIndexes","Kusto$Charting$IChartMetaData$SeriesIndexes","DataIndexes","Kusto$Charting$IChartMetaData$DataIndexes","IsDataFormedAsSeries","Kusto$Charting$IChartMetaData$IsDataFormedAsSeries","UnusedIndexes","Kusto$Charting$IChartMetaData$UnusedIndexes"],ctors:{init:function(){this.ArgumentDataColumnIndex=-1,this.IsDataFormedAsSeries=!1,this.SeriesIndexesList=new(System.Collections.Generic.List$1(System.Int32)).ctor,this.DataIndexesList=new(System.Collections.Generic.List$1(System.Int32)).ctor,this.GeospatiaColumnlIndexesList=new(System.Collections.Generic.List$1(System.Int32)).ctor,this.UnusedIndexes=new(System.Collections.Generic.List$1(System.Int32)).ctor},ctor:function(e){this.$initialize(),this.ArgumentColumnType=e}}}),Bridge.define("Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider",{inherits:[Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase],statics:{fields:{s_lineWithDotBeginningRegex:null,s_allocateVirtualClusterCommandRegex:null,s_showCommandRegex:null,s_suspendCommandRegex:null,s_showFabricCommandRegex:null,s_rotateCommandRegex:null,s_generateCommandRegex:null,s_publishCommandRegex:null,s_unPublishCommandRegex:null,s_afterPipeRegex:null,s_alterCommandRegex:null,s_removeCommandRegex:null,s_setCommandRegex:null,s_createCommandRegex:null,s_deleteCommandRegex:null,s_detachCommandRegex:null,s_checkCommandRegex:null,s_addCommandRegex:null,s_dropCommandRegex:null,s_moveCommandRegex:null,s_migrateCommandRegex:null,s_uninstallCommandRegex:null,s_registerCommandRegex:null,s_putCommandRegex:null,s_listCommandRegex:null,s_listKustoPoolsServicesCommandPropertiesSuffixRegex:null,s_syncCommandRegex:null,s_exportCommandRegex:null,s_exportPackageForOptionsRegex:null,s_exportPackageForProductVersionOptionsRegex:null,s_executeCommandRegex:null,s_executeJobCommandRegex:null,s_activationCommandRegex:null,s_serviceCommandRegex:null,s_ingestLogsIntoCommandRegex:null,s_showClusterOptionsCommandRegex:null,s_operationsCommandRegex:null,s_resultsCommandRegex:null,s_orchestrationCommandRegex:null,s_orchestrationTaskHubCommandRegex:null,s_showAccountCommandRegex:null,s_moveAccountCommandRegex:null,s_fromServiceKeywordRegex:null,s_moveDatabaseFromServiceCommandRegex:null,s_moveAccountSubscriptionCommandRegex:null,s_moveServiceConfigurationCommandRegex:null,s_suspendTargetServiceCommandRegex:null,s_showTargetServiceCommandRegex:null,s_keysCommandRegex:null,s_alterServiceStorageAccountsCommandRegex:null,s_toKeywordCommandRegex:null,s_storageAccountsKeywordRegex:null,s_regenerateServiceKeywordRegex:null,s_keyTypesKeywordRegex:null,s_alterServicePackagesConfigurationCommandRegex:null,s_fromAccountKeywordRegex:null,s_showCmServiceCommandRegex:null,s_showClusterClientRegex:null,s_showClusterClientSubscriptionCommandRegex:null,s_showClusterClusterNamePrincipalCommandRegex:null,s_showAuditLogCommandRegex:null,s_showAuditLogFromCommandRegex:null,s_configurationKeywordRegex:null,s_showRegionsByHostersKeywordRegex:null,s_showTridentCmServicesKeywordRegex:null,s_showPrincipalRolesCommandRegex:null,s_showAccountsKeywordRegex:null,s_dmServiceAddKeywordRegex:null,s_dmServiceAlterKeywordRegex:null,s_dmServiceAlterSettingsRegex:null,s_dmServiceDropKeywordRegex:null,s_dmServiceShowKeywordRegex:null,s_configurationPropertySetKeywordRegex:null,s_toStringKeywordRegex:null,s_configurationPropertyWithConsentKeywordRegex:null,s_addKeywordRegex:null,s_configurationPropertyDropKeywordRegex:null,s_accountRenameOperationsKeywordRegex:null,s_accountAlterOperationsKeywordRegex:null,s_accountSubscriptionAlterKeywordRegex:null,s_accountAddOperationsKeywordRegex:null,s_accountRemoveOperationsKeywordRegex:null,s_accountSetOperationsKeywordRegex:null,s_serviceAlterOperationsKeywordRegex:null,s_serviceRotateOperationsKeywordRegex:null,s_servicePublishOperationsKeywordRegex:null,s_serviceUnPublishOperationsKeywordRegex:null,s_serviceUnPublishFromRegistryOperationsKeywordRegex:null,s_inServiceKeywordRegex:null,s_databaseKeywordRegex:null,s_createDatabaseCommandRegex:null,s_createServiceCommandRegex:null,s_createExternalCommandRegex:null,s_accountNamesCommandRegex:null,s_servicesNamesToAppendOptionsCommandRegex:null,s_rotateServicesNamesToAppendOptionsCommandRegex:null,s_moveServicesNamesToAppendOptionsCommandRegex:null,s_alterServicesNamesToAppendOptionsCommandRegex:null,s_publishServicesNamesToAppendOptionsCommandRegex:null,s_unPublishServicesNamesToAppendOptionsCommandRegex:null,s_removeServicesNamesToAppendOptionsCommandRegex:null,s_syncKustoPoolServicesNamesToAppendOptionsCommandRegex:null,s_servicesNamesCommandRegex:null,s_withPropertiesSuffixRegex:null,s_withEventHubPropertiesSuffixRegex:null,s_withCosmosDbDataConnectionPropertiesSuffixRegex:null,s_addServiceServiceNameRegex:null,s_databaseOrAccountNameMetadataKeywordRegex:null,s_metadataKeywordRegex:null,s_summaryOrMetadataKeywordRegex:null,s_summaryKeywordRegex:null,s_versionKeywordRegex:null,s_cloudCreateCommandRegex:null,s_regionCreateCommandRegex:null,s_serviceInstallCommandRegex:null,s_serviceDeployCommandRegex:null,s_serviceReinstallCommandRegex:null,s_serviceUninstallCommandRegex:null,s_updateCommandRegex:null,s_updateServiceCommandRegex:null,s_checkinCommandRegex:null,s_serviceMigrateCommandRegex:null,s_clusterMigrateCommandRegex:null,s_addClusterPrincipalsCommandRegex:null,s_addClusterJitPrincipalCommandRegex:null,s_dropClusterJitPrincipalCommandRegex:null,s_setClusterPrincipalsCommandRegex:null,s_dropClusterPrincipalsCommandRegex:null,s_setClusterPrincipalsNoneCommandRegex:null,s_dropAccountPrincipalsCommandRegex:null,s_alterServiceConfigurationDetailsKeywordRegex:null,s_alterServiceConfigurationPropertiesKeywordRegex:null,s_loadBalancerKeywordRegex:null,s_yieldPipeOptionRegex:null,s_cancelServiceOperationRegex:null,s_showSubscriptionCommandRegex:null,s_showServiceSecurityRulesOperationRegex:null,s_notifyCommandRegex:null,s_setSkuAvailabilityRegex:null,s_setSynapseMockedSettingsRegex:null,s_setSkuAvailabilityValuesRegex:null,s_setSkuAvailabilityWithOptionsRegex:null,s_sharedIdentityRegex:null,s_setRegionVisibilityWithOptionsRegex:null,s_registerFeatureRegex:null,s_createResourcesForBillingServiceRegex:null,s_putClientSubscriptionsNotificationRegex:null,s_setSynapseMockedRbacRegex:null,s_syncKustoPoolCommandRegex:null,s_tridentServiceShowByResourceIdCommandRegex:null,s_showResourceCommandRegex:null,s_showResourceMetricsCommandPropertiesSuffixRegex:null,s_showResourceMetricsCommandRegex:null,s_publishAzureMonitorManifestCommandRegex:null,s_checkinAzureMonitorManifestCommandRegex:null,s_migrateVirtualClusterCommandRegex:null,s_migrateVirtualClusterEventHubStorageCommandRegex:null,s_scaleTridentClusterCommandRegex:null,s_alterVirtualClusterLimitsLevelCommandRegex:null,s_addServiceToProbePoolCommandRegex:null,s_commandColumnNamesAfterPipeRegex:null,s_commandContext_Show:null,s_twoOrMoreSpacesRegex:null,s_removeStringLiteralsRegex:null,s_removeEntityNamesLiteralsRegex:null,s_removeServiceNameRegex:null,s_reservedServiceSuffixesRegex:null,s_removeAccountNameRegex:null,s_removeDatabaseNameRegex:null,s_moveServiceToMaintenanceModeRegex:null,s_cancelServiceMaintenanceModeRegex:null,s_syncKeyVaultCertificateRegex:null,s_KeyVaultRotateCertificateRegex:null,s_scaleUnallocatedVirtuaClustersPoolRegex:null,s_allocateVirtualClusterCommandOptions:null,s_adminOperationOptions:null,s_operatorOptions:null,s_showCommandOptions:null,s_updateCommandOptions:null,s_updateServiceCommandOptions:null,s_suspendServiceCommandOptions:null,s_showFabricCommandOptions:null,s_rotateCommandOptions:null,s_registerCommandOptions:null,s_putCommandOptions:null,s_listCommandOptions:null,s_listKustoPoolsServicesPropertiesSuffixOptions:null,s_syncCommandOptions:null,s_checkinCommandOptions:null,s_showRegionsByHostersOptions:null,s_scaleCommandOptions:null,s_showTridentCmServicesOptions:null,s_moveServiceToMaintenanceModeOptions:null,s_cancelServiceMaintenanceModeOptions:null,s_generateCommandOptions:null,s_publishCommandOptions:null,s_unPublishCommandOptions:null,s_uninstallCommandOptions:null,s_alterCommandOptions:null,s_addCommandOptions:null,s_removeCommandOptions:null,s_dropCommandOptions:null,s_setCommandOptions:null,s_createCommandOptions:null,s_createExternalCommandOptions:null,s_createDatabsaeScriptInServiceCommandOption:null,s_deleteCommandOptions:null,s_moveCommandOptions:null,s_migrateCommandOptions:null,s_exportCommandOptions:null,s_detachCommandOptions:null,s_pccodeKeywordOptions:null,s_checkCommandOptions:null,s_serviceKeywordOptions:null,s_activationKeywordOptions:null,s_ingestLogsIntoCommandOptions:null,s_showClusterKeywordOptions:null,s_operationsKeywordOptions:null,s_orchestrationKeywordOptions:null,s_showPrincipalRolesKeywordOptions:null,s_showServiceCommandOptions:null,s_alterServiceCommandOptions:null,s_removeServiceCommandOptions:null,s_showCmServiceCommandOptions:null,s_showClusterClusterNameOptions:null,s_showClusterClientSubscriptionOptions:null,s_showAccountCommandOptions:null,s_moveAccountCommandOptions:null,s_moveAccountSubscriptionCommandOptions:null,s_showTargetServiceCommandOptions:null,s_fromKeywordOptions:null,s_alterServiceConfigurationKeywordOptions:null,s_toKeywordOptions:null,s_moveServiceOptions:null,s_suspendServiceAdminNodeOptions:null,s_addSetDropPrincipalsKeywordOptions:null,s_addDropJitPrincipalsKeywordOptions:null,s_dropAccountPrincipalsKeywordOptions:null,s_setNoneKeywordOptions:null,s_showServicesCompletionKeywordsOptions:null,s_showAccountsKeywordOptions:null,s_dmServiceAddKeywordOptions:null,s_dmServiceShowKeywordOptions:null,s_dmServiceAlterKeywordOptions:null,s_dmServiceDropKeywordOptions:null,s_keysKeywordOptions:null,s_keyTypesKeywordOptions:null,s_notifyKeywordOptions:null,s_executeCommandOptions:null,s_executeJobCommandOptions:null,s_serviceConfigurationPropertyDropKeywordOptions:null,s_serviceConfigurationPropertySetKeywordOptions:null,s_withConsentKeywordOptions:null,s_storageAccountsKeywordOptions:null,s_serviceRegenerateKeywordOptions:null,s_accountAlterOperationsOptions:null,s_accountRenameOperationsOptions:null,s_accountAddOperationsOptions:null,s_accountRemoveOperationsOptions:null,s_accountSetOperationsOptions:null,s_serviceAlterOperationsOptions:null,s_serviceRotateOperationsOptions:null,s_servicePublishOperationsOptions:null,s_serviceUnPublishOperationsOptions:null,s_inServiceKeywordOptions:null,s_addServiceServiceNameOptions:null,s_metadataKeywordOptions:null,s_summaryKeywordOptions:null,s_summaryOrMetadataKeywordOptions:null,s_versionKeywordOptions:null,s_withPropertiesSuffixOptions:null,s_alterServiceStorageAccountsSuffixOptions:null,s_withEventHubProperties:null,s_withCosmosDbDataConnectionProperties:null,s_withSkuAvailabilityProperties:null,s_withAlterVirtualClusterLimitsLevelProperties:null,s_regionVisibilityProperties:null,s_installCommandOptions:null,s_uninstallRunnersSyntheticsCommandOptions:null,s_migrateServiceCommandOptions:null,s_migrateClusterCommandOptions:null,s_fromServiceKeywordOptions:null,s_byResourceIdKeywordOptions:null,s_toServiceKeywordOptions:null,s_createDatabaseCommandOptions:null,s_createServiceCommandOptions:null,s_addKeywordOptions:null,s_alterServiceConfigurationPropertiesOptions:null,s_alterServiceConfigurationCommandOptions:null,s_loadBalancerKeywordOptions:null,s_probePoolKeywordOptions:null,s_operationKeywordOptions:null,s_showSubscriptionCommandOptions:null,s_showServiceSecurityRulesCommandOptions:null,s_trueFalseKeywordOptions:null,s_skuAvailabilityKeywordOptions:null,s_exportPackageForOptions:null,s_exportPackageForServiceTypeOptions:null,s_sharedIdentityOptions:null,s_registerFeatureCommandOptions:null,s_putClientSubscriptionsNotficationCommandOptions:null,s_syncKustoPoolCommandOptions:null,s_showResourceSuffixOptions:null,s_showResourceMetricsCommandPropertiesSuffixOptions:null,s_showAzureMonitorManifestCommandPropertiesSuffixOptions:null,s_publishAzureMonitorManifestCommandPropertiesSuffixOptions:null,s_checkinAzureMonitorManifestCommandPropertiesSuffixOptions:null,s_migrateVirtualClusterCommandSuffixOptions:null,s_scaleTridentClusterCommandSuffix:null,s_singleParamFunctions:null,s_twoParamFunctions:null,s_threeParamFunctions:null,s_manyParamFunctions:null},ctors:{init:function(){this.s_lineWithDotBeginningRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_allocateVirtualClusterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.allocate\\s+(trident\\s+)?virtual\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_suspendCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.suspend\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showFabricCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+fabric\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_rotateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.rotate\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_generateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.generate\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_publishCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.publish\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_unPublishCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.unpublish\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_afterPipeRegex=new System.Text.RegularExpressions.Regex.ctor("\\|\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.remove\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_deleteCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_detachCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.detach\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_checkCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.check\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_migrateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.migrate\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_uninstallCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.uninstall\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_registerCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.register\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_putCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.put\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_listCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.list\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_listKustoPoolsServicesCommandPropertiesSuffixRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.list\\s+kustopools\\s+services\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_syncCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.sync\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_exportCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.export\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_exportPackageForOptionsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.export\\s+package\\s+for\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_exportPackageForProductVersionOptionsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.export\\s+package\\s+for\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_executeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.execute\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_executeJobCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.execute\\s+job\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_activationCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(resume|suspend)(\\s+trident)?\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(reallocate|restart|reimage|rebuild|stop|install|deploy|reinstall|recycle|ingest|migrate|cancel|regenerate)\\s+$|^\\s*\\.ingest\\s+service\\s+\\S+\\s+storage\\s+logs\\s+into\\s$|^\\s*\\.show\\s+cm\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_ingestLogsIntoCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.ingest\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operationsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(running|completed|failed)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_resultsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(trident\\s+)?operations\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_orchestrationCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+orchestration\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_orchestrationTaskHubCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+orchestration\\s+\\S+\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showAccountCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+account\\s+\\[.*?\\]\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveAccountCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+account\\s+\\[[^\\]]*?\\]\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_fromServiceKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+database\\s+\\S+\\s+$|^\\s*\\.create\\s+follower\\s+database\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+$|^\\s*\\.create\\s+trident\\s+follower\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveDatabaseFromServiceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+database\\s+\\S+\\s+from\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveAccountSubscriptionCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+account\\s+(\\S+|\\[.*?\\])\\s+subscription\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveServiceConfigurationCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_suspendTargetServiceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.suspend\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showTargetServiceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+service\\s(?!versions|model|(packages configuration)\\b)\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_keysCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+$|^\\s*\\.regenerate\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+(primary|secondary)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterServiceStorageAccountsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_toKeywordCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+keys\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_storageAccountsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.recycle\\s+service\\s+\\S+\\s+$|^\\s*\\.add\\s+service\\s+\\S+\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_regenerateServiceKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.regenerate\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_keyTypesKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.regenerate\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+$|^\\s*\\.alter\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+keys\\s+to\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterServicePackagesConfigurationCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+service\\s+((?!packages)\\S+|\\[.*?\\])\\s+configuration\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_fromAccountKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+account\\s+(\\S+|\\[.*?\\])\\s+configuration\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showCmServiceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cm\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterClientRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+((?!monitoring\\b)(?!principals\\b)\\S+|\\[.*?\\])\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterClientSubscriptionCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+(\\S+|\\[.*?\\])\\s+client\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterClusterNamePrincipalCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+(\\S+|\\[.*?\\])\\s+principal\\s+(\\S+|\\[.*?\\])\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showAuditLogCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(service|account)\\s+\\S+\\s+audit\\s+log\\s+$|^\\s*\\.show\\s+audit\\s+log\\s+by\\s+clientactivityid\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showAuditLogFromCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(service|account)\\s+\\S+\\s+audit\\s+log\\s+from\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_configurationKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(trident\\s+)?services\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showRegionsByHostersKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+regions\\s+by\\s+hosters\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showTridentCmServicesKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+trident\\s+cm\\s+services+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showPrincipalRolesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+principal\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showAccountsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+accounts\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dmServiceAddKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+((trident\\s+)?virtual\\s+)?dm\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dmServiceAlterKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+dm\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dmServiceAlterSettingsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+dm\\s+service\\s+\\S+\\s+settings\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dmServiceDropKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+(trident\\s+virtual\\s+)?dm\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dmServiceShowKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(trident\\s+virtual\\s+|virtual\\s+)?dm\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_configurationPropertySetKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_toStringKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+service\\s+\\S+\\s+\\S+\\s+$|^\\s*\\.set\\s+account\\s+\\[.*?\\]\\s+(division|servicetree)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_configurationPropertyWithConsentKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+service\\s+\\S+\\s+(?i)InstancesCount\\s+(auto|to\\s+\\S+)\\s+$|^\\s*\\.set\\s+service\\s+\\S+\\s+(?i)VmSize\\s+to\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+service\\s+\\S+\\s+NumberOfDatabaseStorageAccounts\\s+to\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_configurationPropertyDropKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountRenameOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.rename\\s+account\\s+(\\S+|\\[.*?\\])\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountAlterOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+account\\s+\\[.*?\\]\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountSubscriptionAlterKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+account\\s+\\[.*?\\]\\s+subscription\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountAddOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+account\\s+\\[.*?\\]\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountRemoveOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.remove\\s+account\\s+\\[.*?\\]\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountSetOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+account\\s+\\[.*?\\]\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceAlterOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceRotateOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.rotate\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_servicePublishOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.publish\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceUnPublishOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.unpublish\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceUnPublishFromRegistryOperationsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.unpublish\\s+service\\s+\\S+\\s+from\\s+registry\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_inServiceKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+(trident\\s+)?database\\s+\\S+\\s+$|^\\s*\\.create\\s+(trident\\s+)?database\\s+\\S+\\s+ifNotExists\\s+$|^\\s*\\.detach\\s+(trident\\s+)?follower\\s+database\\s+\\S+\\s+$|^\\s*\\.create\\s+follower\\s+database\\s+\\S+\\s+$|^\\s*\\.create\\s+database\\s+script\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_databaseKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+database\\s+script\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+(trident\\s+)?database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createServiceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createExternalCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+external\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_accountNamesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(add|remove|alter|rename|show|detach|move|set|drop)\\s+account\\s+$|^\\s*\\.move\\s+account\\s+(\\S+|\\[.*?\\])\\s+subscription\\s+\\S+\\s+to\\s+account\\s+$|^\\s*\\.rename\\s+account\\s+(\\S+|\\[.*?\\])\\s+to\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_servicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_rotateServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.rotate\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_publishServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.publish\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_unPublishServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.unpublish\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.remove\\s+service\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_syncKustoPoolServicesNamesToAppendOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.sync\\s+kustopool\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_servicesNamesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+(trident\\s+)?database\\s+\\S+\\s+in\\s+service\\s+$|^\\s*\\.create\\s+(trident\\s+)?database\\s+\\S+\\s+(ifNotExists\\s+)?in\\s+service\\s+$|^\\s*\\.drop\\s+trident\\s+database\\s+\\S+\\s+policy\\s+in\\s+service\\s+$|^\\s*\\.update\\s+trident\\s+database\\s+\\S+\\s+policy\\s+in\\s+service\\s+$|^\\s*\\.create\\s+follower\\s+database\\s+\\S+\\s+in\\s+service\\s+$|^\\s*\\.create\\s+follower\\s+database\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+from\\s+service\\s+$|^\\s*\\.create\\s+trident\\s+follower\\s+database\\s+\\S+\\s+from\\s+service\\s+$|^\\s*\\.detach\\s+(trident\\s+)?follower\\s+database\\s+\\S+\\s+in\\s+service\\s+$|^\\s*\\.(reallocate|restart|reimage|rebuild|stop|uninstall|install|deploy|reinstall|recycle|set|add|ingest|drop|migrate|cancel|regenerate|update)\\s+service\\s+$|^\\s*\\.((resume|suspend)(\\s+trident)?|migrate)\\s+cluster\\s+$|^\\s*\\.delete\\s+(service|cluster|virtual\\s+cluster|trident\\s+(virtual|physical)\\s+cluster)\\s+$|^\\s*\\.(add|drop|alter|show)\\s+dm\\s+service\\s+$|^\\s*\\.(add|drop|show)\\s+trident\\s+service\\s+$|^\\s*\\.ingest\\s+service\\s+\\S+\\s+storage\\s+logs\\s+into\\s+service\\s+$|^\\s*\\.move\\s+database\\s+\\S+\\s+from\\s+service\\s+$|^\\s*\\.move\\s+database\\s+\\S+\\s+from\\s+service\\s+\\S+\\s+to\\s+service\\s+$|^\\s*\\.create\\s+database\\s+script\\s+\\S+\\s+in\\s+service\\s+$|^\\s*\\.move\\s+service\\s+$|^\\s*\\.sync\\s+kustopool\\s+$|^\\s*\\.migrate\\s+cluster\\s+(to\\s+)?$|^\\s*\\.scale\\s+trident\\s+cluster\\s+$|^\\s*\\.update\\s+trident\\s+cluster\\s+$|^\\s*\\.alter\\s+virtual\\s+cluster\\s+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_withPropertiesSuffixRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+(trident\\s+)?database\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+$|^\\s*\\.show\\s+trident\\s+cm\\s+services\\s+$|^\\s*\\.create\\s+(trident\\s+)?database\\s+\\S+\\s+(ifNotExists\\s+)?in\\s+service\\s+\\S+\\s+$|^\\s*\\.drop\\s+trident\\s+database\\s+\\S+\\s+policy\\s+in\\s+service\\s+\\S+\\s+$|^\\s*\\.update\\s+trident\\s+database\\s+\\S+\\s+policy\\s+in\\s+service\\s+\\S+\\s+$|^\\s*\\.detach\\s+(trident\\s+)?follower\\s+database\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+$|^\\s*\\.(delete|reallocate|restart|rebuild|reimage|reinstall)\\s+service\\s+\\S+\\s+$|^\\s*\\.create\\s+service\\s+\\S+\\s+ifNotExists\\s+$|^\\s*\\.create\\s+external\\s+cluster\\s+\\S+\\s+$|^\\s*\\.create\\s+synapse\\s+cluster\\s+\\S+\\s+$|^\\s*\\.delete\\s+cluster\\s+\\S+\\s+$|^\\s*\\.delete\\s+virtual\\s+cluster\\s+\\S+\\s+$|^\\s*\\.delete\\s+trident\\s+(virtual|physical)\\s+cluster\\s+\\S+\\s+$|^\\s*\\.(add|drop)\\s+((trident\\s+)?virtual\\s+)?dm\\s+service\\s+\\S+\\s+(data obtainer|storage accounts)\\s+$|^\\s*\\.alter\\s+dm\\s+service\\s+\\S+\\s+storage\\s+account\\s+\\S+\\s+$|^\\s*\\.alter\\s+dm\\s+service\\s+\\S+\\s+eventhub\\s+ingestion\\s+source\\s+\\S+\\s+$|^\\s*\\.alter\\s+service\\s+packages\\s+configuration\\s+$|^\\s*\\.remove\\s+service\\s+package\\s+configuration\\s+$|^\\s*\\.alter\\s+sandbox\\s+packages\\s+configuration\\s+$|^\\s*\\.add\\s+account\\s\\[.*?\\]\\s+contact\\s+$|^\\s*\\.add\\s+service\\s+\\S+\\s+database\\s+\\S+\\s+storage\\s+accounts\\s+$|^\\s*\\.alter\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+$|^\\s*\\.ingest\\s+service\\s+\\S+\\s+storage\\s+logs\\s+into\\s+service\\s+\\S+\\s+$|^\\s*\\.ingest\\s+service\\s+\\S+\\s+dsc\\s+logs\\s+$|^\\s*\\.install\\s+service\\s+\\S+\\s+runners\\s+$|^\\s*\\.install\\s+service\\s+\\S+\\s+synthetics\\s+$|^\\s*\\.uninstall\\s+service\\s+\\S+\\s+synthetics\\s+$|^\\s*\\.update\\s+synthetics\\s+packages\\s+$|^\\s*\\.show\\s+synthetics\\s+information\\s+$|^\\s*\\.alter\\s+synthetics\\s+information\\s+$|^\\s*\\.migrate\\s+service\\s+\\S+\\s+to\\s+(AzurePaas1|AzureVMSS)\\s+$|^\\s*\\.move\\s+database\\s+\\S+\\s+from\\s+service\\s+\\S+\\s+to\\s+service\\s+\\S+\\s+$|^\\s*\\.add\\s+cluster\\s+((?!admins\\b)(?!ops\\b)(?!users\\b)(?!viewers\\b)(?!jitmanagers\\b)\\S+|\\S)\\s+principal\\s+\\S+\\s$|^\\s*\\.drop\\s+cluster\\s+((?!admins\\b)(?!ops\\b)(?!users\\b)(?!viewers\\b)(?!jitmanagers\\b)\\S+|\\S)\\s+principal\\s+\\S+\\s$|^\\s*\\.execute\\s+job\\s+\\S+\\s+$|^\\s*\\.add\\s+region\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.remove\\s+region\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.add\\s+service\\s+\\S+\\s+storage\\s+accounts\\s+$|^\\s*\\.add\\s+subscriptions\\s+AutomaticOSUpgradePolicy\\s+$|^\\s*\\.create\\s+follower\\s+database\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+from\\s+service\\s+\\S+\\s$|^\\s*\\.create\\s+trident\\s+follower\\s+database\\s+\\S+\\s+from\\s+service\\s+\\S+\\s$|^\\s*\\.alter\\s+region\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.alter\\s+keyvault\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.add\\s+client\\s+subscriptions\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.alter\\s+client\\s+subscriptions\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.remove\\s+client\\s+subscriptions\\s+(\\S+|\\[.*?\\])\\s$|^\\s*\\.create\\s+database\\s+script\\s+\\S+\\s+in\\s+service\\s+\\S+\\s+database\\s+\\S+\\s+$|^\\s*\\.scale\\s+unallocated\\s+virtual\\s+clusters\\s+pool\\s+to\\s+\\S+\\s+$|^\\s*\\.migrate\\s+cluster\\s+\\S+\\s+$|^\\s*\\.update\\s+trident\\s+cluster\\s+\\S+\\s+$|^\\s*\\.allocate\\s+virtual\\s+cluster\\s+$|^\\s*\\.alter\\s+virtual\\s+cluster\\s+\\S+\\s+limits\\s+level\\s+$|^\\s*\\.create\\s+database\\s+\\S+\\s+follower\\s+invitation\\s+$|^\\s*\\.validate\\s+database\\s+\\S+\\s+follower\\s+invitation\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_withEventHubPropertiesSuffixRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+((trident\\s+)?virtual\\s+)?dm\\s+service\\s+\\S+\\s+eventhub\\s+(obtainer|ingestion source)\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_withCosmosDbDataConnectionPropertiesSuffixRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+dm\\s+service\\s+\\S+\\s+cosmosdb\\s+data connection\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addServiceServiceNameRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_databaseOrAccountNameMetadataKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(trident\\s+)?service\\s+\\S+\\s+(database|account)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_metadataKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+service\\s+\\S+\\s+account\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_summaryOrMetadataKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(trident\\s+)?service\\s+\\S+\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_summaryKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(trident\\s+)?service\\s+\\S+\\s+databases\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_versionKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+service\\s+\\S+\\s+(database|account)\\s+\\S+\\s+metadata\\s+$|^\\s*\\.show\\s+service\\s+\\S+\\s+metadata\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_cloudCreateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+cloud\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_regionCreateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+region\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceInstallCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.install\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceDeployCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.deploy\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceReinstallCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.reinstall\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceUninstallCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.uninstall\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_updateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.update\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_updateServiceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.update\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_checkinCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.check in\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_serviceMigrateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.migrate\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clusterMigrateCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.migrate\\s+cluster\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addClusterPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addClusterJitPrincipalCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+cluster\\s+((?!admins\\b)(?!ops\\b)(?!users\\b)(?!viewers\\b)(?!jitmanagers\\b)\\S+|\\S)\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropClusterJitPrincipalCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+cluster\\s+((?!admins\\b)(?!ops\\b)(?!users\\b)(?!viewers\\b)(?!jitmanagers\\b)\\S+|\\S)\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropClusterPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterPrincipalsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+(admins|ops|users|viewers)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropAccountPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+account\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterServiceConfigurationDetailsKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+service\\s+((?!packages)\\S+|\\[.*?\\])\\s+configuration\\s+(details\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterServiceConfigurationPropertiesKeywordRegex=new System.Text.RegularExpressions.Regex.ctor(`^\\s*\\.alter\\s+service\\s+(\\S+|\\[.*?\\])\\s+configuration\\s+(details\\s+)?\\((\\s*\\S+\\s*=\\s*['"].*?['"]\\s*)?\\s*(,(\\s*\\S+\\s*=\\s*['"].*?['"]\\s*))*\\)\\s+$`,Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_loadBalancerKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+service\\s+\\S+\\s+to\\s+$|^\\s*\\.drop\\s+service\\s+\\S+\\s+from\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_yieldPipeOptionRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+((ame|corp)\\s+)?resources\\s+$|^\\s*\\.show\\s+(account|subscription|service|tenant)\\s+\\S+\\s+((ame|corp)\\s+)?resources\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_cancelServiceOperationRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.cancel\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showSubscriptionCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+subscription\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showServiceSecurityRulesOperationRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+service\\s+\\S+\\s+securityrules\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_notifyCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.notify\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setSkuAvailabilityRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+sku\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setSynapseMockedSettingsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+synapse\\s+mock\\s+settings\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setSkuAvailabilityValuesRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+sku\\s+\\S+\\s+availability\\s+to\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setSkuAvailabilityWithOptionsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+sku\\s+\\S+\\s+availability\\s+to\\s+'(true|false)'\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_sharedIdentityRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*(\\.assign|\\.remove)\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setRegionVisibilityWithOptionsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+region\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_registerFeatureRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.register\\s+feature\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createResourcesForBillingServiceRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+resources\\s+for\\s+billing\\s+service\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_putClientSubscriptionsNotificationRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.put\\s+client\\s+subscriptions\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setSynapseMockedRbacRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+synapse\\s+mock\\s+rbac\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_syncKustoPoolCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.sync\\s+kustopool\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_tridentServiceShowByResourceIdCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+trident\\s+services\\s+configuration\\s+by\\s+tenantId\\s+\\S+\\s+(by\\s+capacityId\\s+\\S+\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showResourceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+resource\\s+(\\S+|\\[.*?\\])\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showResourceMetricsCommandPropertiesSuffixRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+resource\\s+\\S+\\s+metrics\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showResourceMetricsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+azure\\s+monitor\\s+manifest\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_publishAzureMonitorManifestCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.publish\\s+azure\\s+monitor\\s+manifest\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_checkinAzureMonitorManifestCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.check in\\s+azure\\s+monitor\\s+manifest\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_migrateVirtualClusterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.migrate\\s+virtual\\s+cluster\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_migrateVirtualClusterEventHubStorageCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.migrate\\s+virtual\\s+dm\\s+service\\s+\\S+\\s+eventhub\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_scaleTridentClusterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.scale\\s+trident\\s+cluster\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterVirtualClusterLimitsLevelCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+virtual\\s+cluster\\s+\\S+\\s+limits\\s+level\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addServiceToProbePoolCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+service\\s+\\S+\\s+to\\s+$|^\\s*\\.drop\\s+service\\s+\\S+\\s+from\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandColumnNamesAfterPipeRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(where)\\s+$|(^|\\|\\s*?)(where)\\s+[^\\|]+(and|or)\\s+$|(^|\\|\\s*?)project\\s+$|(^|\\|\\s*?)project\\s+[^\\|]*,\\s+$|(^|\\|\\s*?)project-away\\s+$|(^|\\|\\s*?)project-away\\s+[^\\|]*,\\s+$|(^|\\|\\s*?)project-rename\\s+[^\\|]*?\\=\\s*$|(^|\\|\\s*?)project-rename\\s+[^\\|]*,\\s+[^\\|]*?\\=\\s*$|(^|\\|\\s*?)scale\\s+[^\\|]*?[\\=\\-\\+\\/\\*]\\s*$|(^|\\|\\s*?)project\\s+[^\\|]*?\\=\\s*$|\\b("+(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_singleParamFunctions||"")+"\\()\\s*$|(^|\\|\\s*?)summarize\\s+[^\\|]*?by\\s+$|(^|\\|\\s*?)summarize\\s+[^\\|]*\\)\\s*,\\s+$|(^|\\|\\s*?)summarize\\s+[^\\|]*?by\\s+(?!bin)[^\\|]+,\\s+$|(^|\\|\\s*?)distinct\\s+([^\\|]+,\\s+)?$|("+(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_twoParamFunctions||"")+"\\()\\s*$|("+(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_threeParamFunctions||"")+"\\()\\s*$|("+(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_manyParamFunctions||"")+"\\()\\s*$|(^|\\|\\s*?)(top\\s+\\d+|sort|order|reduce)\\s+by\\s+$|(^|\\|\\s*?)((top\\s+\\d+|sort|order).*?by.*?(asc|desc))[ ]+$|(^|\\|\\s*?)parse\\s+(kind\\s*=\\s*\\w+\\s*(flags\\s*=\\s*\\w+\\s*)?\\s*)?\\s*$|(^|\\|\\s*?)render\\s+timepivot\\s+by(.*,)?\\s+$|(^|\\|\\s*?).*top-hitters.*of\\s+$|(^|\\|\\s*?).*sample-distinct.*of\\s+$|(^|\\|\\s*?)(make-series\\s+[^\\|]*\\bon\\s+[^\\|]+\\s+in\\s+range\\b\\([^\\|]+,[^\\|]+\\,[^\\|]+\\))\\s+by\\s+$|(^|\\|\\s*?)(make-series\\s+[^\\|]*\\bon\\s+[^\\|]+\\s+in\\s+range\\b\\([^\\|]+,[^\\|]+\\,[^\\|]+\\))\\s+by\\s+[^\\|]+?,\\s+$|(^|\\|\\s*?)(make-series\\s+[^\\|]*\\bon\\b)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Show=new System.Text.RegularExpressions.Regex.ctor("^(?<Context>\\.show\\s+(\\w|\\[|\\]|\\-)+(\\s+(\\w|\\[|\\]|\\-)+)*)\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_twoOrMoreSpacesRegex=new System.Text.RegularExpressions.Regex.ctor("\\s\\s+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeStringLiteralsRegex=new System.Text.RegularExpressions.Regex.ctor(`('.*?'|".*?")`,Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeEntityNamesLiteralsRegex=new System.Text.RegularExpressions.Regex.ctor("(\\[.*?\\])",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeServiceNameRegex=new System.Text.RegularExpressions.Regex.ctor("service\\s+\\S+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_reservedServiceSuffixesRegex=new System.Text.RegularExpressions.Regex.ctor("service\\s+(versions|model|(packages\\s+configuration))",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeAccountNameRegex=new System.Text.RegularExpressions.Regex.ctor("account\\s+\\S+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeDatabaseNameRegex=new System.Text.RegularExpressions.Regex.ctor("database\\s+\\S+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveServiceToMaintenanceModeRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+service\\s+\\S+\\s+to\\s+maintenance\\s+$|^\\s*\\.move\\s+service\\s+\\S+\\s+database\\s+\\S+\\s+to\\s+maintenance\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_cancelServiceMaintenanceModeRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.cancel\\s+service\\s+\\S+\\s+maintenance\\s+$|^\\s*\\.cancel\\s+service\\s+\\S+\\s+database\\s+\\S+\\s+maintenance\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_syncKeyVaultCertificateRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.sync\\s+keyvault\\s+certificate\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_KeyVaultRotateCertificateRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.rotate\\s+keyvault\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_scaleUnallocatedVirtuaClustersPoolRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.scale\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_allocateVirtualClusterCommandOptions=System.Array.init([],System.String),this.s_adminOperationOptions=System.Array.init(["show","set","reallocate","restart","reimage","rebuild","create","alter","install","reinstall","add","remove","check","recycle","stop","uninstall","detach","delete","ingest","drop","move","migrate","suspend","resume","cancel","regenerate","notify","execute","generate","publish","unpublish","export","rotate","register","put","list","update","sync","check in"],System.String),this.s_operatorOptions=System.Array.init(["where","count","scale","limit","order","project","project-away","project-rename","sort","summarize","take","top","mv-expand"],System.String),this.s_showCommandOptions=System.Array.init(["service","services","account","accounts","operations","results","running","completed","failed","version","diagnostics","cluster","unallocated subscriptions","subscription","tenant","principal","resources","ame resources","corp resources","sandbox packages configuration","cm","skus availability","dm service","audit log by clientactivityid","regions","client subscriptions","sharedidentity","arm manifest","trident manifest","arm manifest publish","ephemeral registry","fabric","feature flags","clustermanagementsettings","cloud settings","synthetics information","synthetics pods","synthetics jobGroup","disk encryption set","orchestration","resource","leftover virtual services","trident services configuration by tenantId","azure monitor manifest","trident services","trident service","trident operations"],System.String),this.s_updateCommandOptions=System.Array.init(["synthetics packages","service","trident cluster"],System.String),this.s_updateServiceCommandOptions=System.Array.init(["in azure"],System.String),this.s_suspendServiceCommandOptions=System.Array.init(["service","cluster"],System.String),this.s_showFabricCommandOptions=System.Array.init(["locks","clocks","services","nodes"],System.String),this.s_rotateCommandOptions=System.Array.init(["service","keyvault"],System.String),this.s_registerCommandOptions=System.Array.init(["feature"],System.String),this.s_putCommandOptions=System.Array.init(["client subscriptions"],System.String),this.s_listCommandOptions=System.Array.init(["kustopools by workspace name","kustopools by workspace id","kustopools services"],System.String),this.s_listKustoPoolsServicesPropertiesSuffixOptions=System.Array.init(["with(AccountName='VALUE')","with(ServiceName='VALUE')","with(WorkspaceId='VALUE')","with(AccountName='VALUE', ServiceName='VALUE', WorkspaceId='VALUE')"],System.String),this.s_syncCommandOptions=System.Array.init(["kustopool","keyvault policy"],System.String),this.s_checkinCommandOptions=System.Array.init(["azure monitor manifest"],System.String),this.s_showRegionsByHostersOptions=System.Array.init(["regions","by","hosters"],System.String),this.s_scaleCommandOptions=System.Array.init(["unallocated virtual clusters pool to"],System.String),this.s_showTridentCmServicesOptions=System.Array.init(["trident","cm","services"],System.String),this.s_moveServiceToMaintenanceModeOptions=System.Array.init(["database"],System.String),this.s_cancelServiceMaintenanceModeOptions=System.Array.init(["database"],System.String),this.s_generateCommandOptions=System.Array.init(["arm manifest"],System.String),this.s_publishCommandOptions=System.Array.init(["arm manifest","service","azure monitor manifest","trident manifest"],System.String),this.s_unPublishCommandOptions=System.Array.init(["service"],System.String),this.s_uninstallCommandOptions=System.Array.init(["service","runners"],System.String),this.s_alterCommandOptions=System.Array.init(["service","dm service","account","client subscriptions","region","synthetics information","keyvault","virtual cluster"],System.String),this.s_addCommandOptions=System.Array.init(["account","service","trident service","dm service","unallocated subscription","cluster","region","client subscriptions","subscriptions AutomaticOSUpgradePolicy"],System.String),this.s_removeCommandOptions=System.Array.init(["account","unallocated subscription","region","service"],System.String),this.s_dropCommandOptions=System.Array.init(["dm service","service","cluster","account","trident service"],System.String),this.s_setCommandOptions=System.Array.init(["service","account","cluster","sku","region","synapse mock settings","synapse mock rbac"],System.String),this.s_createCommandOptions=System.Array.init(["database","trident database","service","account","external","synapse cluster","trident virtual cluster","trident physical cluster","resources for billing service","follower database","trident follower database","database script"],System.String),this.s_createExternalCommandOptions=System.Array.init(["cluster"],System.String),this.s_createDatabsaeScriptInServiceCommandOption=System.Array.init(["database"],System.String),this.s_deleteCommandOptions=System.Array.init(["virtual cluster","trident virtual cluster","trident physical cluster","cluster","database","service"],System.String),this.s_moveCommandOptions=System.Array.init(["account","database","service"],System.String),this.s_migrateCommandOptions=System.Array.init(["cluster","service","virtual dm service"],System.String),this.s_exportCommandOptions=System.Array.init(["service","package for"],System.String),this.s_detachCommandOptions=System.Array.init(["account","follower database","trident follower database"],System.String),this.s_pccodeKeywordOptions=System.Array.init(["pccode"],System.String),this.s_checkCommandOptions=System.Array.init(["service name availability","armaccess (KEY='VALUE')"],System.String),this.s_serviceKeywordOptions=System.Array.init(["service"],System.String),this.s_activationKeywordOptions=System.Array.init(["cluster"],System.String),this.s_ingestLogsIntoCommandOptions=System.Array.init(["storage logs into","dsc logs"],System.String),this.s_showClusterKeywordOptions=System.Array.init(["principals","monitoring"],System.String),this.s_operationsKeywordOptions=System.Array.init(["operations"],System.String),this.s_orchestrationKeywordOptions=System.Array.init(["settings","services","storageaccounts","synapse"],System.String),this.s_showPrincipalRolesKeywordOptions=System.Array.init(["roles","@'principal' roles"],System.String),this.s_showServiceCommandOptions=System.Array.init(["versions","model","packages configuration"],System.String),this.s_alterServiceCommandOptions=System.Array.init(["packages configuration"],System.String),this.s_removeServiceCommandOptions=System.Array.init(["package configuration","custom-image"],System.String),this.s_showCmServiceCommandOptions=System.Array.init(["in region"],System.String),this.s_showClusterClusterNameOptions=System.Array.init(["client","principal"],System.String),this.s_showClusterClientSubscriptionOptions=System.Array.init(["subscription"],System.String),this.s_showAccountCommandOptions=System.Array.init(["configuration","services","service configurations","subscriptions","principals","contacts","audit log","resources","ame resources","corp resources"],System.String),this.s_moveAccountCommandOptions=System.Array.init(["subscription"],System.String),this.s_moveAccountSubscriptionCommandOptions=System.Array.init(["to account"],System.String),this.s_showTargetServiceCommandOptions=System.Array.init(["configuration","fabriclocks","storage objects","storage account","storage accounts","database","databases","account","metadata","audit log","resources","ame resources","corp resources","securityrules","routetable","virtualnetwork","deployments","deployment","group ids","group id","diagnostic settings","custom-image"],System.String),this.s_fromKeywordOptions=System.Array.init(["from"],System.String),this.s_alterServiceConfigurationKeywordOptions=System.Array.init(["details","(KEY='VALUE')"],System.String),this.s_toKeywordOptions=System.Array.init(["to"],System.String),this.s_moveServiceOptions=System.Array.init(["to cm","engine to v3","to account","to maintenance"],System.String),this.s_suspendServiceAdminNodeOptions=System.Array.init(["admin node for"],System.String),this.s_addSetDropPrincipalsKeywordOptions=System.Array.init(["admins","ops","users","viewers","jitmanagers"],System.String),this.s_addDropJitPrincipalsKeywordOptions=System.Array.init(["principal"],System.String),this.s_dropAccountPrincipalsKeywordOptions=System.Array.init(["admins"],System.String),this.s_setNoneKeywordOptions=System.Array.init(["none"],System.String),this.s_showServicesCompletionKeywordsOptions=System.Array.init(["configuration","in nonregistered subscriptions","excludeVirtualClusters"],System.String),this.s_showAccountsKeywordOptions=System.Array.init(["configuration","subscriptions"],System.String),this.s_dmServiceAddKeywordOptions=System.Array.init(["data obtainer","storage accounts","eventhub ingestion source","cosmosdb data connection"],System.String),this.s_dmServiceShowKeywordOptions=System.Array.init(["cosmosdb data connections","data connections","eventhub ingestion sources","geneva ingestion sources","eventgrid ingestion sources"],System.String),this.s_dmServiceAlterKeywordOptions=System.Array.init(["storage account","eventhub ingestion source"],System.String),this.s_dmServiceDropKeywordOptions=System.Array.init(["data obtainer"],System.String),this.s_keysKeywordOptions=System.Array.init(["keys"],System.String),this.s_keyTypesKeywordOptions=System.Array.init(["primary","secondary"],System.String),this.s_notifyKeywordOptions=System.Array.init(["cm","synapse pubsub mock"],System.String),this.s_executeCommandOptions=System.Array.init(["job"],System.String),this.s_executeJobCommandOptions=System.Array.init(["runAll","addMissingZonesInClientSubscriptions","addResourceGroupToSAs","certificateRotationForSuspendedClusters","commitNames","fixEngineUri","forceSkuAvailabilityRefresh","migrateSAsToArm","populateAdditionalResourceSettings","regenerateArmDetails","resetRunCommand","setServicePrincipals","updateSAs","updateStorageAccountsSettings","servicePurgeAllDeletedSecrets","changeAdditionalResourceSettingsForAllKvc","alignedLimitsForAllKvc","cleanupClientSubscriptions"],System.String),this.s_serviceConfigurationPropertyDropKeywordOptions=System.Array.init(["AutoscaleSetting","FeatureFlags","from","TableFreshnessTestSettings","uncommitted changes"],System.String),this.s_serviceConfigurationPropertySetKeywordOptions=System.Array.init(["InstancesCount","InstancesCount auto","VmSize","AutoscaleSetting","DeploymentRing","DeploymentFreezeEnabled","DeploymentFreezeExpiresOn","FeatureFlags","MonitoringAccount","TableFreshnessTestSettings","Environment","CustomerType","Certificates","DoNotCreateIcmIncidents","DoNotDeploy","DoNotDeployRunners","AdditionalSubscriptions","AriaBridgeConfiguration","AutomaticallyDetachCorruptDatabases","CmSettings","DmSettings","EnableTracePush","SecuritySettings.EnableUnauthenticatedAccess","SecuritySettings.RequireMfa","JitStorageAccountName","KustoExplorerDownloadUri","KustoServiceSettings","ManagementCertificate","ScaleChangesRequireCustomerConsent","EnableSSE","NumberOfDatabaseStorageAccounts"],System.String),this.s_withConsentKeywordOptions=System.Array.init(["with consent"],System.String),this.s_storageAccountsKeywordOptions=System.Array.init(["storage accounts"],System.String),this.s_serviceRegenerateKeywordOptions=System.Array.init(["storage accounts","clusteridmap","arm details","storage accounts keys","storage accounts keys emergency"],System.String),this.s_accountAlterOperationsOptions=System.Array.init(["configuration","subscription","tenantId"],System.String),this.s_accountRenameOperationsOptions=System.Array.init(["to"],System.String),this.s_accountAddOperationsOptions=System.Array.init(["contact","admins"],System.String),this.s_accountRemoveOperationsOptions=System.Array.init(["contact"],System.String),this.s_accountSetOperationsOptions=System.Array.init(["division","admins","servicetree"],System.String),this.s_serviceAlterOperationsOptions=System.Array.init(["configuration","storage account","storage accounts","configuration details"],System.String),this.s_serviceRotateOperationsOptions=System.Array.init(["certificate"],System.String),this.s_servicePublishOperationsOptions=System.Array.init(["to registry"],System.String),this.s_serviceUnPublishOperationsOptions=System.Array.init(["from registry"],System.String),this.s_inServiceKeywordOptions=System.Array.init(["in service"],System.String),this.s_addServiceServiceNameOptions=System.Array.init(["database","to","storage accounts","custom-image"],System.String),this.s_metadataKeywordOptions=System.Array.init(["metadata"],System.String),this.s_summaryKeywordOptions=System.Array.init(["summary"],System.String),this.s_summaryOrMetadataKeywordOptions=System.Array.init(["summary","metadata"],System.String),this.s_versionKeywordOptions=System.Array.init(["version"],System.String),this.s_withPropertiesSuffixOptions=System.Array.init(["with(KEY='VALUE')"],System.String),this.s_alterServiceStorageAccountsSuffixOptions=System.Array.init(["with(KEY='VALUE')","keys"],System.String),this.s_withEventHubProperties=System.Array.init(["with(CreateEventHub='true', PartitionCount='VALUE', TargetDatabase='VALUE')","with(EventHubName='VALUE', EventHubNamespaceConnectionString='VALUE', EventHubConsumerGroupName='VALUE', TargetDatabase='VALUE')","with(IngestionSourceType='IotHub', EventHubName='VALUE', EventHubNamespaceConnectionString='VALUE', EventHubConsumerGroupName='VALUE', PartitionCount='VALUE', TargetDatabase='VALUE')"],System.String),this.s_withCosmosDbDataConnectionProperties=System.Array.init(["with(KustoTargetDatabase='VALUE', KustoTargetTable='VALUE', IngestionMappingReference='VALUE', ManagedIdentityResourceId='VALUE', CosmosDbAccountResourceId='VALUE', CosmosDbDatabase='VALUE', CosmosDbContainer='VALUE', RetrievalStartDate='VALUE')"],System.String),this.s_withSkuAvailabilityProperties=System.Array.init(["with(location='VALUE')"],System.String),this.s_withAlterVirtualClusterLimitsLevelProperties=System.Array.init(["with (limitsLevel='VALUE')"],System.String),this.s_regionVisibilityProperties=System.Array.init(["visibility true","visibility false except subscription"],System.String),this.s_installCommandOptions=System.Array.init(["with(KEY='VALUE')","runners","synthetics"],System.String),this.s_uninstallRunnersSyntheticsCommandOptions=System.Array.init(["with(KEY='VALUE')","runners","synthetics"],System.String),this.s_migrateServiceCommandOptions=System.Array.init(["to AzurePaas1","to AzureVMSS"],System.String),this.s_migrateClusterCommandOptions=System.Array.init(["to","to zonal"],System.String),this.s_fromServiceKeywordOptions=System.Array.init(["from service"],System.String),this.s_byResourceIdKeywordOptions=System.Array.init(["by capacityId"],System.String),this.s_toServiceKeywordOptions=System.Array.init(["to service"],System.String),this.s_createDatabaseCommandOptions=System.Array.init(["in service","ifNotExists"],System.String),this.s_createServiceCommandOptions=System.Array.init(["with(KEY='VALUE')","ifNotExists"],System.String),this.s_addKeywordOptions=System.Array.init(["add"],System.String),this.s_alterServiceConfigurationPropertiesOptions=System.Array.init(["(PropertyPath='PropertyValue')"],System.String),this.s_alterServiceConfigurationCommandOptions=System.Array.init(["with(KEY='VALUE')","applynow"],System.String),this.s_loadBalancerKeywordOptions=System.Array.init(["load balancer"],System.String),this.s_probePoolKeywordOptions=System.Array.init(["probe pool"],System.String),this.s_operationKeywordOptions=System.Array.init(["operation","maintenance"],System.String),this.s_showSubscriptionCommandOptions=System.Array.init(["resources","ame resources","corp resources"],System.String),this.s_showServiceSecurityRulesCommandOptions=System.Array.init(["inbound","outbound"],System.String),this.s_trueFalseKeywordOptions=System.Array.init(["'true'","'false'"],System.String),this.s_skuAvailabilityKeywordOptions=System.Array.init(["availability to"],System.String),this.s_exportPackageForOptions=System.Array.init(["Engine","DataManagement","ClusterManagement","Bridge","ResourceProvider","Billing","Gaia","HealthSuite","Flighting","SaasResourceProvider","Dashboard","ServiceProbe","Assistant"],System.String),this.s_exportPackageForServiceTypeOptions=System.Array.init(["ProductVersion=''"],System.String),this.s_sharedIdentityOptions=System.Array.init(["sharedidentity"],System.String),this.s_registerFeatureCommandOptions=System.Array.init(["subscriptions"],System.String),this.s_putClientSubscriptionsNotficationCommandOptions=System.Array.init(["notification"],System.String),this.s_syncKustoPoolCommandOptions=System.Array.init(["rbac"],System.String),this.s_showResourceSuffixOptions=System.Array.init(["metrics definitions","metrics"],System.String),this.s_showResourceMetricsCommandPropertiesSuffixOptions=System.Array.init(["definitions","with(aggregation='VALUE', metricnames='VALUE')"],System.String),this.s_showAzureMonitorManifestCommandPropertiesSuffixOptions=System.Array.init(["with(resourceTypeName='VALUE', environment='VALUE')"],System.String),this.s_publishAzureMonitorManifestCommandPropertiesSuffixOptions=System.Array.init(["with(resourceTypeName='VALUE', environment='VALUE', deploymentPhase='VALUE')"],System.String),this.s_checkinAzureMonitorManifestCommandPropertiesSuffixOptions=System.Array.init(["with(resourceTypeName='VALUE', environment='VALUE')"],System.String),this.s_migrateVirtualClusterCommandSuffixOptions=System.Array.init(["to dedicated storage accounts"],System.String),this.s_scaleTridentClusterCommandSuffix=System.Array.init(["to virtual","to physical"],System.String),this.s_singleParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationSingleParameterTokens)).join("\\(|"),this.s_twoParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.TwoParameterFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationTwoParametersTokens)).join("\\(|"),this.s_threeParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ThreeParameterFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationThreeParametersTokens)).join("\\(|"),this.s_manyParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ManyParametersFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationManyParametersTokens)).join("(\\(|[^\\)]+,)|")}},methods:{ResolveContextUsingRegex:function(e){if(System.String.startsWith(System.String.trimStart(e),"|",4))return null;var t=null,n=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_commandContext_Show.match(e);return n.getSuccess()&&(t=n.getGroups().getByName("Context").toString(),t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeStringLiteralsRegex.replace(t,""),t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeEntityNamesLiteralsRegex.replace(t,""),Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_reservedServiceSuffixesRegex.isMatch(t)||(t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeServiceNameRegex.replace(t,"service")),t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeAccountNameRegex.replace(t,"account"),t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeDatabaseNameRegex.replace(t,"database"),t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_twoOrMoreSpacesRegex.replace(t," ")),t}}},props:{ColumnMappingsToTables:null,OverridingColumnMapping:null},ctors:{$ctor1:function(e,t,n){n===void 0&&(n=null);var r;this.$initialize(),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ctor.call(this),this.Locker,(this.CommandRules==null||this.GeneralRules==null)&&this.LoadRulesUnderLock(e,t),this.CommandToolTips==null&&this.LoadCommandToolTips(),this.ContextConnection=(r=n,r??"")},ctor:function(e){var t;this.$initialize(),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ctor.call(this),this.ContextConnection=e.ContextConnection,this.Initialize(),e.Locker,Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.IntelliSenseRule,e.CommandRules)&&this.CommandRules.AddRange(e.CommandRules),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.IntelliSenseRule,e.GeneralRules)&&this.GeneralRules.AddRange(e.GeneralRules),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.CommandToolTips)&&(this.CommandToolTips=(t=Kusto.Data.IntelliSense.IntelliSenseCommandTip,System.Linq.Enumerable.from(e.CommandToolTips,t).toList(t))),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(Kusto.Data.IntelliSense.IntelliSenseRule,e.QueryParametersRules)&&this.QueryParametersRules.AddRange(e.QueryParametersRules)}},methods:{Initialize:function(){Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.prototype.Initialize.call(this),this.OverridingColumnMapping=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor},ResetState:function(){Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),this.OverridingColumnMapping)&&this.OverridingColumnMapping.clear()},AnalyzeCommand$1:function(e,t){var n=new Kusto.Data.IntelliSense.AnalyzedCommand;return n.Command=e,n.Context=this.ResolveContextFromCommand(e),n},AnalyzeCommand:function(e,t){var n;return n=new Kusto.Data.IntelliSense.AnalyzedCommand,n.Command=(e.Command||"")+(t||""),n.Context=Kusto.Data.IntelliSense.KustoCommandContext.Empty,n},UpdateProviderAvailableEntities:function(e,t){var n=new(System.Collections.Generic.List$1(System.String)).ctor,r=new Kusto.Data.IntelliSense.KustoCommandContext(t.Context);this.ColumnMappingsToTables.containsKey(r)&&(n=this.ColumnMappingsToTables.getItem(r)),this.OverridingColumnMapping.setItem(r,n)},Clone:function(){return new Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.ctor(this)},ResolveContextFromCommand:function(e){if(System.String.isNullOrWhiteSpace(e))return Kusto.Data.IntelliSense.KustoCommandContext.Empty;var t=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.ResolveContextUsingRegex(e);return System.String.isNullOrEmpty(t)?Kusto.Data.IntelliSense.KustoCommandContext.Empty:new Kusto.Data.IntelliSense.KustoCommandContext(t)},LoadRulesUnderLock:function(e,t){var n,r,s,a,i,l,o;this.CommandRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.GeneralRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.QueryParametersRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.OverridingColumnMapping=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.InitializeCommandColumnMappings(),s=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.KustoIntelliSenseAccountEntity).select(u.$.Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.f1).toList(System.String),s.Sort(),a=System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.KustoIntelliSenseServiceEntity).select(u.$.Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.f2).toList(System.String),a.Sort(),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceMoveToMaintenance,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveServiceToMaintenanceModeRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveServiceToMaintenanceModeOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceCancelMaintenance,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_cancelServiceMaintenanceModeRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_cancelServiceMaintenanceModeOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSyncKeyVaultCertificate,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_syncKeyVaultCertificateRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldRegionKeyVaultRotateCertificate,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_KeyVaultRotateCertificateRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithUnallocatedVirtualClustersPoolScaleSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_scaleUnallocatedVirtuaClustersPoolRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_scaleCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowRegionsByHosters,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showRegionsByHostersKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showRegionsByHostersOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showTridentCmServicesKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAdminCommandsOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_lineWithDotBeginningRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Command,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_adminOperationOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldOperatorsAfterPipe,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_afterPipeRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Operator,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_operatorOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceOrClusterKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_suspendCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_suspendServiceCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldsAllocateVirtualClusterOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_allocateVirtualClusterCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowFabricCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showFabricCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showFabricCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldRotateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_rotateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_rotateCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_rotateServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,a),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldRotateServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceRotateOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceRotateOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,a),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldGenerateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_generateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_generateCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPublishCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_publishCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_publishCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_publishServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,a),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPublishServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_servicePublishOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_servicePublishOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldUnPublishCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_unPublishCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_unPublishCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_unPublishServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,a),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldUnPublishServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceUnPublishOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceUnPublishOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceUnPublishFromRegistryOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAlterCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSetCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldRemoveCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAddServiceServiceNameOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addServiceServiceNameRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addServiceServiceNameOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMetadataKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_metadataKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_metadataKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSummaryOrMetadataKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_summaryOrMetadataKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_summaryOrMetadataKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSummaryKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_summaryKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_summaryKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDatabaseOrAccountMetadataKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_databaseOrAccountNameMetadataKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_metadataKeywordOptions),n.DefaultBeforeApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text="[] ",r),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" ",r.OffsetPosition=-11,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldVersionKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_versionKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_versionKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" ''",r.OffsetPosition=-1,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldFromServiceKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_fromServiceKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_fromServiceKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDatabaseMoveFromServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveDatabaseFromServiceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toServiceKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDatabaseCreateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createDatabaseCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createDatabaseCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceCreateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createServiceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createServiceCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAddCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDropCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dropCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dropCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMoveCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMigrateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldExportCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_exportCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_exportCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldExportPackageForOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_exportPackageForOptionsRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_exportPackageForOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldExportPackageForServiceTypeOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_exportPackageForProductVersionOptionsRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_exportPackageForServiceTypeOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text="",r.OffsetPosition=-1,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldOperationKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_cancelServiceOperationRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_operationKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldIngestLogsIntoKeywordsOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_ingestLogsIntoCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_ingestLogsIntoCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldCreateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldCreateExternalCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createExternalCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createExternalCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldExecuteCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_executeCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_executeCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldExecuteJobCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_executeJobCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_executeJobCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDeleteCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_deleteCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_deleteCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDetachCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_detachCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_detachCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldRegisterCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_registerCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_registerCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPutCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_putCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_putCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldListCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_listCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_listCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldListKustoPoolsServicesCommandPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_listKustoPoolsServicesCommandPropertiesSuffixRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_listKustoPoolsServicesPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSyncCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_syncCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_syncCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldCheckinCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_checkinCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_checkinCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_syncKustoPoolServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,a),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSyncKustoPoolRbacCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_syncKustoPoolCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_syncKustoPoolCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldTridentServiceShowByResourceId,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_tridentServiceShowByResourceIdCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_byResourceIdKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldCheckCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_checkCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_checkCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceOrClusterKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_activationCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_activationKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowClusterKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_operationsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_operationsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldResultsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_resultsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_operationsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldOrchestrationKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_orchestrationCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_orchestrationKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldOrchestrationTaskHubKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_orchestrationTaskHubCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowAccountCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAccountCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAccountCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMoveAccountCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveAccountCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveAccountCommandOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" @''",r.OffsetPosition=-1,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMoveAccountSubscriptionCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveAccountSubscriptionCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveAccountSubscriptionCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMoveServiceConfigurationCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveServiceConfigurationCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_moveServiceOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMoveServiceConfigurationCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_suspendTargetServiceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_suspendServiceAdminNodeOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldsAlterServiceConfigurationKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServicePackagesConfigurationCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceConfigurationKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAlterServiceConfigurationPropertiesOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceConfigurationDetailsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceConfigurationPropertiesOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAlterServiceConfigurationCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceConfigurationPropertiesKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceConfigurationCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldFromAccountKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_fromAccountKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_fromKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" @''",r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowAuditLogCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAuditLogCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_fromKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=System.String.format(" @'{0:yyyy-MM-dd}'",[Bridge.box(System.DateTime.getUtcNow(),System.DateTime,System.DateTime.format)]),r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowAuditLogFromCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAuditLogFromCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=System.String.format(" @'{0:yyyy-MM-dd}'",[Bridge.box(System.DateTime.getUtcNow(),System.DateTime,System.DateTime.format)]),r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowServicesCompletionKeywordsOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_configurationKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showServicesCompletionKeywordsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowAccountsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAccountsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAccountsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDmServiceAddKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceAddKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceAddKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDmServiceShowKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceShowKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceShowKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDmServiceDropKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceDropKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceDropKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDmServiceAlterKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceAlterKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceAlterKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDmServiceAlterSettingsOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dmServiceAlterSettingsRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldConfigurationPropertySetKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_configurationPropertySetKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceConfigurationPropertySetKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldToStringKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toStringKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" @''",r.OffsetPosition=-1,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldConfigurationPropertyWithConsentKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_configurationPropertyWithConsentKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withConsentKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" @''",r.OffsetPosition=-1,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAddKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldConfigurationPropertyDropKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_configurationPropertyDropKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceConfigurationPropertyDropKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAccountAlterOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountAlterOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountAlterOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAccountRenameOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountRenameOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountRenameOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAccountAddOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountAddOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountAddOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAccountRemoveOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountRemoveOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountRemoveOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAccountSetOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountSetOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountSetOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPcCodeKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountSubscriptionAlterKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_pccodeKeywordOptions),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text=" @''",r.OffsetPosition=-1,r),n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceAlterOperationsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceAlterOperationsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceAlterOperationsOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldInServiceKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_inServiceKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_inServiceKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDatabaseKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_databaseKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createDatabsaeScriptInServiceCommandOption),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldStorageAccountsKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_storageAccountsKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_storageAccountsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceRegenerateSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_regenerateServiceKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceRegenerateKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAccountNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_accountNamesCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,s),n.DefaultBeforeApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text="[",r),n.DefaultAfterApplyPolicy=(r=new Kusto.Data.IntelliSense.ApplyPolicy,r.Text="] ",r),n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNames,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_servicesNamesCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Service,a),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithEventHubPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withEventHubPropertiesSuffixRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withEventHubProperties),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithCosmosDbDataConnectionPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withCosmosDbDataConnectionPropertiesSuffixRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withCosmosDbDataConnectionProperties),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowPrincipalRolesCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showPrincipalRolesCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showPrincipalRolesKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),i=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showServiceCommandOptions,System.String).union(a),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNamesCombinedWithOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_servicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,i),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),l=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceCommandOptions,System.String).union(a),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNamesCombinedWithOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,l),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),o=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeServiceCommandOptions,System.String).union(a),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServicesNamesCombinedWithOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_removeServicesNamesToAppendOptionsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,o),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSharedIdentity,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_sharedIdentityRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_sharedIdentityOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldTargetServiceOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showTargetServiceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showTargetServiceCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowCmServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showCmServiceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showCmServiceCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowClusterClusterNamePrincipalCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterClusterNamePrincipalCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowClusterClientOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterClientRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterClusterNameOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowClusterClientSubscriptionCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterClientSubscriptionCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showClusterClientSubscriptionOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_cloudCreateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_regionCreateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldInstallCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceInstallCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_installCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldWithPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceDeployCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldReinstallCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceReinstallCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldUninstallServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceUninstallCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_uninstallRunnersSyntheticsCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldUninstallCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_uninstallCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_uninstallCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldUpdateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_updateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_updateCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldServiceUpdateCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_updateServiceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_updateServiceCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMigrateServiceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_serviceMigrateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateServiceCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMigrateClusterCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_clusterMigrateCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateClusterCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSetClusterPrincipalsNoneOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setClusterPrincipalsNoneCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setNoneKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSetClusterPrincipalsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setClusterPrincipalsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addSetDropPrincipalsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAddClusterPrincipalsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addClusterPrincipalsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addSetDropPrincipalsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDropClusterPrincipalsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dropClusterPrincipalsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addSetDropPrincipalsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDropAccountPrincipalsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dropAccountPrincipalsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dropAccountPrincipalsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAddClusterJitPrincipalsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addClusterJitPrincipalCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addDropJitPrincipalsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldDropClusterJitPrincipalsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_dropClusterJitPrincipalCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addDropJitPrincipalsKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldLoadBalancerKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_loadBalancerKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_loadBalancerKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPipeOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_yieldPipeOptionRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,System.Array.init(["|"],System.String)),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowSubscriptionCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showSubscriptionCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showSubscriptionCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowServiceSecurityRulesCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showServiceSecurityRulesOperationRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showServiceSecurityRulesCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldKeysCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_keysCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_keysKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldKeyTypesCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_keyTypesKeywordRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_keyTypesKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAlterServiceStorageAccountsCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceStorageAccountsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterServiceStorageAccountsSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldToKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toKeywordCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_toKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldCmNotifyCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_notifyCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_notifyKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSkuAvailabilityPrefix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setSkuAvailabilityRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_skuAvailabilityKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSetCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setSynapseMockedSettingsRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSetCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setSynapseMockedRbacRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSkuAvailabilityCommandValues,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setSkuAvailabilityValuesRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_trueFalseKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSkuAvailabilityPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setSkuAvailabilityWithOptionsRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withSkuAvailabilityProperties),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldSetRegionVisibility,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_setRegionVisibilityWithOptionsRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_regionVisibilityProperties),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldRegisterFeature,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_registerFeatureRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_registerFeatureCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldBillingServiceCreateResources,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_createResourcesForBillingServiceRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.GeneralRules.add((n=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldColumnNamesAfterPipeCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_commandColumnNamesAfterPipeRegex,n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,n.OverrideOptions=this.OverridingColumnMapping,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPutClientSubscriptionsNotification,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_putClientSubscriptionsNotificationRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_putClientSubscriptionsNotficationCommandOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldAlterVirtualClusterLimitsLevelCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_alterVirtualClusterLimitsLevelCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_withAlterVirtualClusterLimitsLevelProperties),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowResourceCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showResourceCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showResourceSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowResourceMetricsCommandPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showResourceMetricsCommandPropertiesSuffixRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showResourceMetricsCommandPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldShowAzureMonitorManifestCommandPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showResourceMetricsCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_showAzureMonitorManifestCommandPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldPublishAzureMonitorManifestCommandPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_publishAzureMonitorManifestCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_publishAzureMonitorManifestCommandPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldCheckinAzureMonitorManifestCommandPropertiesSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_checkinAzureMonitorManifestCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_checkinAzureMonitorManifestCommandPropertiesSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMigrateVirtualClusterCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateVirtualClusterCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateVirtualClusterCommandSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldMigrateVirtualClusterEventHubStorageAccountCommandOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateVirtualClusterEventHubStorageCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_migrateVirtualClusterCommandSuffixOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldScaleTridentClusterCommandSuffix,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_scaleTridentClusterCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_scaleTridentClusterCommandSuffix),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n)),this.CommandRules.add((n=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,n.Kind=Kusto.Data.IntelliSense.CMRuleKind.YieldProbePoolKeywordOptions,n.MatchingRegex=Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_addServiceToProbePoolCommandRegex,n.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider.s_probePoolKeywordOptions),n.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,n))},InitializeCommandColumnMappings:function(){},LoadCommandToolTips:function(){var e,t=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTip)).ctor,n,r,s,a,i,l,o,d,m,c,p,h,g,S,y,f,A,C,T,K,w,v,R,D,x;this.CommandToolTips=t;var I="https://kusto.azurewebsites.net/internaldocs/controlCommands/controlcommands_CM_internal.html",b="https://kusto.azurewebsites.net/docs/controlCommands/cm.html",_=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".restart",e.NameSuffix=" service",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#restart-service>Click to see documentation</a>",e.Usage=`<i>.restart service</i> Engine-KustoDev <i>.restart service</i> Engine-KustoDev with(instancename='Kusto.Azure.Svc_IN_11')`,e);t.add(_),n=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".reimage",e.NameSuffix=" service",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#reimage-service>Click to see documentation</a>",e.Usage=`<i>.reimage service</i> Engine-KustoDev <i>.reimage service</i> Engine-KustoDev with(instancename='Kusto.Azure.Svc_IN_11')`,e),t.add(n),r=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".rebuild",e.NameSuffix=" service",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#rebuild-service>Click to see documentation</a>",e.Usage=`<i>.rebuild service</i> Engine-KustoDev <i>.rebuild service</i> Engine-KustoDev with(instancename='Kusto.Azure.Svc_IN_11')`,e),t.add(r),s=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".reallocate",e.NameSuffix=" service",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#reallocate-service>Click to see documentation</a>",e.Usage=`<i>.reallocate service</i> Engine-KustoDev <i>.reallocate service</i> Engine-KustoDev with(instancename='Kusto.Azure.Svc_IN_11')`,e),t.add(s),a=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".uninstall",e.NameSuffix=" service | service runners",e.Summary=`Click to see documentation for: <a href=`+(b||"")+`#uninstall-service>.uninstall service</a> <a href=`+(I||"")+"#uninstall-service-runners>.uninstall service runners</a>",e),t.add(a),i=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".stop",e.NameSuffix=" service",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#stop-service>Click to see documentation</a>",e.Usage="<i>.stop service</i> Engine-KustoDev",e),t.add(i),l=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".install",e.NameSuffix=" service | service runners",e.Summary=`Click to see documentation for: <a href=`+(b||"")+`#install-service>.install service</a> <a href=`+(I||"")+"#install-service-runners>.install service runners</a>",e),t.add(l),o=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".delete",e.NameSuffix=" cluster | service | database",e.Summary=`Click to see documentation for: <a href=`+(I||"")+`#delete-cluster>Click to see documentation</a> <a href=`+(I||"")+`#delete-service>Click to see documentation</a> <a href=`+(b||"")+"#delete-database>.delete database</a>",e),t.add(o),d=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".check",e.NameSuffix=" service name availability",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#check-service-name-availability>Click to see documentation</a>",e.Usage="<i>.check service name availability</i> MyCoolName",e),t.add(d),m=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".create",e.NameSuffix=" service | database | account",e.Summary=`Click to see documentation for: <a href=`+(b||"")+`#create-database>.create database</a> <a href=`+(b||"")+`#create-service>.create service</a> <a href=`+(I||"")+"#create-account>.create account</a>",e),t.add(m),c=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".detach",e.NameSuffix=" account",e.Summary="<a href=https://kusto.azurewebsites.net/internaldocs/controlCommands/controlcommands_CM_internal.html#detach-account>Click to see documentation</a>",e.Usage="<i>.detach account</i> [Kusto Test]",e),t.add(c),p=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".alter",e.NameSuffix=" service | account",e.Summary=`Click to see documentation for: <a href=`+(b||"")+`#alter-service-configuration>.alter service configuration</a> <a href=`+(I||"")+`#alter-account-configuration>.alter account configuration</a> <a href=`+(I||"")+`#alter-account-admins>.alter account admins</a> <a href=`+(I||"")+"#alter-account-subscription-pccode>.alter account subscription pccode</a>",e),t.add(p),h=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".add",e.NameSuffix=" account | service | database storage accounts | unallocated subscription",e.Summary=`Click to see documentation for: <a href=`+(I||"")+`#add-account-contact>.add account contact</a> <a href=`+(I||"")+`#add-dm-service-storage-accounts>.add dm service storage accounts</a> <a href=`+(b||"")+`#add-database-storage-accounts>.add database storage accounts</a> <a href=`+(I||"")+"#add-unallocated-subscription>.add unallocated subscription</a>",e),t.add(h),g=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".remove",e.NameSuffix=" account contact | unallocated subscription",e.Summary=`Click to see documentation for: <a href=`+(I||"")+`#remove-account-contact>.remove account contact</a> <a href=`+(I||"")+"#remove-unallocated-subscription>.remove unallocated subscription</a>",e),t.add(g),S=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".set service",e.NameSuffix=" property to value",e.Summary="<a href=https://kusto.azurewebsites.net/docs/controlCommands/cm.html#set-service-configuration-property>Click to see documentation</href>",e.Usage="<i>.set</i> service Engine-KustoDev InstancesCount to '10'",e),t.add(S),y=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".recycle",e.NameSuffix=" service storage accounts",e.Summary="<a href=https://kusto.azurewebsites.net/internaldocs/controlCommands/controlcommands_CM_internal.html#recycle-service-storage-accounts>Click to see documentation</href>",e.Usage=`<i>.recycle</i> service Engine-Aria storage accounts (kuariadb0,kuariadb1) with(storageaccountbasename='kuariadbnew') <i>.recycle</i> service Engine-Aria storage accounts (kuariadb0,kuariadb1) with(storageaccountbasename='kuariadbnew',startindex='1')`,e),t.add(y),f=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".ingest",e.NameSuffix=" service storage logs",e.Summary="<a href=https://kusto.azurewebsites.net/internaldocs/controlCommands/controlcommands_CM_internal.html#ingest-service-storage-logs>Click to see documentation</href>",e.Usage=`<i>.ingest service</i> Engine-Aria storage logs into service Engine-KustoDev with(starttime='2016-02-02', storageservice='queue') <i>.ingest service</i> Mgmt-Aria storage logs into service Engine-KustoDev with(starttime='2016-1-1 11:05:00.0', endtime='2016-1-1 23:59:59.9', storageservice='blob')`,e),t.add(f),A=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".show",e.NameSuffix=" service [ServiceName] (configuration | fabriclocks | storage objects | database [DatabaseName] metadata | audit log)",e.Summary=`Click to see documentation for: <a href=`+(b||"")+`#show-service>.show service [ServiceName] configuration</a> <a href=`+(I||"")+`#show-service-fabricklocks>.show service [ServiceName] fabriclocks</a> <a href=`+(b||"")+`#show-service-storage-objects>.show service [ServiceName] storage objects</a> <a href=`+(b||"")+`#show-service-metadata>.show service [ServiceName] database [DatabaseName] metadata</a> <a href=`+(b||"")+`#show-service-audit-log>.show service [ServiceName] audit log from '<StartDate>' to '<EndDate>'</a> <a href=`+(I||"")+"#show-unallocated-subscriptions>.show unallocated subscriptions</a>",e.Usage=`<i>.show</i> service Engine-Aria configuration <i>.show</i> service Engine-Aria fabriclocks <i>.show</i> service Engine-Aria storage objects <i>.show</i> service Engine-Aria database aria metadata <i>.show</i> service Engine-Aria audit log from '2017-01-15T12:00' to '2017-01-30T12:30'`,e),t.add(A),C=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".drop",e.NameSuffix=" dm service [ServiceName] data obtainer [DataObtainerName]",e.Summary="<a href=https://kusto.azurewebsites.net/internaldocs/controlCommands/controlcommands_CM_internal.html#drop-dm-service-data-obtainer>Click to see documentation</href>",e.Usage="<i>.drop</i> dm service Ingest-Playground data obtainer SomeObtainerName",e),t.add(C),T=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".register",e.NameSuffix=" feature [FeatureName] subscriptions ([SubscriptionIDs])",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#register-feature-subscriptions>.register feature</a>",e),t.add(T),K=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".alter",e.NameSuffix=" dm service [ServiceName] settings [SettingsJsonPath] to [NewSettingsValue]",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#alter-dm-service-settings>.alter dm service settings</a>",e),t.add(K),w=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".create",e.NameSuffix=" resources for billing service [BillingServiceName]",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#create-resources-for-billing-service>.create resources for billing service</a>",e),t.add(w),v=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".sync",e.NameSuffix=" kustopool [KustoPoolName] rbac",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#sync-kustopool-rbac>.sync kustopool rbac</a>",e),t.add(v),R=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".show",e.NameSuffix=" regions by hosters",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#show-regions-by-hosters>.show regions by hosters</a>",e),t.add(R),D=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".move",e.NameSuffix=" service to maintenance mode",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#move-service-to-maintenance>.move service to maintenance</a>",e),t.add(D),x=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name=".cancel",e.NameSuffix=" cancel service maintenance mode",e.Summary=`Click to see documentation for: <a href=`+(I||"")+"#cancel-service-maintenance>.cancel service maintenance</a>",e),t.add(x)}}}),Bridge.ns("Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.ClusterManagerIntelliSenseRulesProvider,{f1:function(e){return e.Name},f2:function(e){return e.Name}}),Bridge.define("Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule",{inherits:[Kusto.Data.IntelliSense.IntelliSenseRule],props:{MatchingRegex:null,AdditionalOptions:null,ContextualOptions:null,OverrideOptions:null,OptionsKind:0,RequiresFullCommand:{get:function(){return!0}},IsContextual:{get:function(){return!0}}},methods:{IsMatch:function(e,t){return this.MatchingRegex.isMatch(t)},GetOptions:function(e){if(this.AdditionalOptions==null||Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.CompletionOptionCollection,this.AdditionalOptions))return this.GetContextOptions(e);var t=new(System.Collections.Generic.List$1(System.String)).$ctor1(this.GetContextOptions(e));return System.Linq.Enumerable.from(t,System.String).union(System.Linq.Enumerable.from(this.AdditionalOptions,Kusto.Data.IntelliSense.CompletionOptionCollection).selectMany(u.$.Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule.f1))},GetContextOptions:function(e){if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),this.OverrideOptions)&&this.OverrideOptions.containsKey(e))return this.OverrideOptions.getItem(e);var t=new Kusto.Data.IntelliSense.KustoCommandContext(e.Context);return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),this.ContextualOptions)&&this.ContextualOptions.containsKey(t)?this.ContextualOptions.getItem(t):System.Array.init([],System.String)},GetCompletionOptions:function(e){var t,n;return this.AdditionalOptions==null||Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.CompletionOptionCollection,this.AdditionalOptions)?System.Linq.Enumerable.from(this.GetContextOptions(e),System.String).select(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule.f2)).ToArray(Kusto.Data.IntelliSense.CompletionOption):(t=new Kusto.Data.IntelliSense.CompletionOptionCollection(this.OptionsKind,this.GetContextOptions(e)),n=System.Linq.Enumerable.from(function(r){return r.add(t),r}(new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CompletionOptionCollection)).ctor),Kusto.Data.IntelliSense.CompletionOptionCollection).concat(this.AdditionalOptions).orderByDescending(u.$.Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule.f3),n.selectMany(u.$.Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule.f4))}}}),Bridge.ns("Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,{f1:function(e){return e.Values},f2:function(e){return new Kusto.Data.IntelliSense.CompletionOption(this.OptionsKind,e)},f3:function(e){return e.Priority},f4:function(e){return e.GetCompletionOptions()}}),Bridge.define("Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule",{inherits:[Kusto.Data.IntelliSense.IntelliSenseRule],statics:{methods:{GetHashStringForContextAndToken:function(e,t){return(e||"")+";"+(t||"")}}},props:{MatchingRegex:null,MatchingTokens:null,GroupNameToUseAfterMatch:null,Options:null,RequiresFullCommand:{get:function(){return!0}},IsContextual:{get:function(){return!0}}},methods:{IsMatch:function(e,t){var n,r;return this.MatchingTokens==null||!System.Linq.Enumerable.from(this.MatchingTokens,System.String).any()||System.String.isNullOrEmpty(this.GroupNameToUseAfterMatch)?!1:(n=this.MatchingRegex.match(t),!n.getSuccess()||n.getGroups().getCount()<1?!1:(r=Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule.GetHashStringForContextAndToken(e.Context,n.getGroups().getByName(this.GroupNameToUseAfterMatch).toString()),this.MatchingTokens.contains(r)))},GetOptions:function(e){return this.Options.Values},GetCompletionOptions:function(e){return this.Options.GetCompletionOptions()}}}),Bridge.define("Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider",{inherits:[Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase],statics:{fields:{s_afterPipeRegex:null,s_renderRegex:null,s_renderMultiChartsRegex:null,s_renderKindOptionsRegex:null,s_evaluateRegex:null,s_makeSeriesRequestingAggregatorsRegex:null,s_makeSeriesBeforeDefaultOrOnRegex:null,s_makeSeriesBeforeOnRegex:null,s_makeSeriesBeforeRangeRegex:null,s_makeSeriesBeforeByRegex:null,s_joinRegex:null,s_diffPatternsPluginSplitParameterRegex:null,s_startOfLineWithSpaceOrAfterJoinRegex:null,s_startOfCommandWithClusterRegex:null,s_tablesScopeRegex:null,s_startOfCommandWithDatabaseRegex:null,s_clusterFunctionRegex:null,s_databaseFunctionInFindRegex:null,s_databaseFunctionRegex:null,s_operatorContextForFilterColumnRegex:null,s_operatorContextForProject:null,s_operatorContextForProjectAway:null,s_operatorContextForProjectRename:null,s_operatorContextForFilterColumnInFindRegex:null,s_operatorContextForFindProject:null,s_singleParamFunctions:null,s_singleParamFunctionsColumnContextRegex:null,s_twoParamFunctions:null,s_twoParamFunctionsColumnContextRegex:null,s_threeParamFunctions:null,s_threeParamFunctionsColumnContextRegex:null,s_manyParamFunctions:null,s_manyParamFunctionsColumnContextRegex:null,s_operatorContextForExtend_ColumnAndFunctionRegex:null,s_entitiesForJoin_ColumnsRegex:null,s_joinFlavorsForJoin_Regex:null,s_parseKindChoose_Regex:null,s_parseWith_Regex:null,s_parseTypesSuggest_Regex:null,s_parseStarOption_Regex:null,m_commandsRequestingAggregators:null,s_lineWithDotBeginningRegex:null,s_topOrLimitOrTakeOrSampleRegex:null,s_agoContextRegex:null,s_nowContextRegex:null,s_operatorContextForTopNestedAndTopHitters:null,s_operatorContextForSampleDistinct:null,s_topNestedKeywordPrefixRegex:null,s_topNestedWithOthersOption:null,s_topHittersKeywordPrefixRegex:null,s_yieldByKeywordRegex:null,s_parseColumnContextRegex:null,s_renderTimePivotColumnContextRegex:null,s_topSortOrderReduceByRegex:null,s_topTopNestedSortOrderByAscDescRegex:null,s_findContextRegex:null,s_findInRegex:null,s_findInStartOrContinueListRegex:null,s_FindInEndOrContinueListRegex:null,s_findWhereRegex:null,s_findProjectSmartRegex:null,s_reduceByColumnContextRegex:null,s_topNestedSuggestingColumnsRegex:null,s_topHittersSuggestingColumnsRegex:null,s_sampleDistinctSuggestingColumnsRegex:null,s_topOrOrderAscendingDescendingRegex:null,s_topNestedAscendingDescendingRegex:null,s_rangeFromRegex:null,s_rangeFromToRegex:null,s_rangeFromToStepRegex:null,s_filteredColumnString:null,s_filteredColumnRegex:null,s_filterPredicateRightValueRegex:null,s_makeSeriesByRegex:null,s_searchPrefixRegex:null,s_searchContextRegex:null,s_searchKindRegex:null,s_searchAfterKindContextRegex:null,s_searchMoreContextRegex:null,s_searchKind_Regex:null,s_clientDirective_Regex:null,s_clientDirectiveConnect_Regex:null,s_operatorOptions:null,s_renderOptions:null,s_renderKindOptions:null,s_aggregateOperationOptions:null,s_makeSeriesAggregateOperationOptions:null,s_extendOperationOptions:null,s_databaseFunctionOptions:null,s_stringOperatorOptions:null,s_numericOperatorOptions:null,s_numericScalarsOptions:null,s_byKeywordOptions:null,s_kindChooseKeywordOptions:null,s_withOthersKeywordOptions:null,s_ofKeywordOptions:null,s_withKeywordOptions:null,s_parseSuggestedTypesKeywordOptions:null,s_parseStarOption:null,s_ascDescKeywordOptions:null,s_nullsLastFirstKeywordOptions:null,s_ascDescOrNullsLastNullsFirstKeywordOptions:null,s_rangeFromOptions:null,s_rangeFromToOptions:null,s_rangeFromToStepOptions:null,s_joinFlavorsOptions:null,s_postJoinOptions:null,s_kindKeywordOptions:null,s_searchInKeywordOptions:null,s_searchLiteralsOptions:null,s_reduceByFlavorsOptions:null,s_datetimeOptions:null,s_timespanOptions:null,s_negativeTimespanOptions:null,s_postFindInOptions:null,s_findInEndOrContinueOptions:null,s_findWhereInOptions:null,s_findInPostListOptions:null,s_makeSeriesDefaultOrOnOptions:null,s_makeSeriesOnOptions:null,s_makeSeriesInRangeOptions:null,s_searchKindOptions:null,s_clientDirectivesOptions:null,MultiColumnFunctionResultSuffixes:null,s_afterFunctionsApplyPolicies:null,s_filterKeywords:null,s_projectKeywords:null,s_projectAwayKeywords:null,s_projectRenameKeywords:null,s_projectExtendKeywords:null,s_joinKeywords:null,s_topSortOrderReduceKeywords:null,s_operatorsUsingByKeywordKeywords:null,s_topSortOrderKeywords:null,s_topTopNestedSortOrderKeywords:null,s_reduceKeywords:null,s_parseKeywords:null,s_renderKeywords:null,s_topLimitTakeSampleKeywords:null,s_evaluateKeywords:null,s_summarizeKeywords:null,s_distinctKeywords:null,s_topNestedKeywords:null,s_topHittersKeywords:null,s_sampleDistinctKeywords:null,s_operatorsRequestingAggregators:null,s_databaseKeywords:null,s_findKeywords:null,s_searchKeywords:null,s_makeSeriesKeywords:null,s_remoteContextRegex:null,s_queryParametersRegex:null,s_joinClosureRegex:null,s_joinWithMakeSeriesClosureRegex:null,s_makeSeriesStartRegex:null,s_findSubClausesRegex:null,s_searchSubClausesRegex:null,s_rangeEntitiesRegex:null,s_parsedEntitiesRegex:null,s_removeStringLiteralsRegex:null,s_removeStringLiteralsSurroundedBySpacesRegex:null,s_removeCommentsRegex:null,s_fieldInvalidCharacters:null,s_fieldQuotableCharacters:null,s_aggregateOperatorToColumnPrefixMapping:null,s_lastCommandSegmentRegex:null,s_incompleteJoinRegex:null,s_commandClausesRegex:null,s_operatorsReplacingEntities:null,s_withsourceExtractRegex:null,s_findProjectionRegex:null,s_packRgx:null,s_topNestedLevelExtractRegex:null,s_sampleDistinctEntityExtractRegex:null,s_aggregateOperatorsHash:null,s_byKeywordRegex:null,s_byAndOnKeywordRegex:null,s_makeSeriesDropNonFieldsRegex:null,s_fieldMatchingRegex:null,s_numericSuffixRegex:null,s_defaultContextPattern:null,s_commandContext_Join:null,s_commandContext_Union:null,s_commandContext_ToScalar:null,s_commandContext_Show:null,s_commandContext_Range:null,s_commandContext_Callable:null,s_commandContext_Let:null,s_commandContext_ConnectDirective:null,s_commandContext_Find:null,s_commandContext_Search:null,s_commandDefaultContext:null,s_twoOrMoreSpacesRegex:null,s_showCommandFixRegex:null,s_commandContextRegexes:null,s_nonDefaultContextKeywordsRegex:null,s_letVariableRegex:null,s_letStatementRegexList:null},props:{Operators:{get:function(){return Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorOptions}}},ctors:{init:function(){this.s_afterPipeRegex=new System.Text.RegularExpressions.Regex.ctor("\\|\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_renderRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)render\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_renderMultiChartsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)render\\s+(areachart|barchart|columnchart)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_renderKindOptionsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)render\\s+(areachart|barchart|columnchart)\\s+kind\\s*=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_evaluateRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)evaluate\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesRequestingAggregatorsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)make-series\\s+(\\w+\\s*?=\\s*?)?$|(^|\\|\\s*?)make-series\\s+(?!.*\\b(by|on|range|in)\\b).*?,\\s+(\\w+\\s*?=\\s*?)?$|(^|\\|\\s*?)make-series\\s+(?!.*\\b(by|on|range|in)\\b).*[+*/\\-]\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesBeforeDefaultOrOnRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)make-series(?!.*\\b(by|on|range|in).*)(.*\\))\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesBeforeOnRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)make-series\\s+(?!.*\\b(range|on).*)(.*\\bdefault\\b\\s*\\=\\s*\\w+)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesBeforeRangeRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)make-series(?!.*\\b(range).*)(.*\\bon\\b\\s+.*)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesBeforeByRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)make-series(?!.*\\b(by).*)(.*\\bin\\s+range\\b\\s*\\(.*,.*,.*\\))\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_joinRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)join\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_diffPatternsPluginSplitParameterRegex=new System.Text.RegularExpressions.Regex.ctor('diffpatterns\\("split=\\s*$',Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_startOfLineWithSpaceOrAfterJoinRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*$|join\\s+.*?\\(\\s+$|^\\s*let\\s+\\w+\\s*=\\s+$|toscalar\\(\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_startOfCommandWithClusterRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*|join\\s+.*?\\(\\s+|^\\s*let\\s+\\w+\\s*=\\s+|toscalar\\(\\s*|;\\s+)cluster\\($",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_tablesScopeRegex="(((cluster\\([^\\)]+\\)\\.)?(database\\([^\\)]+\\)\\.)?(\\[.+?\\]|[\\w\\d\\*]+),\\s*)*((cluster\\([^\\)]+\\)\\.)?(database\\([^\\)]+\\)\\.)?(\\[.+?\\]|[\\w\\d\\*]+)))",this.s_startOfCommandWithDatabaseRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*|join\\s+.*?\\(\\s+|find\\s+in\\s*\\(|find\\s+in\\s*\\("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+",\\s*|^\\s*let\\s+\\w+\\s*=\\s+|toscalar\\(\\s*|;\\s+|cluster\\([^\\)]+?\\)\\.)database\\($",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clusterFunctionRegex=new System.Text.RegularExpressions.Regex.ctor("cluster\\([^\\)]+\\)\\.$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_databaseFunctionInFindRegex=new System.Text.RegularExpressions.Regex.ctor("find\\s+in\\s*\\([^\\|]*database\\([^\\)]+\\)\\.$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_databaseFunctionRegex=new System.Text.RegularExpressions.Regex.ctor("database\\([^\\)]+\\)\\.$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForFilterColumnRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(filter|where)\\s+$|(^|\\|\\s*?)(filter|where)\\s+[^\\|]+(and|or)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForProject=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)project\\s+$|(^|\\|\\s*?)project\\s+[^\\|]*,\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForProjectAway=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)project-away\\s+$|(^|\\|\\s*?)project-away\\s+[^\\|]*,\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForProjectRename=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)project-rename\\s+[^\\|]*?\\=\\s*$|(^|\\|\\s*?)project-rename\\s+[^\\|]*,\\s+[^\\|]*?\\=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForFilterColumnInFindRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+[^\\|]*where\\s+$|(^|\\s*)find\\s+[^\\|]+(and|or)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForFindProject=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+[^\\|]+project\\s+$|(^|\\s*)find\\s+[^\\|]+project\\s+[^\\|]*,\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_singleParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SingleParameterFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationSingleParameterTokens)).join("\\(|"),this.s_singleParamFunctionsColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("\\b("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_singleParamFunctions||"")+"\\()\\s*$|(^|\\|\\s*?)summarize\\s+[^\\|]*?by\\s+$|(^|\\|\\s*?)summarize\\s+[^\\|]*\\)\\s*,\\s+$|(^|\\|\\s*?)summarize\\s+[^\\|]*?by\\s+(?!bin)[^\\|]+,\\s+$|(^|\\|\\s*?)distinct\\s+([^\\|]+,\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_twoParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.TwoParameterFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationTwoParametersTokens)).join("\\(|"),this.s_twoParamFunctionsColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_twoParamFunctions||"")+"\\()\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_threeParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ThreeParameterFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationThreeParametersTokens)).join("\\(|"),this.s_threeParamFunctionsColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_threeParamFunctions||"")+"\\()\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_manyParamFunctions=Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.ManyParametersFunctionsTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationManyParametersTokens)).join("(\\(|[^\\)]+,)|"),this.s_manyParamFunctionsColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_manyParamFunctions||"")+"\\()\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForExtend_ColumnAndFunctionRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)extend\\s+[^\\|]*?[\\=\\-\\+\\/\\*]\\s*$|(^|\\|\\s*?)project\\s+[^\\|]*?\\=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_entitiesForJoin_ColumnsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)join\\s+.*\\(.+\\)\\s+on\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_joinFlavorsForJoin_Regex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)join\\s+kind\\s*=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_parseKindChoose_Regex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)parse\\s+kind\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_parseWith_Regex=new System.Text.RegularExpressions.Regex.ctor('(^|\\|\\s*?)parse\\s*(kind\\s*=\\s*\\w+(\\s*flags\\s*=\\s*\\w+)?\\s*)?\\s*(\\w+|".*?")\\s*$',Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_parseTypesSuggest_Regex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)parse\\s+.*\\swith\\s+.*\\s*:\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_parseStarOption_Regex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)parse(.+?)with(.+?[^\\*\\s])?\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.m_commandsRequestingAggregators=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)summarize\\s+(\\w+\\s*?=\\s*?)?$|(^|\\|\\s*?)summarize\\s+(?!.*\\bby\\b).*,\\s+(\\w+\\s*?=\\s*?)?$|(^|\\|\\s*?)summarize\\s+(?!.*\\bby\\b).*[+*/\\-]\\s*$|(^|\\|\\s*?).*top-(nested|hitters).*\\s+by\\s+(\\w+\\s*?=\\s*\\s*?)?$|(^|\\|\\s*?).*top-(nested|hitters).*\\s+by\\s+.*?[+*/\\-]\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_lineWithDotBeginningRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topOrLimitOrTakeOrSampleRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(top|.*top-hitters|limit|take|.*top-nested|sample|sample-distinct)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_agoContextRegex=new System.Text.RegularExpressions.Regex.ctor("\\bago\\(\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_nowContextRegex=new System.Text.RegularExpressions.Regex.ctor("\\bnow\\(\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForTopNestedAndTopHitters=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?).*top-(nested|hitters)\\s+\\d+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorContextForSampleDistinct=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?).*sample-distinct\\s+\\d+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topNestedKeywordPrefixRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)top-nested.*by.*(\\d|\\)|asc|desc)\\s*,\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topNestedWithOthersOption=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)top-nested.*?of\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topHittersKeywordPrefixRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)top-hitters.*by.*(\\d|\\))\\s*,\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_yieldByKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(top\\s+\\d+|.*top-hitters.*of\\s+\\w+|.*top-nested.*of\\s+[\\w,\\(\\)]+\\s*(with others\\s*=\\s*\\w+\\s*)?|distinct|sort|order|reduce|render\\s+timepivot)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_parseColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)parse\\s+(kind\\s*=\\s*\\w+\\s*(flags\\s*=\\s*\\w+\\s*)?\\s*)?\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_renderTimePivotColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)render\\s+timepivot\\s+by(.*,)?\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topSortOrderReduceByRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(top\\s+\\d+|sort|order|reduce)\\s+by\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topTopNestedSortOrderByAscDescRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)((top\\s+\\d+|sort|order).*?by.*?(asc|desc))[ ]+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_findContextRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+(withsource\\s*\\=\\s*\\w+\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_findInRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+(withsource\\s*\\=\\s*[^\\|\\(\\)]*\\s+)?in\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_findInStartOrContinueListRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+[^\\|\\(\\)]*in\\s*\\(\\s*("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+",\\s+)?\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_FindInEndOrContinueListRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+(withsource\\s*\\=\\s*\\w+\\s+)?in\\s*\\("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_findWhereRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+[^\\|\\(\\)]*in\\s*\\("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"\\)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_findProjectSmartRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*)find\\s+[^\\|]*\\s+project\\-smart\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_reduceByColumnContextRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)reduce\\s+by\\s+\\w+\\s+kind\\s*=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topNestedSuggestingColumnsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?).*top-nested.*of\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topHittersSuggestingColumnsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?).*top-hitters.*of\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_sampleDistinctSuggestingColumnsRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?).*sample-distinct.*of\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topOrOrderAscendingDescendingRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(top\\s+\\d+|sort|order)\\s+by\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topNestedAscendingDescendingRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?).*top-nested.*by\\s+.*(\\)|\\d)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_rangeFromRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*|join\\s+\\(\\s+|;\\s*)range\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_rangeFromToRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*|join\\s+\\(\\s+|;\\s*)range\\s+\\w+\\s+from(?!.*\\bto)\\s+[^|]*[\\w\\)]+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_rangeFromToStepRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*|join\\s+\\(\\s+|;\\s*)range(?!.*step)\\s+\\w+\\s+from\\s+[^|]+to\\s+[^|]+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_filteredColumnString="((^|\\|\\s*?)(filter|where)|\\b(and|or))\\s+(?<MatchingString>\\S+?)\\s+",this.s_filteredColumnRegex=new System.Text.RegularExpressions.Regex.ctor((Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filteredColumnString||"")+"$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_filterPredicateRightValueRegex=new System.Text.RegularExpressions.Regex.ctor((Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filteredColumnString||"")+"(\\=\\=|\\!\\=|\\>|\\<|\\<\\=|\\>\\=)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_makeSeriesByRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\|\\s*?)(make-series\\s+[^\\|]*\\bon\\s+[^\\|]+\\s+in\\s+range\\b\\([^\\|]+,[^\\|]+\\,[^\\|]+\\))\\s+by\\s+$|(^|\\|\\s*?)(make-series\\s+[^\\|]*\\bon\\s+[^\\|]+\\s+in\\s+range\\b\\([^\\|]+,[^\\|]+\\,[^\\|]+\\))\\s+by\\s+[^\\|]+?,\\s+$|(^|\\|\\s*?)(make-series\\s+[^\\|]*\\bon\\b)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_searchPrefixRegex="(^|;|\\|)\\s*search\\s+",this.s_searchContextRegex=new System.Text.RegularExpressions.Regex.ctor((Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchPrefixRegex||"")+"$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_searchKindRegex="(kind\\s*=\\s*(case_sensitive|case_insensitive)\\s+)",this.s_searchAfterKindContextRegex=new System.Text.RegularExpressions.Regex.ctor((Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchPrefixRegex||"")+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKindRegex||"")+"$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_searchMoreContextRegex=new System.Text.RegularExpressions.Regex.ctor((Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchPrefixRegex||"")+"[^\\|]+(and|or)\\s+$|"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchPrefixRegex||"")+"[^\\|\\(\\)]*in\\s*\\("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"\\)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_searchKind_Regex=new System.Text.RegularExpressions.Regex.ctor((Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchPrefixRegex||"")+"kind\\s*=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clientDirective_Regex=new System.Text.RegularExpressions.Regex.ctor("^\\s*#$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clientDirectiveConnect_Regex=new System.Text.RegularExpressions.Regex.ctor("^\\s*#connect\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorOptions=Kusto.Data.IntelliSense.CslCommandParser.PromotedOperatorCommandTokens,this.s_renderOptions=Kusto.Data.IntelliSense.CslCommandParser.ChartRenderTypesTokens,this.s_renderKindOptions=Kusto.Data.IntelliSense.CslCommandParser.ChartRenderKindTokens,this.s_aggregateOperationOptions=Kusto.Data.IntelliSense.CslCommandParser.SortedSummarizeAggregators,this.s_makeSeriesAggregateOperationOptions=Kusto.Data.IntelliSense.CslCommandParser.SortedMakeSeriesAggregationTokens,this.s_extendOperationOptions=Kusto.Data.IntelliSense.CslCommandParser.SortedExtendFunctions,this.s_databaseFunctionOptions=System.Array.init(["database()"],System.String),this.s_stringOperatorOptions=System.Array.init(["==","!=","has","contains","startswith","matches regex","endswith","!has","!contains","=~","!~","in","!in","has_cs","!has_cs","contains_cs","!contains_cs","!startswith","!endswith","hasprefix","!hasprefix","hassuffix","!hassuffix"],System.String),this.s_numericOperatorOptions=System.Array.init(["==","!=",">","<","<=",">="],System.String),this.s_numericScalarsOptions=System.Array.init(["1","10","100","1000"],System.String),this.s_byKeywordOptions=System.Array.init(["by"],System.String),this.s_kindChooseKeywordOptions=System.Array.init(["= simple","= regex","= relaxed"],System.String),this.s_withOthersKeywordOptions=System.Array.init(["with others = "],System.String),this.s_ofKeywordOptions=System.Array.init(["of"],System.String),this.s_withKeywordOptions=System.Array.init(["with"],System.String),this.s_parseSuggestedTypesKeywordOptions=System.Array.init(["long","int64","real","double","string","time","timespan","date","datetime","int"],System.String),this.s_parseStarOption=System.Array.init(["*"],System.String),this.s_ascDescKeywordOptions=System.Array.init(["asc","desc"],System.String),this.s_nullsLastFirstKeywordOptions=System.Array.init(["nulls last","nulls first"],System.String),this.s_ascDescOrNullsLastNullsFirstKeywordOptions=System.Array.init(["asc","desc","nulls last","nulls first"],System.String),this.s_rangeFromOptions=System.Array.init(["from"],System.String),this.s_rangeFromToOptions=System.Array.init(["to"],System.String),this.s_rangeFromToStepOptions=System.Array.init(["step"],System.String),this.s_joinFlavorsOptions=Kusto.Data.IntelliSense.CslCommandParser.JoinKindTokens,this.s_postJoinOptions=System.Array.init(["(","kind="],System.String),this.s_kindKeywordOptions=System.Array.init(["kind="],System.String),this.s_searchInKeywordOptions=System.Array.init(["in"],System.String),this.s_searchLiteralsOptions=System.Array.init(['""',"*"],System.String),this.s_reduceByFlavorsOptions=Kusto.Data.IntelliSense.CslCommandParser.ReduceByKindTokens,this.s_datetimeOptions=Kusto.Data.IntelliSense.CslCommandParser.SortedDatetimeFunctions,this.s_timespanOptions=System.Array.init(["30m","1h","12h","1d","3d","7d"],System.String),this.s_negativeTimespanOptions=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_timespanOptions,System.String).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f1).ToArray(System.String),this.s_postFindInOptions=System.Array.init(["("],System.String),this.s_findInEndOrContinueOptions=System.Array.init([")",","],System.String),this.s_findWhereInOptions=System.Array.init(["where","in"],System.String),this.s_findInPostListOptions=System.Array.init(["where"],System.String),this.s_makeSeriesDefaultOrOnOptions=System.Array.init(["on","default="],System.String),this.s_makeSeriesOnOptions=System.Array.init(["on"],System.String),this.s_makeSeriesInRangeOptions=System.Array.init(["in range()"],System.String),this.s_searchKindOptions=System.Array.init(["case_sensitive","case_insensitive"],System.String),this.s_clientDirectivesOptions=System.Array.init(["connect"],System.String),this.MultiColumnFunctionResultSuffixes=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f2(new(System.Collections.Generic.Dictionary$2(System.String,System.Array.type(System.String))).ctor),this.s_afterFunctionsApplyPolicies=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SortedExtendFunctions,System.String).toDictionary(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f3,u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f4,System.String,Kusto.Data.IntelliSense.ApplyPolicy),this.s_filterKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f5(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_projectKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f6(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_projectAwayKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f7(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_projectRenameKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f8(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_projectExtendKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f9(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_joinKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f10(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_topSortOrderReduceKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f11(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_operatorsUsingByKeywordKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f12(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_topSortOrderKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f13(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_topTopNestedSortOrderKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f14(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_reduceKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f15(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_parseKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f16(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_renderKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f17(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_topLimitTakeSampleKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f18(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_evaluateKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f19(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_summarizeKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f20(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_distinctKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f21(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_topNestedKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f22(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_topHittersKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f23(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_sampleDistinctKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f24(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_operatorsRequestingAggregators=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f25(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_databaseKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f26(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_findKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f27(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_searchKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f28(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_makeSeriesKeywords=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f29(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_remoteContextRegex=new System.Text.RegularExpressions.Regex.ctor("^(?<HasClusterReference>cluster\\((?<Cluster>[^\\)]+?)\\)\\.?)?((?<HasDatabaseReference>database)\\((?<Database>[^\\)]*)\\))?(\\.(?<Context>(\\[.+?\\]|[\\w\\*]+))?)?",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_queryParametersRegex=new System.Text.RegularExpressions.Regex.ctor("{\\w*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_joinClosureRegex=new System.Text.RegularExpressions.Regex.ctor("\\)\\s*on\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_joinWithMakeSeriesClosureRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*make-series\\s+.*?\\b(on)\\b.*?\\)\\s*on\\b"),this.s_makeSeriesStartRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*make-series"),this.s_findSubClausesRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*?|;)find\\s+[^\\|]*(where|project)\\s+[^\\|]*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_searchSubClausesRegex=new System.Text.RegularExpressions.Regex.ctor("(^|\\s*?|;\\s*)search\\s+[^\\|]*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_rangeEntitiesRegex=new System.Text.RegularExpressions.Regex.ctor("^(?<Field>[\\w_]+)\\s+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_parsedEntitiesRegex=new System.Text.RegularExpressions.Regex.ctor(".*?with\\s+(?<Entities>.+)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeStringLiteralsRegex=new System.Text.RegularExpressions.Regex.ctor(`('.*?'|".*?")`,Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeStringLiteralsSurroundedBySpacesRegex=new System.Text.RegularExpressions.Regex.ctor(`\\s('.*?'|".*?")\\s`,Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_removeCommentsRegex=new System.Text.RegularExpressions.Regex.ctor("//.+[\\r\\n]+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_fieldInvalidCharacters=new System.Text.RegularExpressions.Regex.ctor("[^\\w \\-\\.]",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_fieldQuotableCharacters=new System.Text.RegularExpressions.Regex.ctor("[ \\-\\.\\[\\]]",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_aggregateOperatorToColumnPrefixMapping=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f30(new(System.Collections.Generic.Dictionary$2(System.String,System.String)).ctor),this.s_lastCommandSegmentRegex=new System.Text.RegularExpressions.Regex.ctor("union(\\s*\\(.*?\\)\\s*,)+\\s*\\((?<LastSegment>.*$)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_incompleteJoinRegex=new System.Text.RegularExpressions.Regex.ctor("join(?!.+\\bon\\b)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandClausesRegex=new System.Text.RegularExpressions.Regex.ctor("(^\\s*(?<Clause>.*?)join|\\s*\\((?<Clause>.+?)\\)\\s+on\\s+\\w+)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_operatorsReplacingEntities=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f31(new(System.Collections.Generic.HashSet$1(System.String)).ctor),this.s_withsourceExtractRegex=new System.Text.RegularExpressions.Regex.ctor("withsource\\s*=\\s*(?<tableNameColumn>\\w+)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_findProjectionRegex=new System.Text.RegularExpressions.Regex.ctor("project\\s+(?<projectedList>[^\\|]+)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_packRgx=new System.Text.RegularExpressions.Regex.ctor("(,)?\\s*pack\\s*\\(\\s*\\*\\s*\\)\\s*",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_topNestedLevelExtractRegex=new System.Text.RegularExpressions.Regex.ctor("(top-nested)?\\s*\\d+\\s+of\\s+(?<InputColumn>[\\w_]+)\\s+by\\s+((?<ReanmingColumn>[\\w_]+)\\s*=\\s*)?(?<Aggregator>.+?(,)?)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_sampleDistinctEntityExtractRegex=new System.Text.RegularExpressions.Regex.ctor("(sample-distinct)?\\s*\\d+\\s+of\\s+(?<InputColumn>[\\w_\\(\\), ]+)\\s",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_aggregateOperatorsHash=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationTokens,System.String).union(Kusto.Data.IntelliSense.CslCommandParser.SummarizeAggregationAliasesTokens)),this.s_byKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("\\bby\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_byAndOnKeywordRegex=new System.Text.RegularExpressions.Regex.ctor("\\b(by|on)\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_makeSeriesDropNonFieldsRegex=new System.Text.RegularExpressions.Regex.ctor("(\\b(default\\s*\\=\\s*\\S+)\\b)|(\\bin\\s+range\\s*\\(\\s*\\S+\\s*,\\s*\\S+\\s*,\\s*\\S+\\s*\\))",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_fieldMatchingRegex=new System.Text.RegularExpressions.Regex.ctor("(?<Field>[\\w_]+)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_numericSuffixRegex=new System.Text.RegularExpressions.Regex.ctor("(?<suffix>\\d+)$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_defaultContextPattern="(?<Context>(((cluster.+?)?database\\([^\\)]*\\)?\\.?(\\[.+?\\]|[\\w|\\d|*]+)?|\\[.+?\\])|[\\w\\d\\*]+))",this.s_commandContext_Join=new System.Text.RegularExpressions.Regex.ctor(".*join\\s.*?\\(\\s*"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_defaultContextPattern||"")+"\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Union=new System.Text.RegularExpressions.Regex.ctor("union\\s.*\\(\\s*"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_defaultContextPattern||"")+"\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_ToScalar=new System.Text.RegularExpressions.Regex.ctor("toscalar\\s*\\(\\s*"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_defaultContextPattern||"")+"\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Show=new System.Text.RegularExpressions.Regex.ctor("^(?<Context>\\.show\\s+\\w+(\\s+\\w+)*)\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Range=new System.Text.RegularExpressions.Regex.ctor("^(?<Context>range)\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Callable=new System.Text.RegularExpressions.Regex.ctor("\\{\\s+"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_defaultContextPattern||"")+"\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Let=new System.Text.RegularExpressions.Regex.ctor("^let\\s.*?=\\s*(\\(.*?\\)\\s*\\{\\s*)?"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_defaultContextPattern||"")+"\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_ConnectDirective=new System.Text.RegularExpressions.Regex.ctor("^\\s*#connect\\s+(?<Context>cluster\\(.+?\\)(.database\\(.+\\))?)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Find=new System.Text.RegularExpressions.Regex.ctor("(^|.*;)((find\\s+[^\\|]*in\\s*\\((?<Context>("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"))\\))|(find\\s+[^\\|]*in\\s*\\(("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"\\s*,\\s*)?(((?<Context>((cluster.+\\.)?database\\([^\\)]*\\)))\\.)|(database\\((?<Context>))|((?<Context>(cluster.+\\.database\\())))))",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContext_Search=new System.Text.RegularExpressions.Regex.ctor("(^|.*;)((search\\s+[^\\|]*in\\s*\\((?<Context>("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"))\\))|(search\\s+[^\\|]*in\\s*\\(("+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_tablesScopeRegex||"")+"\\s*,\\s*)?(((?<Context>((cluster.+\\.)?database\\([^\\)]*\\)))\\.)|(database\\((?<Context>))|((?<Context>(cluster.+\\.database\\())))))",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandDefaultContext=new System.Text.RegularExpressions.Regex.ctor("^\\s*"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_defaultContextPattern||""),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_twoOrMoreSpacesRegex=new System.Text.RegularExpressions.Regex.ctor("\\s\\s+",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showCommandFixRegex=new System.Text.RegularExpressions.Regex.ctor("(.show)(.*)(extents)",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_commandContextRegexes=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f32(new(System.Collections.Generic.Dictionary$2(System.String,System.Tuple$2(System.Text.RegularExpressions.Regex,System.Text.RegularExpressions.Regex))).ctor),this.s_nonDefaultContextKeywordsRegex=new System.Text.RegularExpressions.Regex.ctor(Bridge.toArray(System.Linq.Enumerable.from(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContextRegexes.Keys,System.String).orderByDescending(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f33).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f34)).join("|"),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),this.s_letVariableRegex=new System.Text.RegularExpressions.Regex.ctor("(^|;)\\s*let\\s+(?<LetExpressionName>\\w+)\\s*=",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_letStatementRegexList=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f35(new(System.Collections.Generic.List$1(System.Text.RegularExpressions.Regex)).ctor)}},methods:{MapColumnsToTables:function(e){var t,n,r=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,s,a,i,l;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,e))return r;s=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.IEnumerable$1(System.String))).ctor,t=Bridge.getEnumerator(e,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity);try{for(;t.moveNext();)a=t.Current,i=new Kusto.Data.IntelliSense.KustoCommandContext(a.Name),s.containsKey(i)||s.add(i,System.Linq.Enumerable.from(a.Columns,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f36))}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}n=Bridge.getEnumerator(s);try{for(;n.moveNext();)l=n.Current,r.setItem(l.key,System.Linq.Enumerable.from(l.value,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f37).toList(System.String))}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return r},ParseCommandClauses:function(e){var t,n,r,s,a;if(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_incompleteJoinRegex.isMatch(e))return System.Array.init([e],System.String);if(n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandClausesRegex.matches(e),n.getCount()===0)return System.Array.init([e],System.String);r=new(System.Collections.Generic.List$1(System.String)).ctor,t=Bridge.getEnumerator(n);try{for(;t.moveNext();)s=Bridge.cast(t.Current,System.Text.RegularExpressions.Match),a=(s.getGroups().getByName("Clause").toString()||"")+" | ",System.String.isNullOrWhiteSpace(a)||r.add(a)}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return r.add(e),r},BuildOpEntitiesMap:function(e){var t,n=new(System.Collections.Generic.Dictionary$2(System.String,System.String)).ctor,r=System.Linq.Enumerable.from(Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ParseAsStatements(e,124,!1),System.String).reverse(),s,a,i,l;t=Bridge.getEnumerator(r);try{for(;t.moveNext();)if(s=t.Current,!System.String.isNullOrWhiteSpace(s)){if(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinClosureRegex.isMatch(s))if(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesStartRegex.isMatch(s)){if(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinWithMakeSeriesClosureRegex.isMatch(s))continue}else continue;if(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchSubClausesRegex.isMatch(s)){n.containsKey("search")||n.add("search","");continue}if((System.String.endsWith(s,"|")||Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findSubClausesRegex.isMatch(s))&&(a=System.String.split(s,System.Array.init([32,13,10],System.Char).map(function(o){return String.fromCharCode(o)}),2,1),a.length===2)&&(i=a[System.Array.index(0,a)],l=Bridge.referenceEquals(i,"find")?a[System.Array.index(1,a)]:Kusto.Cloud.Platform.Utils.ExtendedString.TrimEnd(a[System.Array.index(1,a)],"|"),n.containsKey(i)?n.setItem(i,(n.getItem(i)||"")+","+(l||"")):n.add(i,l),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorsReplacingEntities.contains(i)))break}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return n},HandleParseEntities:function(e,t,n,r){var s,a={v:null},i,l,o,d,m,c;if(!n.tryGetValue("parse",a))return t;if(i=!1,l=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parsedEntitiesRegex.match(a.v),l.getSuccess()){o=l.getGroups().getByName("Entities").toString(),d=System.String.split(o,System.Array.init([42,32],System.Char).map(function(p){return String.fromCharCode(p)}),null,1),s=Bridge.getEnumerator(d);try{for(;s.moveNext();)m=s.Current,c=m.trim(),!System.String.isNullOrEmpty(c)&&System.Char.isLetter(c.charCodeAt(0))&&(c=Kusto.Cloud.Platform.Utils.ExtendedString.SplitFirst(c,58),i=!!(i|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,c)))}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}}return i?Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities:t},HandleReduceByEntities:function(e,t,n,r){var s={v:null};return n.tryGetValue("reduce",s)?(e.AddRange(System.Array.init(["Pattern","Count"],System.String)),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities):t},HandleGetSchemaEntities:function(e,t,n,r){var s={v:null};return n.tryGetValue("getschema",s)?(e.AddRange(System.Array.init(["ColumnName","ColumnOrdinal","DataType","ColumnType"],System.String)),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities):t},HandleRangeEntities:function(e,t,n,r){var s={v:null},a,i;return n.tryGetValue("range",s)&&(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeEntitiesRegex.match(s.v),a.getSuccess()&&(i=a.getGroups().getByName("Field").toString(),e.contains(i)||(e.add(i),t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities))),t},HandlePrintEntities:function(e,t,n,r){var s={v:null},a,i;return n.tryGetValue("print",s)&&(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeEntitiesRegex.match(s.v),a.getSuccess()&&(i=a.getGroups().getByName("Field").toString(),e.contains(i)||(e.add(i),t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities))),t},HandleProjectEntities:function(e,t,n,r){var s={v:null},a;return n.tryGetValue("project",s)&&(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveEntitiesFromListWithImplicitColumns(e,s.v),a&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities)),t},HandleProjectAwayEntities:function(e,t,n,r){var s,a,i={v:null},l,o,d,m,c,p;if(!n.tryGetValue("project-away",i))return t;l=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities(i.v),o=new(System.Collections.Generic.List$1(System.String)).ctor,s=Bridge.getEnumerator(l);try{for(;s.moveNext();)d=s.Current,m=d.Name,e.contains(m)?e.remove(m):o.add(m)}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}if(System.Linq.Enumerable.from(o,System.String).any()&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.String,e)){c=r??new(System.Collections.Generic.List$1(System.String)).ctor,a=Bridge.getEnumerator(System.Linq.Enumerable.from(c,System.String).except(o).ToArray(System.String));try{for(;a.moveNext();)p=a.Current,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,p)}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}}return Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities},HandleMvexpandEntities:function(e,t,n,r){var s={v:null},a;return!n.tryGetValue("mvexpand",s)&&!n.tryGetValue("mv-expand",s)||(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveEntitiesFromList(e,s.v),t===Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None&&a&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities)),t},HandleTopNestedEntities:function(e,t,n,r){var s,a={v:null},i=!1,l,o;if(!n.tryGetValue("top-nested",a))return t;l=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedLevelExtractRegex.matches(a.v),l.getCount()>0&&(i=!0),s=Bridge.getEnumerator(l);try{for(;s.moveNext();){var d=s.Current,m=Bridge.as(d,System.Text.RegularExpressions.Match),c=m.getGroups().getByName("InputColumn").toString();Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,c),o=m.getGroups().getByName("ReanmingColumn").toString(),System.String.isNullOrEmpty(o)&&(o="aggregated_"+(c||"")),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,o)}}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}return i&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities),t},HandleExtendEntities:function(e,t,n,r){var s={v:null},a;return n.tryGetValue("extend",s)&&(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveEntitiesFromListWithImplicitColumns(e,s.v),t===Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None&&a&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities)),t},HandleSampleDistinctEntities:function(e,t,n,r){var s={v:null},a,i;return n.tryGetValue("sample-distinct",s)?(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_sampleDistinctEntityExtractRegex.match(s.v),a.getSuccess()?(i=a.getGroups().getByName("InputColumn").toString(),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleAggregationEntities(e,i,r)):Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None):t},GenerateImplicitEntitiesForFunction:function(e,t,n,r){var s,a,i,l,o,d,m;if(n!==0||Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.ExpressionEntity,t)||!Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.MultiColumnFunctionResultSuffixes.containsKey(e)||(i=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.MultiColumnFunctionResultSuffixes.getItem(e),i.length<n))return!1;l=System.Linq.Enumerable.from(t,Kusto.Data.IntelliSense.ExpressionEntity).first().Name,o=!1,s=Bridge.getEnumerator(System.Linq.Enumerable.from(i,System.String).skip(n));try{for(;s.moveNext();)d=s.Current,m=Kusto.Cloud.Platform.Utils.ExtendedString.FormatWithInvariantCulture("{0}_{1}_{2}",[e,l,d]),r.add((a=new Kusto.Data.IntelliSense.ExpressionEntity,a.Name=m,a.IsGenerated=!0,a)),o=!0}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}return o},ResolveEntitiesFromListWithImplicitColumns:function(e,t){var n,r=!1,s=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities$1(t,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.GenerateImplicitEntitiesForFunction),a;n=Bridge.getEnumerator(s);try{for(;n.moveNext();)a=n.Current,r=!!(r|a.IsGenerated?Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldRenameIfPresent(e,a.Name):Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,a.Name))}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}return r},ResolveEntitiesFromList:function(e,t,n){var r,s,a,i;n===void 0&&(n=!1),s=!1,a=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities(t),r=Bridge.getEnumerator(a);try{for(;r.moveNext();)i=r.Current,s=!!(s|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,i.Name))}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}return s},HandleSummarizeEntities:function(e,t,n,r){var s={v:null},a;return n.tryGetValue("summarize",s)?(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_byKeywordRegex.replace(s.v,", "),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleAggregationEntities(e,a,r)):t},HandleMakeSeriesEntities:function(e,t,n,r){var s={v:null},a;return n.tryGetValue("make-series",s)?(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_byAndOnKeywordRegex.replace(s.v,", "),a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesDropNonFieldsRegex.replace(a,""),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleAggregationEntities(e,a,r)):t},HandleAggregationEntities:function(e,t,n){var r,s,a=null,i=Kusto.Data.IntelliSense.ExpressionEntityParser.ParseEntities(t),l,o,d;r=Bridge.getEnumerator(i);try{for(;r.moveNext();){var m=r.Current,c=m.Operator,p=(s=m.Name,s??""),h=p,g=!1;!System.String.isNullOrEmpty(c)&&Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_aggregateOperatorsHash.contains(c)&&(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_aggregateOperatorToColumnPrefixMapping.containsKey(c)&&(c=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_aggregateOperatorToColumnPrefixMapping.getItem(c)),l=(c||"")+"_"+(p||""),System.String.equals(c,"percentile",4)?g=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandlePercentileAggregateEntities(e,m,l,n):System.String.equals(c,"argmin",4)||System.String.equals(c,"argmax",4)||System.String.equals(c,"arg_min",4)||System.String.equals(c,"arg_max",4)?(a==null&&(a=new(System.Collections.Generic.List$1(System.String)).ctor),o=c.substr(c.length-3|0,3),d=System.String.equals(c,"arg_max",4)||System.String.equals(c,"arg_min",4),l=d?p:(o||"")+"_"+(p||""),g=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleArgMinMaxAggregateEntities(a,m,o,h,l,d,n)):Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_fieldInvalidCharacters.isMatch(l)&&(l=(c||"")+"_"),p=l),g||Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,p)}}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}return Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.FinalizeSummarizeEntitiesList(a,e),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities},AddEscapedEntityName:function(e,t){return t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.EscapeEntityNameIfNeeded(t),e.contains(t)?!1:(e.add(t),!0)},EscapeEntityNameIfNeeded:function(e){return Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_fieldQuotableCharacters.isMatch(e)&&(e="['"+(e||"")+"']"),e},FinalizeSummarizeEntitiesList:function(e,t){var n,r;if(e!=null&&e.Count!==0){if(t.Count===0){t.AddRange(e);return}n=System.String.format("^(min|max)_.+?_({0})$",[Bridge.toArray(t).join("|")]);try{r=new System.Text.RegularExpressions.Regex.ctor(n,Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions),System.Linq.Enumerable.from(e,System.String).where(function(s){return!r.isMatch(s)}).forEach(function(s){return Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(t,s)})}catch(s){if(s=System.Exception.create(s),Bridge.is(s,System.ArgumentException))return;throw s}}},HandlePercentileAggregateEntities:function(e,t,n,r){var s,a=!1,i=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_fieldMatchingRegex.match(n).getGroups().getByName("Field").toString(),l=t.Arguments,o,d;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.String,l))return a;s=Bridge.getEnumerator(l,System.String);try{for(;s.moveNext();)o=s.Current,d=(i||"")+"_"+(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_fieldQuotableCharacters.replace(o,"_")||""),a=!!(a|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,d))}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}return a},HandleArgMinMaxAggregateEntities:function(e,t,n,r,s,a,i){var l,o,d=!1,m=!1,c,p,h,g,S,y,f,A,C;if(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_fieldInvalidCharacters.isMatch(s)&&(s=(n||"")+"_",m=!0),d=!!(d|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,s)),c=t.Arguments,Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.String,c))return d;p=1,l=Bridge.getEnumerator(t.Arguments,System.String);try{for(;l.moveNext();){if(h=l.Current,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_fieldInvalidCharacters.isMatch(h))if(Kusto.Cloud.Platform.Utils.ExtendedRegex.IsWildCardPattern(h)){if(i!=null&&System.Linq.Enumerable.from(i,System.String).any()&&(S={v:Kusto.Cloud.Platform.Utils.ExtendedRegex.TryTransformWildCardPatternToRegex(h)},S.v!=null&&(y=System.Linq.Enumerable.from(i,System.String).where(function(T,K){return function(w){return!Bridge.referenceEquals(w,r)&&K.v.isMatch(w)}}(this,S)).toList(System.String),System.Linq.Enumerable.from(y,System.String).any()))){o=Bridge.getEnumerator(y);try{for(;o.moveNext();)f=o.Current,A=a?f:(s||"")+"_"+(f||""),d=!!(d|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,A))}finally{Bridge.is(o,System.IDisposable)&&o.System$IDisposable$Dispose()}}}else C=System.String.format("{0}_{1}_arg{2}",n,a&&!m&&!System.String.isNullOrWhiteSpace(s)?s:"",Bridge.box(p,System.Int32)),d=!!(d|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,C));else g=a?h:(s||"")+"_"+(h||""),d=!!(d|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,g));p=p+1|0}}finally{Bridge.is(l,System.IDisposable)&&l.System$IDisposable$Dispose()}return d},AddFieldIfNotPresent:function(e,t){return System.String.isNullOrEmpty(t)?!1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,t)},AddFieldRenameIfPresent:function(e,t){var n,r,s;if(System.String.isNullOrEmpty(t))return!1;for(n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.EscapeEntityNameIfNeeded(t),e.contains(n)&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_numericSuffixRegex.replace(t,""),n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.EscapeEntityNameIfNeeded(t)),e.contains(n)&&(t=(t||"")+"1",n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.EscapeEntityNameIfNeeded(t));e.contains(n);)if(r=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_numericSuffixRegex.match(t),r.getSuccess())s=System.Int32.parse(r.getGroups().getByName("suffix").getValue()),s=s+1|0,t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_numericSuffixRegex.replace(t,Bridge.toString(s)),n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.EscapeEntityNameIfNeeded(t);else return!1;return e.add(n),!0},GetLatestMatch:function(e){var t,n=null,r;t=Bridge.getEnumerator(e);try{for(;t.moveNext();)r=Bridge.cast(t.Current,System.Text.RegularExpressions.Match),r.getSuccess()&&(n==null||n.getIndex()<r.getIndex())&&(n=r)}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return n},ResolveContextUsingRegex:function(e,t,n){if(System.String.startsWith(System.String.trimStart(e.substr(n)),"|",4))return null;var r=t.Item1,s=t.Item2,a=null,i=r.match(e,n);return i.getSuccess()&&(a=i.getGroups().getByName("Context").toString(),s!=null&&(a=s.replace(a,u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f38)),a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_twoOrMoreSpacesRegex.replace(a," ")),a},ResolveLetVariable:function(e){if(System.String.isNullOrEmpty(e))return"";var t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_letVariableRegex.match(e);return t.getSuccess()?t.getGroups().getByName("LetExpressionName").toString():""},ResolveLetExpressions:function(e){var t,n,r=new(System.Collections.Generic.Dictionary$2(System.String,System.String)).ctor,s,a;t=Bridge.getEnumerator(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_letStatementRegexList);try{for(;t.moveNext();){s=t.Current,a=s.matches(e),n=Bridge.getEnumerator(a);try{for(;n.moveNext();){var i=Bridge.cast(n.Current,System.Text.RegularExpressions.Match),l=i.getGroups().getByName("LetExpressionName").toString(),o=i.getGroups().getByName("Expression").toString();r.containsKey(l)||r.add(l,o)}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return r}}},fields:{s_afterjoinOperatorApplyPolicies:null,s_afterRenderApplyPolicies:null,s_afterEvaluatePluginPolicies:null,s_afterFindApplyPolicies:null,s_afterFindInApplyPolicies:null,s_afterFindInEndOrContinuePolicies:null,s_afterSearchApplyPolicies:null,m_queryParameters:null,m_remoteSchemaResolver:null,m_remoteColumnMappingsToTables:null,m_remoteDatabaseMappingToClusters:null,m_availableClusters:null,m_allowClientDirectives:!1,m_contextCache:null},props:{TableNames:null,FunctionMappings:null,ColumnMappingsToTables:null,ColumnMappingsToWildcardedTables:null,OverridingColumnMapping:null,OverridingDatabaseMapping:null,OverridingTablesMapping:null,RemoteTableNames:{get:function(){return this.OverridingTablesMapping!=null?System.Linq.Enumerable.from(this.OverridingTablesMapping,System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).selectMany(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f46):null}},FunctionNames:{get:function(){return this.FunctionMappings!=null?System.Linq.Enumerable.from(this.FunctionMappings.Keys,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f47):System.Linq.Enumerable.empty()}},AllowQueryParameters:!1,Cluster:null,DatabaseSchema:null,Database:{get:function(){return this.DatabaseSchema!=null?this.DatabaseSchema.Database:null}},Databases:{get:function(){return this.Cluster!=null?this.Cluster.Databases:null}},Tables:{get:function(){return this.DatabaseSchema!=null&&this.DatabaseSchema.Database!=null?this.DatabaseSchema.Database.Tables:null}},Functions:{get:function(){return this.DatabaseSchema!=null&&this.DatabaseSchema.Database!=null?this.DatabaseSchema.Database.Functions:null}},ContextCache:{get:function(){return this.m_contextCache},set:function(e){this.m_contextCache=e}}},ctors:{init:function(){this.s_afterjoinOperatorApplyPolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f39(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterRenderApplyPolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f40(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterEvaluatePluginPolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f41(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterFindApplyPolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f42(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterFindInApplyPolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f43(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterFindInEndOrContinuePolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f44(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterSearchApplyPolicies=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f45(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).$ctor1(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_afterFunctionsApplyPolicies)),this.m_remoteColumnMappingsToTables=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)))).ctor,this.m_remoteDatabaseMappingToClusters=new(System.Collections.Generic.Dictionary$2(System.String,System.Collections.Generic.List$1(System.String))).ctor,this.m_contextCache=new(System.Collections.Generic.Dictionary$2(System.Int32,Kusto.Data.IntelliSense.KustoCommandContext)).ctor},$ctor1:function(e,t,n,r,s,a,i){this.$initialize(),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ctor.call(this),this.Cluster=e,this.DatabaseSchema=t,this.m_queryParameters=n,this.m_remoteSchemaResolver=s,this.m_availableClusters=r,this.m_allowClientDirectives=i,this.AllowQueryParameters=a,this.Initialize(),this.LoadRules()},ctor:function(e){var t;this.$initialize(),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ctor.call(this),this.Cluster=e.Cluster.Clone(),this.DatabaseSchema=e.DatabaseSchema.Clone(),this.m_queryParameters=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,e.m_queryParameters)?(t=System.String,System.Linq.Enumerable.from(e.m_queryParameters,t).ToArray(t)):null,this.m_remoteSchemaResolver=e.m_remoteSchemaResolver,this.m_availableClusters=e.m_availableClusters,this.m_allowClientDirectives=e.m_allowClientDirectives,this.AllowQueryParameters=e.AllowQueryParameters,this.Initialize(),this.LoadRules()}},methods:{ResetState:function(){Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),this.OverridingColumnMapping)&&this.OverridingColumnMapping.clear(),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),this.OverridingDatabaseMapping)&&this.OverridingDatabaseMapping.clear(),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),this.OverridingTablesMapping)&&this.OverridingTablesMapping.clear()},Clone:function(){return new Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ctor(this)},UpdateProviderAvailableEntities:function(e,t){var n=this.ResolveKnownEntitiesFromContext(t),r=new(System.Collections.Generic.List$1(System.String)).ctor,s=this.ResolveEntitiesFromCommand(e,r,n);switch(s){case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities:this.RegisterCommandEntities(t,r,!0);break;case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None:case Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities:this.RegisterCommandEntities(t,r,!1);break}},ResolveKnownEntitiesFromContext:function(e){var t,n,r,s={v:null},a=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,i=new(System.Collections.Generic.List$1(System.String)).ctor,l={v:null},o=e.Operation===Kusto.Data.IntelliSense.ContextOperation.Union,d=e.Flatten(),m,c,p,h,g,S,y;t=Bridge.getEnumerator(d,Kusto.Data.IntelliSense.KustoCommandContext);try{for(;t.moveNext();){var f=t.Current,A={},C={},T={},K={v:null};if(this.ResolveRemoteContext(f.Context,A,C,T)){if(m=this.UpdateColumnsList(f,A.v,C.v,T.v),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),m)){n=Bridge.getEnumerator(m);try{for(;n.moveNext();)c=n.Current,p={},a.tryGetValue(c.key,p)||(p.v=new(System.Collections.Generic.List$1(System.String)).ctor),a.setItem(c.key,System.Linq.Enumerable.from(p.v,System.String).union(c.value).toList(System.String))}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}K.v=System.Linq.Enumerable.from(m.Values,System.Collections.Generic.List$1(System.String)).selectMany(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f48).toList(System.String)}this.UpdateDatabaseList(f,A.v,C.v),h={},this.OverridingDatabaseMapping.tryGetValue(f,h)&&(i=System.Linq.Enumerable.from(i,System.String).union(h.v).toList(System.String))}else if(Kusto.Cloud.Platform.Utils.ExtendedRegex.IsWildCardPattern(f.Context)){if(this.ColumnMappingsToWildcardedTables.tryGetValue(f,K),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.String,K.v)&&(g={v:Kusto.Cloud.Platform.Utils.ExtendedRegex.TryTransformWildCardPatternToRegex(f.Context)},g.v!=null)){if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,this.Tables)){var w=System.Linq.Enumerable.from(this.Tables,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).where(function(D,x){return function(I){return!I.IsInvisible&&x.v.isMatch(I.Name)}}(this,g)),v={v:new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(w.select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f49))},R=System.Linq.Enumerable.from(this.ColumnMappingsToTables,System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).where(function(D,x){return function(I){return x.v.contains(I.key.Context)}}(this,v));o?K.v=R.selectMany(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f50).distinct().toList(System.String):(S=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.Intersect(System.String,R.select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f50)),K.v=S!=null?(r=System.String,System.Linq.Enumerable.from(S,r).toList(r)):new(System.Collections.Generic.List$1(System.String)).ctor)}else K.v=new(System.Collections.Generic.List$1(System.String)).ctor;this.ColumnMappingsToWildcardedTables.setItem(f,System.Linq.Enumerable.from(K.v,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f37).toList(System.String)),this.PerformGroupActionOrInit(l,this.ColumnMappingsToWildcardedTables.getItem(f),o)}}else y=new Kusto.Data.IntelliSense.KustoCommandContext(f.Context),this.ColumnMappingsToTables.tryGetValue(y,K);this.PerformGroupActionOrInit(s,K.v,o)}}finally{Bridge.is(t,System.IDisposable)&&t.System$IDisposable$Dispose()}return!this.m_remoteColumnMappingsToTables.containsKey(e)&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String)),a)&&this.m_remoteColumnMappingsToTables.setItem(e,a),!this.OverridingDatabaseMapping.containsKey(e)&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$4(System.String,i)&&this.OverridingDatabaseMapping.setItem(e,i),this.ColumnMappingsToWildcardedTables.containsKey(e)||this.ColumnMappingsToWildcardedTables.setItem(e,(l.v!=null?System.Linq.Enumerable.from(l.v,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f37).toList(System.String):null)||new(System.Collections.Generic.List$1(System.String)).ctor),s.v!=null?System.Linq.Enumerable.from(s.v,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f37).toList(System.String):null},PerformGroupActionOrInit:function(e,t,n){if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.String,t)&&(t=new(System.Collections.Generic.List$1(System.String)).ctor),e.v==null){e.v=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(t);return}n?e.v.unionWith(t):e.v.intersectWith(t)},UpdateColumnsList:function(e,t,n,r){var s,a,i;return System.String.isNullOrEmpty(n)||this.m_remoteColumnMappingsToTables.containsKey(e)||this.m_remoteSchemaResolver!=null&&(s=this.m_remoteSchemaResolver.Kusto$Data$IntelliSense$IKustoIntelliSenseSchemaResolver$ResolveDatabaseSchema$1(t,n,r),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,s)?(a=System.Linq.Enumerable.from(s,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).selectMany(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f51).toList(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity),this.UpdateRemoteColumnMappingToTables(e,r,a),this.OverridingTablesMapping.setItem(e,System.Linq.Enumerable.from(a,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f49).toList(System.String))):(this.OverridingTablesMapping.setItem(e,new(System.Collections.Generic.List$1(System.String)).ctor),this.m_remoteColumnMappingsToTables.setItem(e,new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor))),i={},this.m_remoteColumnMappingsToTables.tryGetValue(e,i),i.v||new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor},UpdateRemoteColumnMappingToTables:function(e,t,n){var r,s,a,i;n.Count===1?r=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.MapColumnsToTables(n):(s=e.Operation===Kusto.Data.IntelliSense.ContextOperation.Union,a=null,a=s?System.Linq.Enumerable.from(n,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).selectMany(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f52).distinct().toList(System.String):Kusto.Cloud.Platform.Utils.ExtendedEnumerable.Intersect(System.String,System.Linq.Enumerable.from(n,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f52)),i=a!=null?System.Linq.Enumerable.from(a,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f37).toList(System.String):new(System.Collections.Generic.List$1(System.String)).ctor,r=function(l){return l.add(new Kusto.Data.IntelliSense.KustoCommandContext(t,e.Operation),i),l}(new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor)),this.m_remoteColumnMappingsToTables.setItem(e,r)},UpdateDatabaseList:function(e,t,n){var r=t,s,a;System.String.isNullOrEmpty(r)&&(r=this.Cluster!=null?this.Cluster.Alias:null),System.String.isNullOrEmpty(r)||this.OverridingDatabaseMapping.containsKey(e)||this.m_remoteSchemaResolver!=null&&(s=this.m_remoteSchemaResolver.Kusto$Data$IntelliSense$IKustoIntelliSenseSchemaResolver$ResolveDatabaseNames(r),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,s)&&!System.String.isNullOrEmpty(n)&&Kusto.Cloud.Platform.Utils.ExtendedRegex.IsWildCardPattern(n)&&(a=Kusto.Cloud.Platform.Utils.ExtendedRegex.TryTransformWildCardPatternToRegex(n),a!=null&&(s=System.Linq.Enumerable.from(s,System.String).where(function(i){return a.isMatch(i)}))),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,s)?this.OverridingDatabaseMapping.setItem(e,System.Linq.Enumerable.from(s,System.String).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f53).toList(System.String)):this.OverridingDatabaseMapping.setItem(e,new(System.Collections.Generic.List$1(System.String)).ctor))},ResolveRemoteContext:function(e,t,n,r){var s,a,i;return t.v="",n.v="",r.v="",System.String.isNullOrEmpty(e)?!1:(s=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_remoteContextRegex.match(e),s.getSuccess()?(a=!System.String.isNullOrEmpty(s.getGroups().getByName("HasClusterReference").toString()),a?Kusto.Cloud.Platform.Text.StringLiteral.TryParseStringLiteral(s.getGroups().getByName("Cluster").toString(),t):(t.v=this.Cluster!=null?this.Cluster.Alias:"",t.v==null&&(t.v="")),Kusto.Cloud.Platform.Text.StringLiteral.TryParseStringLiteral(s.getGroups().getByName("Database").toString(),n),i=!System.String.isNullOrEmpty(s.getGroups().getByName("HasDatabaseReference").toString()),r.v=s.getGroups().getByName("Context").toString(),!(!i&&System.String.isNullOrEmpty(n.v)&&(!a||System.String.isNullOrEmpty(t.v)))):!1)},Initialize:function(){Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.prototype.Initialize.call(this),this.ContextConnection="",this.Cluster==null||System.String.isNullOrWhiteSpace(this.Cluster.Alias)||(this.ContextConnection="cluster('"+(this.Cluster.Alias||"")+"')"),this.Database==null||System.String.isNullOrWhiteSpace(this.Database.Name)||(this.ContextConnection=(this.ContextConnection||"")+".database('"+(this.DatabaseSchema.Database.Name||"")+"')"),this.OverridingColumnMapping=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.ColumnMappingsToTables=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.ColumnMappingsToWildcardedTables=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.TableNames=new(System.Collections.Generic.List$1(System.String)).ctor,this.FunctionMappings=new(System.Collections.Generic.Dictionary$2(System.String,System.Tuple$2(System.String,System.Text.RegularExpressions.Regex))).ctor,this.CommandRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.GeneralRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.QueryParametersRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor},LoadRules:function(){var e,t,n,r;this.ColumnMappingsToTables=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.MapColumnsToTables(this.Tables),this.OverridingColumnMapping=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.ColumnMappingsToWildcardedTables=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.OverridingDatabaseMapping=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.OverridingTablesMapping=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,this.AddClientDirectiveRules(),this.AddFindOperator(),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldOperatorsAfterPipe,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_afterPipeRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Operator,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldSummarizeOperatorOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.m_commandsRequestingAggregators,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionAggregation,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_aggregateOperationOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorsRequestingAggregators,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceAfterBracketPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldDatabaseFunctionOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_clusterFunctionRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Database,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_databaseFunctionOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceStepBackPolicy,e)),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,this.m_availableClusters)&&this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldClusterNamesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_startOfCommandWithClusterRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Service,System.Linq.Enumerable.from(this.m_availableClusters,System.String).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f54).ToArray(System.String)),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e)),t=new(System.Collections.Generic.Dictionary$2(Kusto.Data.IntelliSense.KustoCommandContext,System.Collections.Generic.List$1(System.String))).ctor,Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,this.Databases)&&t.add(Kusto.Data.IntelliSense.KustoCommandContext.Empty,System.Linq.Enumerable.from(this.Databases,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f55).toList(System.String)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldDatabaseNamesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_startOfCommandWithDatabaseRegex,e.ContextualOptions=t,e.OverrideOptions=this.OverridingDatabaseMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Database,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForRemoteQueryOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_databaseFunctionInFindRegex,e.ContextualOptions=null,e.OverrideOptions=this.OverridingTablesMapping,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Table,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendCommaPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForRemoteQueryOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_databaseFunctionRegex,e.ContextualOptions=null,e.OverrideOptions=this.OverridingTablesMapping,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Table,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendPipePolicy,e)),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,this.Tables)&&(this.TableNames=System.Linq.Enumerable.from(this.Tables,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).where(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f56).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f49).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f57).toList(System.String),n=(e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTableNames,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_startOfLineWithSpaceOrAfterJoinRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendPipePolicy,e),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTableNamesForFindIn,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findInStartOrContinueListRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e)),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,this.Functions)&&(n.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionServerSide,System.Linq.Enumerable.from(this.Functions,Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f58).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f33).ToArray(System.String))],Kusto.Data.IntelliSense.CompletionOptionCollection),n.AfterApplyPolicies=System.Linq.Enumerable.from(this.Functions,Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity).toDictionary(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f58,u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f59,System.String,Kusto.Data.IntelliSense.ApplyPolicy)),this.GeneralRules.add(n),this.DefaultRule=n),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity,this.Tables)&&this.AddColumnRules(),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_agoContextRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_timespanOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.MoveAfterTheBracketPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTimespanOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_nowContextRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_negativeTimespanOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.MoveAfterTheBracketPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForJoin,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinFlavorsForJoin_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionKind,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinFlavorsOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendJoinClauseWithOpenningBracketPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldPostJoinOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_postJoinOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterjoinOperatorApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldRenderOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionRender,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldRenderKindKeywordOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderMultiChartsRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionRender,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_kindKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldRenderKindOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderKindOptionsRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionRender,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderKindOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldNumericScalarOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topOrLimitOrTakeOrSampleRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_numericScalarsOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topLimitTakeSampleKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldParseKeywordKindsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseKindChoose_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionKind,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_kindChooseKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldWithKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseWith_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_withKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldStarOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseStarOption_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseStarOption),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldParseTypesKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseTypesSuggest_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.DataType,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseSuggestedTypesKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForTopNestedAndTopHitters,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_ofKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForTopNestedAndTopHitters,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_ofKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topHittersKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOfKeywordOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForSampleDistinct,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_ofKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_sampleDistinctKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTopNestedKeywordOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywordPrefixRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Operator,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywords),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTopHittersKeywordOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topHittersKeywordPrefixRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Operator,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topHittersKeywords),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topHittersKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldTopNestedOthersOption,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedWithOthersOption,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionKind,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_withOthersKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldByKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_yieldByKeywordRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_byKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorsUsingByKeywordKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedAscendingDescendingRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_ascDescKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldAscendingDescendingOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topOrOrderAscendingDescendingRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_ascDescOrNullsLastNullsFirstKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topSortOrderKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldNullsFirstNullsLastOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topTopNestedSortOrderByAscDescRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_nullsLastFirstKeywordOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topTopNestedSortOrderKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.Cluster!=null&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity,this.Cluster.Plugins)&&(r=System.Linq.Enumerable.from(this.Cluster.Plugins,Kusto.Data.IntelliSense.KustoIntelliSensePluginEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f60).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f61).ToArray(System.String),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldEvaluateOperatorOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_evaluateRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,r),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_evaluateKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceAfterBracketPolicy,e.AfterApplyPolicies=this.s_afterEvaluatePluginPolicies,e))),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesRequestingAggregatorsRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionAggregation,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesAggregateOperationOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceAfterBracketPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForDefaultOrOn,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesBeforeDefaultOrOnRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesDefaultOrOnOptions),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForOn,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesBeforeOnRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesOnOptions),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForRange,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesBeforeRangeRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesInRangeOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceStepBackPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldMakeSeriesOperatorForBy,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesBeforeByRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_byKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldSearchKindOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKind_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.OptionKind,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKindOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.AddRangeOperator(),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity,this.Functions)&&(this.FunctionMappings=System.Linq.Enumerable.from(this.Functions,Kusto.Data.IntelliSense.KustoIntelliSenseFunctionEntity).toDictionary(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f62,u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f63,System.String,System.Tuple$2(System.String,System.Text.RegularExpressions.Regex))),this.AddQueryParameterRule(this.m_queryParameters)},AddClientDirectiveRules:function(){var e;this.m_allowClientDirectives&&(this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldClientDirectivesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_clientDirective_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.ClientDirective,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_clientDirectivesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,this.m_availableClusters)&&this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldClientDirective_ConnectOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_clientDirectiveConnect_Regex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Service,System.Linq.Enumerable.from(this.m_availableClusters,System.String).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f64)),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e)))},AddColumnRules:function(){var e,t=System.Linq.Enumerable.from(this.Tables,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).selectMany(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f65).ToArray(System.Object),n,r,s,a,i;System.Linq.Enumerable.from(t,System.Object).count()!==0&&(this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForFilterColumnInFindRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Column,System.Array.init(["*"],System.String))],Kusto.Data.IntelliSense.CompletionOptionCollection),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldPostSearchOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchLiteralsOptions,1),new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchInKeywordOptions,1),new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions),new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_kindKeywordOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e.AfterApplyPolicies=this.s_afterSearchApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldPostSearchKindOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchAfterKindContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchLiteralsOptions,1),new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchInKeywordOptions,1),new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e.AfterApplyPolicies=this.s_afterSearchApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldInsideSearchOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchMoreContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Literal,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_searchLiteralsOptions,1),new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e.AfterApplyPolicies=this.s_afterSearchApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilter,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForFilterColumnRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filterKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Column,System.Array.init(["*"],System.String))],Kusto.Data.IntelliSense.CompletionOptionCollection),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForFindProject,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Column,System.Array.init(["pack(*)"],System.String))],Kusto.Data.IntelliSense.CompletionOptionCollection),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForProject,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_projectKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectAway,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForProjectAway,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_projectAwayKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectRename,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForProjectRename,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_projectRenameKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_singleParamFunctionsColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.MoveAfterTheBracketPolicy,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AfterApplyPolicies=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_afterFunctionsApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForTwoParamFunctions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_twoParamFunctionsColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendCommaPolicy,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForThreeParamFunctions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_threeParamFunctionsColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendDoubleCommaPolicy,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForManyParamFunctions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_manyParamFunctionsColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendCommaPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_operatorContextForExtend_ColumnAndFunctionRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_projectExtendKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceAfterBracketPolicy,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForJoin,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_entitiesForJoin_ColumnsRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_joinKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topSortOrderReduceByRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topSortOrderReduceKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedSuggestingColumnsRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topNestedKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForOrdering,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topHittersSuggestingColumnsRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_topHittersKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesAndFunctionsForExtend,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_sampleDistinctSuggestingColumnsRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.AdditionalOptions=System.Array.init([new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_extendOperationOptions)],Kusto.Data.IntelliSense.CompletionOptionCollection),e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_sampleDistinctKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldKindFlavorsForReduceBy,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_reduceByColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_reduceKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForParse,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_parseKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForRender,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderTimePivotColumnContextRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_renderKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForDiffPatternsPluginSplitParameter,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_diffPatternsPluginSplitParameterRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_evaluateKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForMakeSeries,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesByRegex,e.ContextualOptions=this.ColumnMappingsToTables,e.OverrideOptions=this.OverridingColumnMapping,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_makeSeriesKeywords,e.OptionsKind=Kusto.Data.IntelliSense.OptionKind.Column,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy,e)),n=System.Linq.Enumerable.from(t,System.Object).where(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f66).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f67),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,n)&&(n=n.union(System.Linq.Enumerable.from(this.Tables,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f68)),r=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(n),s=u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f69(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldStringComparisonOptions,e.GroupNameToUseAfterMatch="MatchingString",e.MatchingTokens=r,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filteredColumnRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionFilter,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_stringOperatorOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.StringComparisonPolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filterKeywords,e.AfterApplyPolicies=s,e))),a=System.Linq.Enumerable.from(t,System.Object).where(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f70).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f67),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,a)&&this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldNumericComparisonOptions,e.GroupNameToUseAfterMatch="MatchingString",e.MatchingTokens=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(a),e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filteredColumnRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionFilter,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_numericOperatorOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filterKeywords,e)),i=System.Linq.Enumerable.from(t,System.Object).where(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f71).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f67),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,i)&&this.GeneralRules.add((e=new Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldDateTimeOperatorsOptions,e.GroupNameToUseAfterMatch="MatchingString",e.MatchingTokens=new(System.Collections.Generic.HashSet$1(System.String)).$ctor1(i),e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filterPredicateRightValueRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.FunctionScalar,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_datetimeOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceAfterBracketPolicy,e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_filterKeywords,e)))},SetQueryParametersRule:function(e){this.Locker,this.QueryParametersRules.clear(),this.AddQueryParameterRule(e)},AddQueryParameterRule:function(e){var t,n;e!=null&&System.Linq.Enumerable.from(e,System.String).any()&&this.QueryParametersRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.RuleKind.YieldQueryParameters,t.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_queryParametersRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Parameter,e),t.DefaultAfterApplyPolicy=(n=new Kusto.Data.IntelliSense.ApplyPolicy,n.Text="}",n),t))},AddRangeOperator:function(){var e;this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldRangeFromOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeFromRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeFromOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldRangeFromToOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeFromToRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeFromToOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldRangeFromToStepOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeFromToStepRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_rangeFromToStepOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddFindOperator:function(){var e;this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldPostFindOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findContextRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findWhereInOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterFindApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldPostFindInOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findInRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_postFindInOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterFindInApplyPolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldEndOrContinueFindInOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_FindInEndOrContinueListRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findInEndOrContinueOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterFindInEndOrContinuePolicies,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldPostFindInListOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findWhereRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findInPostListOptions),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.GeneralRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.RuleKind.YieldFindProjectSmartOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findProjectSmartRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.None,System.Array.init(["|"],System.String)),e.RequiredKeywords=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findKeywords,e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},RegisterCommandEntities:function(e,t,n){var r=new Kusto.Data.IntelliSense.KustoCommandContext(e.Context),s=this.ColumnMappingsToTables;if(this.m_remoteColumnMappingsToTables.containsKey(e)){var a={},i={},l={};this.ResolveRemoteContext(e.Context,a,i,l)&&(r=new Kusto.Data.IntelliSense.KustoCommandContext(l.v)),s=this.m_remoteColumnMappingsToTables.getItem(e)}n||s.containsKey(r)&&t.AddRange(s.getItem(r)),this.OverridingColumnMapping.setItem(e,System.Linq.Enumerable.from(t,System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f57).toList(System.String))},ResolveEntitiesFromCommand:function(e,t,n){var r,s={v:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.None},a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_removeStringLiteralsSurroundedBySpacesRegex.replace(e," "),i,l,o,d,m;if(a=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_removeCommentsRegex.replace(a,""),i=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_lastCommandSegmentRegex.match(a),i.getSuccess()&&(a=i.getGroups().getByName("LastSegment").toString()),l=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ParseCommandClauses(a),System.Linq.Enumerable.from(l,System.String).count()===1)return this.ResolveEntitiesFromClause(t,n,s,a);o=new(System.Collections.Generic.HashSet$1(System.String)).ctor,r=Bridge.getEnumerator(l,System.String);try{for(;r.moveNext();)d=r.Current,m=new(System.Collections.Generic.List$1(System.String)).ctor,s.v=this.ResolveEntitiesFromClause(m,n,s,d),o.unionWith(m)}finally{Bridge.is(r,System.IDisposable)&&r.System$IDisposable$Dispose()}return t.AddRange(o),s.v},InjectFunctionsAsLetStatementsIfNeeded:function(e,t){var n,r,s,a;if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$1(System.Collections.Generic.KeyValuePair$2(System.String,System.Tuple$2(System.String,System.Text.RegularExpressions.Regex)),this.FunctionMappings)){r=new System.Text.StringBuilder,n=Bridge.getEnumerator(this.FunctionMappings);try{for(;n.moveNext();){var i=n.Current,l=i.key,o=i.value.Item2,d=i.value.Item1;!t.contains(l)&&o.isMatch(e)&&(r.appendLine(d),t.add(l))}}finally{Bridge.is(n,System.IDisposable)&&n.System$IDisposable$Dispose()}r.getLength()>0&&(s=r.toString(),a=this.InjectFunctionsAsLetStatementsIfNeeded(s,t),e=(a||"")+(e||""))}return e},ResolveEntitiesFromClause:function(e,t,n,r){var s=this.InjectFunctionsAsLetStatementsIfNeeded(r,new(System.Collections.Generic.HashSet$1(System.String)).ctor),a=this.AnalyzeStatementsImpl(s,!1),i=a.Command,l;return System.String.isNullOrWhiteSpace(i)||(l=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.BuildOpEntitiesMap(i),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleRangeEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandlePrintEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleProjectEntities(e,n.v,l,t),n.v=this.HandleFindEntities(e,n.v,l,t),n.v=this.HandleSearchEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleExtendEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleMvexpandEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleSummarizeEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleMakeSeriesEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleTopNestedEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleReduceByEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleParseEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleGetSchemaEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleSampleDistinctEntities(e,n.v,l,t),n.v===Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities?t=e:n.v===Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.AppendEntities&&(t=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.String,t)?e:System.Linq.Enumerable.from(t,System.String).union(e).toList(System.String)),n.v=this.HandleProjectRenameEntities(e,n.v,l,t),n.v=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.HandleProjectAwayEntities(e,n.v,l,t)),n.v},HandleFindEntities:function(e,t,n,r){var s,a,i,l={v:null},o,d,m,c,p,h,g,S,y,f,A,C;if(!n.tryGetValue("find",l))return t;if(o=!1,d=System.String.endsWith(l.v,"|"),l.v=Kusto.Cloud.Platform.Utils.ExtendedString.TrimEnd(l.v,"|"),d){if(m=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_findProjectionRegex.match(l.v),m.getSuccess()){if(c=m.getGroups().getByName("projectedList").getValue(),p=c,c=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_packRgx.replace(c,""),Bridge.referenceEquals(c,p)||(o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,"pack_"))),h=new(System.Collections.Generic.List$1(System.String)).ctor,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveEntitiesFromList(h,c)){g=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.IntersectWith(System.String,h,r),s=Bridge.getEnumerator(g,System.String);try{for(;s.moveNext();)S=s.Current,o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,S))}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}}}else{if(r!=null){a=Bridge.getEnumerator(r,System.String);try{for(;a.moveNext();)y=a.Current,o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,y))}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}}o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,"pack_"))}f=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_withsourceExtractRegex.match(l.v),A=f.getSuccess()?f.getGroups().getByName("tableNameColumn").getValue():"source_",o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,A)),m.getSuccess()||(o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,"pack_")))}else if(r!=null){i=Bridge.getEnumerator(r,System.String);try{for(;i.moveNext();)C=i.Current,o=!!(o|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,C))}finally{Bridge.is(i,System.IDisposable)&&i.System$IDisposable$Dispose()}}return o&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities),t},HandleSearchEntities:function(e,t,n,r){var s,a={v:null},i,l;if(!n.tryGetValue("search",a))return t;if(i=!1,r!=null){s=Bridge.getEnumerator(r,System.String);try{for(;s.moveNext();)l=s.Current,i=!!(i|Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddFieldIfNotPresent(e,l))}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}}return i&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities),t},HandleProjectRenameEntities:function(e,t,n,r){var s,a,i={v:null},l,o,d,m,c,p;if(!n.tryGetValue("project-rename",i))return t;var h=new(System.Collections.Generic.List$1(System.String)).ctor,g=!1,S=System.String.split(i.v,System.Array.init([44],System.Char).map(function(y){return String.fromCharCode(y)}),null,1);if(Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.String,S))return t;l=Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$1(System.String,e),s=Bridge.getEnumerator(S);try{for(;s.moveNext();)o=s.Current,d=System.String.split(o,System.Array.init([61],System.Char).map(function(y){return String.fromCharCode(y)}),null,1),d.length===2&&(m=Kusto.Data.IntelliSense.ExpressionEntityParser.UnescapeEntityName(d[System.Array.index(0,d)]),c=Kusto.Data.IntelliSense.ExpressionEntityParser.UnescapeEntityName(d[System.Array.index(1,d)]),System.String.isNullOrEmpty(m)||System.String.isNullOrEmpty(c)||System.String.equals(m,c,4)||(h.add(c),e.contains(c)&&(e.remove(c),g=!0),e.contains(m)||(Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,m),g=!0)))}finally{Bridge.is(s,System.IDisposable)&&s.System$IDisposable$Dispose()}if(System.Linq.Enumerable.from(h,System.String).any()&&l&&Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,r)){a=Bridge.getEnumerator(System.Linq.Enumerable.from(r,System.String).except(h).ToArray(System.String));try{for(;a.moveNext();)p=a.Current,Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.AddEscapedEntityName(e,p)}finally{Bridge.is(a,System.IDisposable)&&a.System$IDisposable$Dispose()}}return g&&(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveResult.ReplaceEntities),t},AnalyzeCommand$1:function(e,t){var n=this.InjectFunctionsAsLetStatementsIfNeeded(e,new(System.Collections.Generic.HashSet$1(System.String)).ctor),r;return t!=null&&t.ContextCache!=null&&(this.ContextCache=new(System.Collections.Generic.Dictionary$2(System.Int32,Kusto.Data.IntelliSense.KustoCommandContext)).$ctor1(t.ContextCache)),System.String.indexOf(n,String.fromCharCode(59))<0?(r=new Kusto.Data.IntelliSense.AnalyzedCommand,r.Command=e,r.Context=this.ResolveContextFromCommand(n),r):this.AnalyzeStatementsImpl(n,!0)},AnalyzeCommand:function(e,t){var n,r;return System.String.isNullOrWhiteSpace(t)?e:e==null||System.String.isNullOrEmpty(e.Command)?this.AnalyzeCommand$1(t,null):(r=(e.Command||"")+(t||""),System.String.indexOf(t,String.fromCharCode(59))>=0||System.String.endsWith(e.Command.trim(),";")||Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_nonDefaultContextKeywordsRegex.isMatch(t)?this.AnalyzeCommand$1(r,null):(n=new Kusto.Data.IntelliSense.AnalyzedCommand,n.Command=r,n.Context=e.Context,n))},ResolveContextFromCommand:function(e){var t,n,r,s,a,i,l;if(System.String.isNullOrWhiteSpace(e))return Kusto.Data.IntelliSense.KustoCommandContext.Empty;if(n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_removeStringLiteralsSurroundedBySpacesRegex.replace(e," "),n=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_removeCommentsRegex.replace(n,""),n=n.trim(),r=Bridge.getHashCode(n),this.m_contextCache.containsKey(r))return this.m_contextCache.getItem(r);var o="",d=Kusto.Data.IntelliSense.ContextOperation.Intersect,m=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_nonDefaultContextKeywordsRegex.matches(n),c=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.GetLatestMatch(m),p=!1,h=!1;return c!=null&&(s=c.getGroups().get(0).toString(),a={},Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContextRegexes.tryGetValue(s,a)&&(o=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveContextUsingRegex(n,a.v,c.getIndex())),p=Bridge.referenceEquals(s,"find"),h=Bridge.referenceEquals(s,"search"),h&&!System.String.isNullOrEmpty(o)&&(d=Kusto.Data.IntelliSense.ContextOperation.Union)),p&&Bridge.referenceEquals(o,"")&&(o="database('*')"),System.String.isNullOrEmpty(o)&&(p?o="*":(i={Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandDefaultContext,Item2:null},o=(t=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveContextUsingRegex(n,i,0),t??""),h&&System.String.equals(o,"search")&&(o="*",d=Kusto.Data.IntelliSense.ContextOperation.Union))),l=System.String.isNullOrEmpty(o)?Kusto.Data.IntelliSense.KustoCommandContext.Empty:new Kusto.Data.IntelliSense.KustoCommandContext(o,d),this.m_contextCache.setItem(r,l),l},AnalyzeStatementsImpl:function(e,t){var n=new Kusto.Data.IntelliSense.AnalyzedCommand,r=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ResolveLetExpressions(e),s,a;if(n.Command=Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.FindLastStatement(e),(t||r.Count>0)&&(n.Context=this.ResolveContextFromCommand(n.Command)),r.Count===0)return n;for(;r.containsKey(n.Context.Context);)s=r.getItem(n.Context.Context),a=new System.Text.RegularExpressions.Regex.ctor("\\b"+(n.Context.Context||"")+"\\b(\\(.*?\\))?"),n.Command=a.replace(n.Command,s),r.remove(n.Context.Context),n.Context=this.ResolveContextFromCommand(s);return n},GetKnownEntities:function(e,t,n,r,s){var a,i,l,o={};return this.TryMatchSpecificRule(e,t,Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForFilterInFind,o)?(r.v=(a=System.String,System.Linq.Enumerable.from(o.v.GetOptions(t),a).toList(a)),n.containsKey(t)||n.setItem(t,r.v),s.v=n.getItem(t),!0):this.TryMatchSpecificRule((e||"")+" project ",t,Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProjectInFind,o)?(r.v=(i=System.String,System.Linq.Enumerable.from(o.v.GetOptions(t),i).toList(i)),n.containsKey(t)||n.setItem(t,r.v),s.v=n.getItem(t),!0):(e=(e||"")+" | project ",this.TryMatchSpecificRule(e,t,Kusto.Data.IntelliSense.RuleKind.YieldColumnNamesForProject,o)?(r.v=(l=System.String,System.Linq.Enumerable.from(o.v.GetOptions(t),l).toList(l)),n.containsKey(t)||n.setItem(t,r.v),s.v=n.getItem(t),!0):!1)},LoadCommandToolTips:function(){var e,t=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTip)).ctor,n,r,s,a,i,l,o,d,m,c,p,h,g,S,y,f,A,C,T,K,w,v,R,D,x,I,b,_,k,P,O,F,M,E,z,N,L,B,Q,H,q,Y,U;this.CommandToolTips=t,n=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="tostring",e.Summary="Converts the given value to string",e.Usage="... | extend str = <i>tostring</i>(Column1)",e),r=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,n.Parameters=r,r.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="T",e.Name="value",e.Description="The value to convert to string",e)),t.add(n),s=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="strlen",e.Summary="Returns the length of the given string",e.Usage="... | extend length = <i>strlen</i>(Column1)",e),a=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,s.Parameters=a,a.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="value",e.Description="The string being measured for length",e)),t.add(s),i=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="hash",e.Summary="Returns the xxhash value of a scalar value",e.Usage="... | extend hash = <i>hash</i>(Column1, 100)",e),l=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,i.Parameters=l,l.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="Every scalar type </b><i>except</i><b> Dynamic",e.Name="target",e.Description="The value the hash is calculated on",e)),l.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="long",e.Name="modulo",e.Description="The modulo value to be applied on the hash result",e)),t.add(i),o=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="iff",e.Summary="Returns one of two values, depending on whether the Boolean expression evaluates to true or false",e.Usage="... | extend val = <i>iff</i>(strlen(Column1) > 10, 'long', 'short')",e),d=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,o.Parameters=d,d.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="bool",e.Name="expression",e.Description="The Boolean expression you want to evaluate",e)),d.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="T",e.Name="trueValue",e.Description=" Returned if 'expression' evaluates to True",e)),d.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="T",e.Name="falseValue",e.Description="Returned if 'expression' evaluates to False",e)),t.add(o),m=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="extract",e.Summary="Produces a scalar using a regular expression (<a href=https://re2.googlecode.com/hg/doc/syntax.html>RE2 reference</a>)",e.Usage="... | extend number = <i>extract</i>(@'(\\d+)', 1, Column1, typeof(int))",e),c=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,m.Parameters=c,c.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="regex",e.Description="The regular expression to be applied",e)),c.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="int",e.Name="groupIndex",e.Description="The index of the matching group (1 = 1st matching group in regex, 2 = 2nd matching group, etc.)",e)),c.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="column",e.Name="columnName",e.Description="Specify column to operate on (can be calculated column)",e)),c.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="typename typeof(T)",e.Name="type",e.Description="Optional type to convert the result to",e.Optional=!0,e)),t.add(m),p=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="replace",e.Summary="Replace a string with another string using a regular expression (<a href=https://re2.googlecode.com/hg/doc/syntax.html>RE2 reference</a>)",e.Usage="... | replace str = <i>replace</i>(@'foo', @'bar', Column1)",e),h=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,p.Parameters=h,h.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="matchingPattern",e.Description="String or regular expression to be applied for matching",e)),h.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="rewritePattern",e.Description="String or regular expression to be used for rewrite (\\1 = 1st matching group in regex, \\2 = 2nd matching group, etc.)",e)),h.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="column",e.Name="columnName",e.Description="Specify column to operate on (can be calculated column)",e)),t.add(p),g=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="extractjson",e.Summary="Produces a scalar using a JSONPath expression (<a href=http://goessner.net/articles/JsonPath/>JSONPath reference</a>)",e.Usage="... | extend number = <I>extractjson</I>(@'$.Object.Property', Column1, typeof(int))",e),S=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,g.Parameters=S,S.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="jsonPath",e.Description="The JSON Path expression to be used",e)),S.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="column",e.Name="columnName",e.Description="Specify column to operate on (can be calculated column)",e)),S.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="typename typeof(T)",e.Name="type",e.Description="Optional type to convert the result to",e.Optional=!0,e)),t.add(g),y=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="parsejson",e.Summary="Converts a JSON string into a value of type 'dynamic' (an object), whose properties can be further accessed using dot or bracket notation",e.Usage="... | extend obj = <I>parsejson</I>(Column1)",e),f=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,y.Parameters=f,f.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="columnName",e.Description="Any valid query expression that returns a string (e.g. a column name)",e)),t.add(y),A=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="toupper",e.Summary="Converts the given string to upper case",e.Usage="... | extend upper = <I>topupper</I>(Column1)",e),C=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,A.Parameters=C,C.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="value",e.Description="The string to be converted to upper case",e)),t.add(A),T=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="tolower",e.Summary="Converts the given string to lower case",e.Usage="... | extend lower = <I>tolower</I>(Column1)",e),K=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,T.Parameters=K,K.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="value",e.Description="The string to be converted to lower case",e)),t.add(T),w=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="substring",e.Summary="Retrieves a substring from the given string",e.Usage="... | extend substr = <I>substring</I>(Column1,1,3)",e),v=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,w.Parameters=v,v.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="value",e.Description="The string to be substringed",e)),v.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="long",e.Name="startIndex",e.Description="The zero-based starting character position of a substring in this instance",e)),v.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="long",e.Name="count",e.Description="The number of characters in the substring",e.Optional=!0,e)),t.add(w),R=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="split",e.Summary="Retrieves a string array that contains the substrings of the given source string that are delimited by the given delimiter",e.Usage='... | extend split = <I>split</I>(Column1,";")',e),D=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,R.Parameters=D,D.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="source",e.Description="The string to be splitted",e)),D.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="delimiter",e.Description="The delimiter on which the split will be based on",e)),D.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="integer",e.Name="index",e.Description="The index of the requested substring",e.Optional=!0,e)),t.add(R),x=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="strcat",e.Summary="Concatenates several strings together (up-to 16 parameters)",e.Usage="... | extend s = <I>strcat</I>('KU', 'S', 'TO')",e),I=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,x.Parameters=I,I.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="value",e.Description="First part",e)),I.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="values",e.Description="Other parts",e.IsArgsArray=!0,e.Optional=!0,e)),t.add(x),b=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="countof",e.Summary="Returns the number of pattern matches in the given string",e.Usage="... | extend matches = <i>countof</i>(Expression, Pattern, Type)",e),_=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,b.Parameters=_,_.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="Expression",e.Description="The string to match the pattern to",e)),_.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="Pattern",e.Description="The pattern to match the expression to. Can be a regular expression",e)),_.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="string",e.Name="Type",e.Description="For substring count leave empty or specifiy 'normal', for regular expression count specify 'regex'",e)),t.add(b),k=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="percentile",e.Summary="Returns the estimated value for the given percentile over source values",e.Usage="... | summarize <i>percentile</i>(source, percent) ...",e),P=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,k.Parameters=P,P.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="numeric </b><i>or</i><b> DateTime </b><i>or</i><b> TimeSpan",e.Name="Source",e.Description="Range of values over which to estimate percentile",e)),P.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="real",e.Name="percent",e.Description="Value in the range [0..100] giving the percentile to estimate",e)),t.add(k),O=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="percentiles",e.Summary="Returns the estimated value for each of the given percentiles over source values",e.Usage="... | summarize <i>percentiles</i>(source, percent, ...) ...",e),F=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,O.Parameters=F,F.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="numeric </b><i>or</i><b> DateTime </b><i>or</i><b> TimeSpan",e.Name="Source",e.Description="Range of values over which to estimate percentile",e)),F.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="real",e.Name="percent",e.Description="Value in the range [0..100] giving the percentile to estimate",e.IsArgsArray=!0,e)),t.add(O),M=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="percentilew",e.Summary="Returns the estimated value for the given percentile over weighted source values",e.Usage="... | summarize <i>percentilew</i>(source, weight, percent) ...",e),E=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,M.Parameters=E,E.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="numeric </b><i>or</i><b> DateTime </b><i>or</i><b> TimeSpan",e.Name="Source",e.Description="Range of values over which to estimate percentile",e)),E.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="integer",e.Name="Weight",e.Description="Range of weights to give to each source value",e)),E.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="real",e.Name="percent",e.Description="Value in the range [0..100] giving the percentile to estimate",e)),t.add(M),z=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="percentilesw",e.Summary="Returns the estimated value for each of the given percentiles over weighted source values",e.Usage="... | summarize <i>percentilesw</i>(source, weight, percent, ...) ...",e),N=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,z.Parameters=N,N.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="numeric </b><i>or</i><b> DateTime </b><i>or</i><b> TimeSpan",e.Name="Source",e.Description="Range of values over which to estimate percentile",e)),N.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="integer",e.Name="Weight",e.Description="Range of weights to give to each source value",e)),N.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="real",e.Name="percent",e.Description="Value in the range [0..100] giving the percentile to estimate",e.IsArgsArray=!0,e)),t.add(z),L=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="ingestion_time",e.Summary="returns a datetime value specifying when the record was first available for query",e.Usage="... | extend length = <i>ingestiontime</i>()",e),L.Parameters=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,t.add(L),B=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="countif",e.Summary="Returns the number of rows that matches the predicate",e.Usage="... | summarize <i>countif</i>(Predicate)",e),Q=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,B.Parameters=Q,Q.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="boolean",e.Name="Predicate",e.Description="Boolean expression used as predicate",e)),t.add(B),H=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="dcountif",e.Summary="Returns the number of unique values of Expression in rows that matches the predicate",e.Usage="... | summarize <i>dcountif</i>(Expression, Predicate, Accuracy)",e),q=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,H.Parameters=q,q.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="T",e.Name="Expression",e.Description="The unique values to count",e)),q.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="boolean",e.Name="Predicate",e.Description="Boolean expression used as predicate",e)),q.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="integer",e.Name="Accuracy",e.Description="Optional. Controls the balance between speed and accuracy",e)),t.add(H),Y=(e=new Kusto.Data.IntelliSense.IntelliSenseCommandTip,e.Name="sumif",e.Summary="Returns the sum of rows that matches the predicate",e.Usage="... | summarize <i>sumif</i>(Predicate, Column)",e),U=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter)).ctor,Y.Parameters=U,U.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="boolean",e.Name="Predicate",e.Description="Boolean expression used as predicate",e)),U.add((e=new Kusto.Data.IntelliSense.IntelliSenseCommandTipParameter,e.DataType="numeric </b><i>or</i><b> DateTime </b><i>or</i><b> TimeSpan",e.Name="Column",e.Description="Column or other scalar funciton to calculate the sum of",e)),t.add(Y)}}}),Bridge.define("$AnonymousType$1",u,{$kind:"anonymous",ctors:{ctor:function(e,t,n){this.Name=e,this.ParentTableName=t,this.TypeCode=n}},methods:{equals:function(e){return Bridge.is(e,u.$AnonymousType$1)?Bridge.equals(this.Name,e.Name)&&Bridge.equals(this.ParentTableName,e.ParentTableName)&&Bridge.equals(this.TypeCode,e.TypeCode):!1},getHashCode:function(){return Bridge.addHash([7550196186,this.Name,this.ParentTableName,this.TypeCode])},toJSON:function(){return{Name:this.Name,ParentTableName:this.ParentTableName,TypeCode:this.TypeCode}}},statics:{methods:{$metadata:function(){return{m:[{a:2,n:"Name",t:16,rt:System.String,g:{a:2,n:"get_Name",t:8,rt:System.String,fg:"Name"},fn:"Name"},{a:2,n:"ParentTableName",t:16,rt:System.String,g:{a:2,n:"get_ParentTableName",t:8,rt:System.String,fg:"ParentTableName"},fn:"ParentTableName"},{a:2,n:"TypeCode",t:16,rt:Kusto.Data.IntelliSense.EntityDataType,g:{a:2,n:"get_TypeCode",t:8,rt:Kusto.Data.IntelliSense.EntityDataType,fg:"TypeCode",box:function(e){return Bridge.box(e,Kusto.Data.IntelliSense.EntityDataType,System.Enum.toStringFn(Kusto.Data.IntelliSense.EntityDataType))}},fn:"TypeCode"}]}}}}}),Bridge.ns("Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider,{f1:function(e){return"-"+(e||"")},f2:function(e){return e.add("series_stats",System.Array.init(["min","min_idx","max","max_idx","avg","stdev","variance"],System.String)),e.add("series_fit_line",System.Array.init(["rsquare","slope","variance","rvariance","interception","line_fit"],System.String)),e.add("series_fit_2lines",System.Array.init(["rsquare","split_idx","variance","rvariance","line_fit","right_rsquare","right_slope","right_interception","right_variance","right_rvariance","left_rsquare","left_slope","left_interception","left_variance","left_rvariance"],System.String)),e.add("series_periods_detect",System.Array.init(["periods","scores"],System.String)),e.add("series_periods_validate",System.Array.init(["periods","scores"],System.String)),e},f3:function(e){return e},f4:function(e){return Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceStepBackPolicy},f5:function(e){return e.add("filter"),e.add("where"),e},f6:function(e){return e.add("project"),e},f7:function(e){return e.add("project-away"),e},f8:function(e){return e.add("project-rename"),e},f9:function(e){return e.add("project"),e.add("extend"),e},f10:function(e){return e.add("join"),e},f11:function(e){return e.add("top"),e.add("top-hitters"),e.add("order"),e.add("sort"),e.add("reduce"),e.add("top-nested"),e},f12:function(e){return e.add("top"),e.add("top-hitters"),e.add("order"),e.add("sort"),e.add("reduce"),e.add("top-nested"),e.add("render"),e},f13:function(e){return e.add("top"),e.add("order"),e.add("sort"),e},f14:function(e){return e.add("top"),e.add("top-hitters"),e.add("order"),e.add("sort"),e.add("top-nested"),e},f15:function(e){return e.add("reduce"),e},f16:function(e){return e.add("parse"),e},f17:function(e){return e.add("render"),e},f18:function(e){return e.add("top"),e.add("limit"),e.add("take"),e.add("top-nested"),e.add("top-hitters"),e.add("sample"),e.add("sample-distinct"),e},f19:function(e){return e.add("evaluate"),e},f20:function(e){return e.add("summarize"),e},f21:function(e){return e.add("distinct"),e},f22:function(e){return e.add("top-nested"),e},f23:function(e){return e.add("top-hitters"),e},f24:function(e){return e.add("sample-distinct"),e},f25:function(e){return e.add("top-nested"),e.add("top-hitters"),e.add("summarize"),e.add("distinct"),e},f26:function(e){return e.add("database"),e},f27:function(e){return e.add("find"),e},f28:function(e){return e.add("search"),e},f29:function(e){return e.add("make-series"),e},f30:function(e){return e.add("cnt","count"),e.add("percentiles","percentile"),e.add("percentilew","percentile"),e.add("percentilesw","percentile"),e.add("makelist","list"),e.add("makeset","set"),e.add("make_list","list"),e.add("make_set","set"),e.add("make_dictionary","dictionary"),e.add("make_bag","bag"),e},f31:function(e){return e.add("join"),e.add("project"),e.add("summarize"),e.add("reduce"),e.add("getschema"),e.add("distinct"),e},f32:function(e){return e.add("join",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Join,Item2:null}),e.add(".show",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Show,Item2:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_showCommandFixRegex}),e.add("range",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Range,Item2:null}),e.add("toscalar",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_ToScalar,Item2:null}),e.add("{",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Callable,Item2:null}),e.add("let",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Let,Item2:null}),e.add("union",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Union,Item2:null}),e.add("find",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Find,Item2:null}),e.add("search",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_Search,Item2:null}),e.add("#connect",{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_commandContext_ConnectDirective,Item2:null}),e},f33:function(e){return e},f34:function(e){return System.Text.RegularExpressions.Regex.escape(e)},f35:function(e){return e.add(new System.Text.RegularExpressions.Regex.ctor("\\blet\\s+(?<LetExpressionName>\\w+)\\s*=.*?\\{(?<Expression>.+?)\\}",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions)),e.add(new System.Text.RegularExpressions.Regex.ctor("\\blet\\s+(?<LetExpressionName>\\w+)\\s*=\\s*(?<Expression>.+?);",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions)),e},f36:function(e){return e.Name},f37:function(e){return e},f38:function(e){return(e.getGroups().get(1).getValue()||"")+" "+(e.getGroups().get(3).getValue()||"")},f39:function(e){return e.add("kind=",Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy),e.add("(",Kusto.Data.IntelliSense.ApplyPolicy.AppendJoinClauseWithoutOpenningBracketPolicy),e},f40:function(e){var t;return e.add("timechart",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" with 'cats' ",t)),e.add("barchart",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" with 'dogs' ",t)),e},f41:function(e){var t;return e.add("autocluster",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text="()",t.OffsetToken=")",t.OffsetPosition=0,t)),e.add("diffpatterns",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text='("split= ")',t.OffsetToken="=",t.OffsetPosition=2,t)),e.add("basket",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text="()",t.OffsetToken=")",t.OffsetPosition=0,t)),e.add("extractcolumns",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text="()",t.OffsetToken=")",t.OffsetPosition=0,t)),e},f42:function(e){return e.add("where",Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy),e.add("in",Kusto.Data.IntelliSense.ApplyPolicy.AppendFindInClausePolicy),e},f43:function(e){return e.add("(",Kusto.Data.IntelliSense.ApplyPolicy.AppendFindInClauseWithoutOpenningBracketPolicy),e},f44:function(e){var t;return e.add(")",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" where ",t)),e.add(",",Kusto.Data.IntelliSense.ApplyPolicy.AppendFindInClauseWithoutOpenningBracketPolicy),e},f45:function(e){return e.add('""',Kusto.Data.IntelliSense.ApplyPolicy.AppendSpaceStepBackPolicy),e.add("kind=",Kusto.Data.IntelliSense.ApplyPolicy.NullApplyPolicy),e.add("in",Kusto.Data.IntelliSense.ApplyPolicy.AppendSearchInClausePolicy),e},f46:function(e){return e.value},f47:function(e){return e.toLowerCase()},f48:function(e){return e},f49:function(e){return e.Name},f50:function(e){return e.value},f51:function(e){return e.Tables},f52:function(e){return System.Linq.Enumerable.from(e.Columns,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(u.$.Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.f36)},f53:function(e){return"'"+(e||"")+"'"},f54:function(e){return"'"+(e||"")+"'"},f55:function(e){return"'"+(e.Name||"")+"'"},f56:function(e){return!e.IsInvisible},f57:function(e){return e},f58:function(e){return e.CallName},f59:function(e){return Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy},f60:function(e){return(e.Name||"")+"()"},f61:function(e){return e},f62:function(e){return e.Name},f63:function(e){return{Item1:Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_removeCommentsRegex.replace(e.Expression,""),Item2:new System.Text.RegularExpressions.Regex.ctor("\\b"+(e.Name||"")+"\\b",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.DefaultRegexOptions)}},f64:function(e){return"cluster('"+(e||"")+"')"},f65:function(e){return System.Linq.Enumerable.from(e.Columns,Kusto.Data.IntelliSense.KustoIntelliSenseColumnEntity).select(function(t){return new u.$AnonymousType$1(t.Name,e.Name,t.TypeCode)})},f66:function(e){return e.TypeCode===Kusto.Data.IntelliSense.EntityDataType.String},f67:function(e){return Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule.GetHashStringForContextAndToken(e.ParentTableName,e.Name)},f68:function(e){return Kusto.Data.IntelliSense.ContextualTokensWithRegexIntelliSenseRule.GetHashStringForContextAndToken(e.Name,"*")},f69:function(e){return e.add("in",Kusto.Data.IntelliSense.ApplyPolicy.AppendStringLiteralArrayPolicy),e.add("!in",Kusto.Data.IntelliSense.ApplyPolicy.AppendStringLiteralArrayPolicy),e},f70:function(e){return e.TypeCode!==Kusto.Data.IntelliSense.EntityDataType.String},f71:function(e){return e.TypeCode===Kusto.Data.IntelliSense.EntityDataType.DateTime}}),Bridge.define("Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider",{inherits:[Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase],statics:{fields:{s_dmRuleKinds:null,s_ingestionQueueTypes:null,s_clearIngestionSupportedQueuesTypes:null,s_lineWithDotBeginningRegex:null,s_showCommandRegex:null,s_showClusterCommandRegex:null,s_showClusterSettingsCommandRegex:null,s_showClusterSettingsVersionsCommandRegex:null,s_showClusterSettingsWithEncryptedSecretsCommandRegex:null,s_showPrincipalRolesCommandRegex:null,s_alterCommandRegex:null,s_alterClusterSettingsCommandRegex:null,s_alterClusterSettingsFromCommandRegex:null,s_alterMergeCommandRegex:null,s_alterObtainerQueuesCommandRegex:null,s_addOrAlterlterEventHubIngestionSourceCommandRegex:null,s_createCommandRegex:null,s_dropCommandRegex:null,s_addCommandRegex:null,s_addOrAlterCommandRegex:null,s_addDataObtainerCommandRegex:null,s_addDataObtainerInitializeCommandRegex:null,s_addDataObtainerInitializeWithCommandRegex:null,s_getCommandRegex:null,s_getIngestionQueuesCommandRegex:null,s_getIngestionQueuesTypeCommandRegex:null,s_flushCommandRegex:null,s_initializeCommandRegex:null,s_initializeClusterConfigCommandRegex:null,s_initializeClusterConfigEncryptionCommandRegex:null,s_resetCommandRegex:null,s_setCommandRegex:null,s_showPurgesCommandRegex:null,s_showPurgesFromCommandRegex:null,s_showPurgesToCommandRegex:null,s_purgeTableCommandRegex:null,s_purgeMaterializedViewTableCommandRegex:null,s_purgeTableInDatabaseCommandRegex:null,s_purgeTableRecordsInDatabaseCommandRegex:null,s_purgeRetryCommandRegex:null,s_purgesFromRetryCommandRegex:null,s_purgesToRetryCommandRegex:null,s_cancelPurgeCommandRegex:null,s_cancelAllPurgeCommandRegex:null,s_refeshPolicyCacheRegex:null,s_clearCommandRegex:null,s_clearIngestionQueuesCommandRegex:null,s_adminOperationOptions:null,s_showCommandOptions:null,s_showClustersKeywordOptions:null,s_showClusterSettingsKeywordOptions:null,s_showClusterSettingsVersionsKeywordOptions:null,s_showClusterSettingsWithEncryptedSecretsOption:null,s_showPrincipalRolesKeywordOptions:null,s_alterClusterSettingsFromKeywordOptions:null,s_alterCommandOptions:null,s_createCommandOptions:null,s_dropCommandOptions:null,s_addCommandOptions:null,s_addOrAlterCommandOptions:null,s_addDataObtainerCommandOptions:null,s_addDataObtainerInitializeCommandOptions:null,s_addDataObtainerInitializeWithCommandOptions:null,s_getCommandOptions:null,s_getIngestionQueuesCommandOptions:null,s_getIngestionQueuesTypeCommandOptions:null,s_flushCommandOptions:null,s_initializeCommandOptions:null,s_initializeClusterConfigurationCommandOptions:null,s_initializeClusterConfigurationEncryptionCommandOptions:null,s_resetCommandOptions:null,s_setCommandOptions:null,s_alterObtainerQueuesOptions:null,s_addOrAlterEventHubIngestionSourceOptions:null,s_showPurgeCommandOptions:null,s_purgeFromCommandOptions:null,s_showPurgeToCommandOptions:null,s_purgeTableCommandOptions:null,s_purgeMaterializedViewTableCommandOptions:null,s_purgeTableInDatabaseCommandOptions:null,s_purgeTableRecordsInDatabaseCommandOptions:null,s_purgeRetryCommandOptions:null,s_purgeFromRetryCommandOptions:null,s_purgeToRetryCommandOptions:null,s_showPurgeCancelCommandOptions:null,s_showPurgeCancelAllCommandsOptions:null,s_refeshPolicyCacheOptions:null,s_clearCommandOptions:null},ctors:{init:function(){this.s_dmRuleKinds=System.Enum.getNames(Kusto.Data.DmSettingsType),this.s_ingestionQueueTypes=System.Linq.Enumerable.from(System.Enum.getNames(Kusto.Data.IngestionQueueType),System.String).select(u.$.Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.f1).ToArray(System.String),this.s_clearIngestionSupportedQueuesTypes=System.Linq.Enumerable.from(u.$.Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.f2(new(System.Collections.Generic.List$1(Kusto.Data.IngestionQueueType)).ctor),Kusto.Data.IngestionQueueType).select(u.$.Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.f3).ToArray(System.String),this.s_lineWithDotBeginningRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterSettingsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+settings\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterSettingsVersionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+settings\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterSettingsWithEncryptedSecretsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s+settings\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showPrincipalRolesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+principal\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterClusterSettingsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+cluster\\s+settings\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterClusterSettingsFromCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+cluster\\s+settings\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMergeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter-merge\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterObtainerQueuesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(alter|alter-merge|drop)\\s+obtainer\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addOrAlterlterEventHubIngestionSourceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add-or-alter\\s+eventhub\\s+ingestion\\s+source\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addOrAlterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add-or-alter\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addDataObtainerCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+data\\s+obtainer\\s+\\S+\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addDataObtainerInitializeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+data\\s+obtainer\\s+\\S+\\s+\\S+\\s+initialize\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addDataObtainerInitializeWithCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+data\\s+obtainer\\s+\\S+\\s+\\S+\\s+initialize\\s+with\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_getCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.get\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_getIngestionQueuesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(get|show)\\s+ingestion\\s+queues\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_getIngestionQueuesTypeCommandRegex=new System.Text.RegularExpressions.Regex.ctor('^\\s*\\.(get|show)\\s+ingestion\\s+queues\\s+"(.*?)"\\s+$',Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_flushCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.flush\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_initializeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.initialize\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_initializeClusterConfigCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.initialize\\s+cluster\\s+configuration\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_initializeClusterConfigEncryptionCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.initialize\\s+cluster\\s+configuration\\s+\\S+\\s+encryption\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_resetCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.reset\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showPurgesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+purges\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showPurgesFromCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+purges\\s+from\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showPurgesToCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+purges\\s+from\\s+\\S+\\s+to\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+table\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeMaterializedViewTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+materialized-view\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeTableInDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+table\\s+\\S+\\s+in\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeTableRecordsInDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+(table|materialized-view)\\s+\\S+\\s+records\\s+in\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeRetryCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.retry\\s+purges\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgesFromRetryCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.retry\\s+purges\\s+from\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgesToRetryCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.retry\\s+purges\\s+from\\s+\\S+\\s+to\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_cancelPurgeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.cancel\\s+purge\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_cancelAllPurgeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.cancel\\s+all\\s+purges\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_refeshPolicyCacheRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.refresh\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clearCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.clear\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clearIngestionQueuesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.clear\\s+ingestion\\s+queues\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_adminOperationOptions=System.Array.init(["show","get","alter","alter-merge","add","add-or-alter","create","drop","flush","initialize","reset","set","purge table","purge materialized-view","retry purge","retry purges","cancel purge","cancel all purges","refresh","clear"],System.String),this.s_showCommandOptions=System.Array.init(["version","diagnostics","cluster","query service uri","lagging queues","ingestion queues","ingestion source types","ingestion resources","ingestions status tables","Geneva ingestion sources settings","EventHub ingestion sources settings","EventGrid ingestion sources settings","principal","purges"],System.String),this.s_showClustersKeywordOptions=System.Array.init(["principals","settings","monitoring"],System.String),this.s_showClusterSettingsKeywordOptions=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_dmRuleKinds,this.s_showClusterSettingsVersionsKeywordOptions=System.Array.init(["version","versions"],System.String),this.s_showClusterSettingsWithEncryptedSecretsOption=System.Array.init(["with encrypted secrets"],System.String),this.s_showPrincipalRolesKeywordOptions=System.Array.init(["roles","@'principal' roles"],System.String),this.s_alterClusterSettingsFromKeywordOptions=System.Array.init(["from"],System.String),this.s_alterCommandOptions=System.Array.init(["cluster settings","aggregator storage accounts","obtainer","obtainers","Geneva ingestion source"],System.String),this.s_createCommandOptions=System.Array.init(["tempstorage","ingestions status table"],System.String),this.s_dropCommandOptions=System.Array.init(["cluster admins","cluster users","cluster ingestors","obtainer","aggregator storage accounts","obtainers","Geneva ingestion source"],System.String),this.s_addCommandOptions=System.Array.init(["ingestion interval for","data obtainer","cluster admins","cluster users"],System.String),this.s_addOrAlterCommandOptions=System.Array.init(["eventhub ingestion source"],System.String),this.s_addDataObtainerCommandOptions=System.Array.init(["initialize"],System.String),this.s_addDataObtainerInitializeCommandOptions=System.Array.init(["with"],System.String),this.s_addDataObtainerInitializeWithCommandOptions=System.Array.init(["encryption certificate"],System.String),this.s_getCommandOptions=System.Array.init(["lagging queues","ingestion queues","source containers","ingestion resources","ingestions status tables"],System.String),this.s_getIngestionQueuesCommandOptions=System.Linq.Enumerable.from(System.Array.init(["lengths","withsas"],System.String),System.String).concat(Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_ingestionQueueTypes).ToArray(System.String),this.s_getIngestionQueuesTypeCommandOptions=System.Array.init(["withsas","withencryptedkeys"],System.String),this.s_flushCommandOptions=System.Array.init(["configuration"],System.String),this.s_initializeCommandOptions=System.Array.init(["cluster configuration"],System.String),this.s_initializeClusterConfigurationCommandOptions=System.Array.init(["encryption"],System.String),this.s_initializeClusterConfigurationEncryptionCommandOptions=System.Array.init(["certificate"],System.String),this.s_resetCommandOptions=System.Array.init(["cluster configuration"],System.String),this.s_setCommandOptions=System.Array.init(["cluster as secondary"],System.String),this.s_alterObtainerQueuesOptions=System.Array.init([System.Enum.toString(Kusto.Data.IngestionQueueType,Kusto.Data.IngestionQueueType.InternalQueue),System.Enum.toString(Kusto.Data.IngestionQueueType,Kusto.Data.IngestionQueueType.InputQueue)],System.String),this.s_addOrAlterEventHubIngestionSourceOptions=System.Array.init(["settings with (Configuration='', EncryptionCertificateThumbprint='')"],System.String),this.s_showPurgeCommandOptions=System.Array.init(["from","<OperationId>","in database <DatabaseName>"],System.String),this.s_purgeFromCommandOptions=System.Array.init(["to","in database <DatabaseName>"],System.String),this.s_showPurgeToCommandOptions=System.Array.init(["in database <DatabaseName>"],System.String),this.s_purgeTableCommandOptions=System.Array.init(["in database","records in database"],System.String),this.s_purgeMaterializedViewTableCommandOptions=System.Array.init(["records in database"],System.String),this.s_purgeTableInDatabaseCommandOptions=System.Array.init(["allrecords"],System.String),this.s_purgeTableRecordsInDatabaseCommandOptions=System.Array.init(["<| where"],System.String),this.s_purgeRetryCommandOptions=System.Array.init(["from","dryrun"],System.String),this.s_purgeFromRetryCommandOptions=System.Array.init(["to","dryrun"],System.String),this.s_purgeToRetryCommandOptions=System.Array.init(["dryrun"],System.String),this.s_showPurgeCancelCommandOptions=System.Array.init(["<OperationId>"],System.String),this.s_showPurgeCancelAllCommandsOptions=System.Array.init(["in database"],System.String),this.s_refeshPolicyCacheOptions=System.Array.init(["policy cache"],System.String),this.s_clearCommandOptions=System.Array.init(["ingestion queues"],System.String)}}},ctors:{ctor:function(e){e===void 0&&(e=null);var t;this.$initialize(),Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.ctor.call(this),this.Locker,(this.CommandRules==null||this.GeneralRules==null)&&this.LoadRulesUnderLock(),this.CommandToolTips==null&&this.LoadCommandToolTips(),this.ContextConnection=(t=e,t??"")}},methods:{LoadRulesUnderLock:function(){var e,t;this.CommandRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.GeneralRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.QueryParametersRules=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseRule)).ctor,this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAdminCommandsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_lineWithDotBeginningRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_adminOperationOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldShowCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldShowClustersKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClustersKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldShowClustersSettingsKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldShowClustersSettingsVersionKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsVersionsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsVersionsKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldShowClustersSettingsVersionKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsWithEncryptedSecretsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsWithEncryptedSecretsOption),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldShowPrincipalRolesCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPrincipalRolesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPrincipalRolesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAlterCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAlterMergeCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterMergeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAlterObtainerQueuesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterObtainerQueuesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterObtainerQueuesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAddOrAlterEventHubIngestionSourceSettingsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addOrAlterlterEventHubIngestionSourceCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addOrAlterEventHubIngestionSourceOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAlterClustersSettingsKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterClusterSettingsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showClusterSettingsKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAlterClustersSettingsFromKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterClusterSettingsFromCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_alterClusterSettingsFromKeywordOptions),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" @''",t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldCreateCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_createCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_createCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldDropCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_dropCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_dropCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAddCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAddOrAlterCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addOrAlterCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addOrAlterCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAddDataObtainerKeyworkOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addDataObtainerCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addDataObtainerCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAddDataObtainerInitializeKeyworkOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addDataObtainerInitializeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addDataObtainerInitializeCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldAddDataObtainerInitializeWithKeyworkOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addDataObtainerInitializeWithCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_addDataObtainerInitializeWithCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldGetCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_getCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_getCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldGetIngestionQueuesCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_getIngestionQueuesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_getIngestionQueuesCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldGetIngestionQueuesTypeCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_getIngestionQueuesTypeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_getIngestionQueuesTypeCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldFlushCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_flushCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_flushCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldInitializeCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_initializeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_initializeCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldInitializeClusterConfigCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_initializeClusterConfigCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_initializeClusterConfigurationCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldInitializeClusterConfigEncryptionCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_initializeClusterConfigEncryptionCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_initializeClusterConfigurationEncryptionCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldResetCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_resetCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_resetCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldSetCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_setCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_setCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeShowCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgeCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeShowCommandFromKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgesFromCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeFromCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeShowCommandToKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgesToCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgeToCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeTableCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeTableCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeMaterializedViewTableCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeMaterializedViewTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeMaterializedViewTableCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeTableInDatabaseCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeTableInDatabaseCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeTableInDatabaseCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeTableRecordsInDatabaseCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeTableRecordsInDatabaseCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeTableRecordsInDatabaseCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeRetryCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeRetryCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeRetryCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeShowCommandFromKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgesFromRetryCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeFromRetryCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeRetryCommandToKeywordOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgesToRetryCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_purgeToRetryCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeCancelCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_cancelPurgeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgeCancelCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldPurgeCancelAllCommandsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_cancelAllPurgeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_showPurgeCancelAllCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.RefreshPolicyCacheCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_refeshPolicyCacheRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_refeshPolicyCacheOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldClearCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_clearCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_clearCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.DMRuleKind.YieldClearIngestionQueuesCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_clearIngestionQueuesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider.s_clearIngestionSupportedQueuesTypes),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AnalyzeCommand$1:function(e,t){var n;return n=new Kusto.Data.IntelliSense.AnalyzedCommand,n.Command=e,n.Context=Kusto.Data.IntelliSense.KustoCommandContext.Empty,n},AnalyzeCommand:function(e,t){var n;return n=new Kusto.Data.IntelliSense.AnalyzedCommand,n.Command=(e.Command||"")+(t||""),n.Context=Kusto.Data.IntelliSense.KustoCommandContext.Empty,n},ResetState:function(){},LoadCommandToolTips:function(){this.CommandToolTips=new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.IntelliSenseCommandTip)).ctor},UpdateProviderAvailableEntities:function(e,t){}}}),Bridge.ns("Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.DataManagerIntelliSenseRulesProvider,{f1:function(e){return'"'+(e||"")+'"'},f2:function(e){return e.add(Kusto.Data.IngestionQueueType.AggregatedReadyForImportQueue),e.add(Kusto.Data.IngestionQueueType.ReadyForAggregationQueue),e.add(Kusto.Data.IngestionQueueType.SecuredReadyForAggregationQueue),e.add(Kusto.Data.IngestionQueueType.All),e},f3:function(e){return'"'+(System.Enum.toString(Kusto.Data.IngestionQueueType,e)||"")+'"'}}),Bridge.define("Kusto.Data.IntelliSense.RegexIntelliSenseRule",{inherits:[Kusto.Data.IntelliSense.IntelliSenseRule],props:{MatchingRegex:null,Options:null,AdditionalOptions:null,RequiresFullCommand:{get:function(){return!1}},IsContextual:{get:function(){return!1}}},methods:{IsMatch:function(e,t){var n=this.MatchingRegex.isMatch(t);return!!n},GetOptions:function(e){var t=this.Options.Values;return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.CompletionOptionCollection,this.AdditionalOptions)?t:System.Linq.Enumerable.from(t,System.String).union(System.Linq.Enumerable.from(this.AdditionalOptions,Kusto.Data.IntelliSense.CompletionOptionCollection).selectMany(u.$.Kusto.Data.IntelliSense.RegexIntelliSenseRule.f1))},GetCompletionOptions:function(e){var t;return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.CompletionOptionCollection,this.AdditionalOptions)?this.Options.GetCompletionOptions():(t=System.Linq.Enumerable.from(Bridge.fn.bind(this,u.$.Kusto.Data.IntelliSense.RegexIntelliSenseRule.f2)(new(System.Collections.Generic.List$1(Kusto.Data.IntelliSense.CompletionOptionCollection)).ctor),Kusto.Data.IntelliSense.CompletionOptionCollection).concat(this.AdditionalOptions).orderByDescending(u.$.Kusto.Data.IntelliSense.RegexIntelliSenseRule.f3),t.selectMany(u.$.Kusto.Data.IntelliSense.RegexIntelliSenseRule.f4))}}}),Bridge.ns("Kusto.Data.IntelliSense.RegexIntelliSenseRule",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.RegexIntelliSenseRule,{f1:function(e){return e.Values},f2:function(e){return e.add(this.Options),e},f3:function(e){return e.Priority},f4:function(e){return e.GetCompletionOptions()}}),Bridge.define("Kusto.UT.IntelliSenseRulesTests.RemoteSchemaResolverMock",{inherits:[Kusto.Data.IntelliSense.IKustoIntelliSenseSchemaResolver],$kind:"nested class",fields:{s_dbMap:null,s_clusterDatabasesMap:null},alias:["ResolveDatabaseNames","Kusto$Data$IntelliSense$IKustoIntelliSenseSchemaResolver$ResolveDatabaseNames","ResolveDatabaseSchema","Kusto$Data$IntelliSense$IKustoIntelliSenseSchemaResolver$ResolveDatabaseSchema","ResolveDatabaseSchema$1","Kusto$Data$IntelliSense$IKustoIntelliSenseSchemaResolver$ResolveDatabaseSchema$1"],ctors:{ctor:function(){var e,t,n,r;this.$initialize(),this.s_dbMap=new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity)).ctor,this.s_clusterDatabasesMap=new(System.Collections.Generic.Dictionary$2(System.String,System.Collections.Generic.List$1(System.String))).ctor,t=Kusto.UT.IntelliSenseRulesTests.GenerateKustoEntities(null,null),e=Bridge.getEnumerator(System.Array.init([{Item1:"",Item2:"db1"},{Item1:"other",Item2:"db2"}],System.Tuple$2(System.String,System.String)));try{for(;e.moveNext();)n=e.Current,r=(n.Item1||"")+":"+(n.Item2||""),this.s_dbMap.setItem(r,System.Linq.Enumerable.from(t.Databases,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).first()),this.s_clusterDatabasesMap.containsKey(n.Item1)||this.s_clusterDatabasesMap.setItem(n.Item1,new(System.Collections.Generic.List$1(System.String)).ctor),this.s_clusterDatabasesMap.getItem(n.Item1).add(n.Item2)}finally{Bridge.is(e,System.IDisposable)&&e.System$IDisposable$Dispose()}}},methods:{ResolveDatabaseNames:function(e){var t={};return this.s_clusterDatabasesMap.tryGetValue(e,t),t.v},ResolveDatabaseSchema:function(e,t){var n=(e||"")+":"+(t||"");return this.s_dbMap.containsKey(n)?this.s_dbMap.getItem(n):null},ResolveDatabaseSchema$1:function(e,t,n){var r=(e||"")+":"+(t||""),s=System.Linq.Enumerable.from(this.s_dbMap,System.Collections.Generic.KeyValuePair$2(System.String,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity)).where(function(d){return System.String.startsWith(d.key,(e||"")+":")}),a,i,l,o;return Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.Collections.Generic.KeyValuePair$2(System.String,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity),s)&&(Kusto.Cloud.Platform.Utils.ExtendedRegex.IsWildCardPattern(t)?(a=Kusto.Cloud.Platform.Utils.ExtendedRegex.TryTransformWildCardPatternToRegex(r),i=Kusto.Cloud.Platform.Utils.ExtendedRegex.TryTransformWildCardPatternToRegex(t),i!=null&&(s=s.where(function(d){return a.isMatch(d.key)||i.isMatch(d.value.Name)||i.isMatch(d.value.Alias)}))):s=s.where(function(d){return System.String.equals(r,d.key,5)||System.String.equals(t,d.value.Name,5)||System.String.equals(t,d.value.Alias,5)})),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(System.Collections.Generic.KeyValuePair$2(System.String,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity),s)?null:(l=null,System.String.isNullOrEmpty(n)||Kusto.Cloud.Platform.Utils.ExtendedRegex.IsWildCardPattern(n)&&(l=Kusto.Cloud.Platform.Utils.ExtendedRegex.TryTransformWildCardPatternToRegex(n)),o=s.select(function(d){var m=new Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity;return m.Name=d.value.Name,m.Alias=d.value.Alias,m.Tables=System.Linq.Enumerable.from(d.value.Tables,Kusto.Data.IntelliSense.KustoIntelliSenseTableEntity).where(function(c){return System.String.isNullOrEmpty(n)||l==null&&Bridge.referenceEquals(n,c.Name)||l!=null&&l.isMatch(c.Name)}),m.Functions=d.value.Functions,m.IsInitialized=d.value.IsInitialized,m}),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastNone$2(Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,o)?null:o)}}}),Bridge.define("Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider",{inherits:[Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider],statics:{fields:{s_showCommandRegex:null,s_setCommandRegex:null,s_addCommandRegex:null,s_alterCommandRegex:null,s_alterMergeCommandRegex:null,s_deleteCommandRegex:null,s_createCommandRegex:null,s_dropCommandRegex:null,s_moveCommandRegex:null,s_attachCommandRegex:null,s_replaceCommandRegex:null,s_ingestionDuplicationCommandRegex:null,s_createOrAlterCommandRegex:null,s_purgeCommandRegex:null,s_purgeCleanupCommandRegex:null,s_runCommandRegex:null,s_suspendCommandRegex:null,s_createDatabaseCommandRegex:null,s_createDatabaseCommandEndingRegex:null,s_showDatabaseCommandRegex:null,s_showBasicAuthCommandRegex:null,s_showDatabasePrincipalsCommandRegex:null,s_showDatabasesCommandRegex:null,s_showClusterCommandRegex:null,s_showPrincipalCommandRegex:null,s_showFabricCommandRegex:null,s_suspendFabricNodeCommandRegex:null,s_suspendFabricNodeCommandWithDurationRegex:null,s_addClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsCommandRegex:null,s_setClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsCommandRegex:null,s_addClusterBlockedPrincipalsCommandRegex:null,s_setClusterAdminsNoneCommandRegex:null,s_setClusterUsersNoneCommandRegex:null,s_setClusterViewersNoneCommandRegex:null,s_setClusterDatabaseCreatorsNoneCommandRegex:null,s_dropClusterAdminsUsersViewersDatabaseCreatorsCommandRegex:null,s_showTableOptionsCommandRegex:null,s_setDatabaseCommandRegex:null,s_addDatabaseCommandRegex:null,s_dropDatabaseCommandRegex:null,s_anySimpleSyntaxActionTableCommandRegex:null,s_anySimpleSyntaxActionFunctionCommandRegex:null,s_dropExtentTagsCommandRegex:null,s_alterExtentTagsCommandRegex:null,s_attachExtentsCommandRegex:null,s_attachExtentsIntoTableCommandRegex:null,s_attachExtentsIntoSpecifiedTableCommandRegex:null,s_moveExtentsCommandRegex:null,s_moveSpecifiedExtentsCommandRegex:null,s_moveExtentsFromSpecifiedTableCommandRegex:null,s_moveExtentsFromTableCommandRegex:null,s_moveExtentsToTableCommandRegex:null,s_replaceExtentsCommandRegex:null,s_replaceExtentsInTableCommandRegex:null,s_showExtentsInSpecifiedEntityCommandRegex:null,s_showExtentsInSpecifiedEntityWithTagFiltersCommandRegex:null,s_dropExtentTagsFromTableCommandRegex:null,s_setDatabaseAdminsUsersViewersPrettyNameCommandRegex:null,s_addDatabaseAdminsUsersViewersCommandRegex:null,s_dropDatabasePropertyCommandRegex:null,s_setTableAdminsCommandRegex:null,s_addTableAdminsCommandRegex:null,s_createTableEntitiesCommandRegex:null,s_alterTableEntitiesCommandRegex:null,s_alterMergeTableEntitiesCommandRegex:null,s_dropTableEntitiesCommandRegex:null,s_deleteTableEntitiesCommandRegex:null,s_dropTableColumnsSyntaxCommandRegex:null,s_alterFunctionEntitiesCommandRegex:null,s_setDatabaseAdminsNoneCommandRegex:null,s_setDatabaseUsersNoneCommandRegex:null,s_setDatabaseViewersNoneCommandRegex:null,s_setDatabaseIngestorsNoneCommandRegex:null,s_setTableAdminsNoneCommandRegex:null,s_setTableIngestorsNoneCommandRegex:null,s_appendTableCommandRegex:null,s_setOrAppendReplaceTableCommandRegex:null,s_clusterPolicyRegex:null,s_alterDatabaseRegex:null,s_databasePolicyRegex:null,s_tablePolicyRegex:null,s_columnPolicyRegex:null,s_policyCommandOnDatabase:null,s_policyCommand:null,s_alterMultiplePoliciesRegex:null,s_deleteMultiplePoliciesRegex:null,s_exportCommandRegex:null,s_exportCommandWithModifiersToRegex:null,s_exportCommandNoModifiersToRegex:null,s_duplicateIngestionIntoRegex:null,s_purgeWhatIfRegex:null,s_purgeWithPropertiesRegex:null,s_purgeTableRegex:null,s_purgeSpecifiedTableRegex:null,s_alterMergePolicyRetentionRegex:null,s_alterMergePolicyRetentionSoftDeleteDefinedRegex:null,s_alterMergePolicyRetentionOptionsRegex:null,s_createRowstoreCommandRegex:null,s_createRowstoreCommandEndingRegex:null,s_adminOperationOptions:null,s_showCommandOptions:null,s_clusterShowKeywordOptions:null,s_tableShowKeywordOptions:null,s_setAddCommandsOptions:null,s_dropCommandsOptions:null,s_runCommandOptions:null,s_suspendCommandOptions:null,s_attachCommandsOptions:null,s_moveCommandsOptions:null,s_replaceCommandsOptions:null,s_dropExtentTagsCommandsOptions:null,s_attachExtentsCommandsOptions:null,s_attachExtentsIntoSpecifedTableCommandsOptions:null,s_moveExtentsCommandsOptions:null,s_moveSpecifiedExtentsCommandsOptions:null,s_moveExtentsFromTableCommandsOptions:null,s_showExtentsByEntityCommandsOptions:null,s_showExtentsByEntityWithTagFiltersCommandsOptions:null,s_replaceExtentsCommandsOptions:null,s_alterCommandOptions:null,s_alterMergeAndDeleteCommandOptions:null,s_createCommandOptions:null,s_setUsersAdminsPrettyNameKeywordOptions:null,s_addSetDropUsersAdminsKeywordOptions:null,s_dropDatabaseKeywordOptions:null,s_setUsersAdminsViewersDatabaseCreatorsKeywordOptions:null,s_addDropUsersAdminsViewersDbCreatorsBlockedKeywordOptions:null,s_addClusterBlockedPrincipalsApplicationKeywordOptions:null,s_showBasicAuthUsersKeywordOptions:null,s_AddSetAdminsKeywordOptions:null,s_createTableEntitiesKeywordOptions:null,s_alterTableEntitiesKeywordOptions:null,s_alterMergeTableEntitiesKeywordOptions:null,s_dropTableEntitiesKeywordOptions:null,s_deleteTableEntitiesKeywordOptions:null,s_alterFunctionEntitiesKeywordOptions:null,s_DropColumnsSyntaxKeywordOptions:null,s_setNoneKeywordOptions:null,s_clusterPoliciesOptions:null,s_databasePoliciesOptions:null,s_tablePoliciesOptions:null,s_columnPoliciesOptions:null,s_multiplePoliciesOptions:null,s_multipleDeletionPoliciesOptions:null,s_databasePersistencyOptions:null,s_rowstorePersistencyOptions:null,s_ifNotExistsOptions:null,s_policyKeywordOptions:null,s_principalsPolicySchemaAndExtentsKeywordOptions:null,s_databasesShowKeywordOptions:null,s_exportFileFormatOptions:null,s_exportCommandOptions:null,s_alterDatabaseCommandOptions:null,s_duplicateIngestionCommandsOptions:null,s_purgeWhatIfCommandOptions:null,s_purgeTableCommandsOptions:null,s_purgeCleanupCommandsOptions:null,s_purgeCommandsOptions:null,s_purgeWithPropertiesCommandsOptions:null,s_showPrincipalKeywordOptions:null,s_showFabricKeywordOptions:null,s_alterMergePolicyRetentionOptions:null,s_alterMergePolicyRetentionSoftDeleteDefinedOptions:null,s_timeSpanPolicyOptions:null,s_createOrAlterOptions:null,s_suspendFabricNodeOptions:null,s_suspendFabricNodeOptionalOptions:null},ctors:{init:function(){this.s_showCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMergeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter-merge\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_deleteCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_attachCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.attach\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_replaceCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.replace\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_ingestionDuplicationCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.dup-next-(failed-)?ingest\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createOrAlterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create-or-alter\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeCleanupCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge-cleanup\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_runCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.run\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_suspendCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.suspend\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+database\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createDatabaseCommandEndingRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+database\\s+\\w+\\s+(persist\\s+\\(.+\\)|volatile)\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+database\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showBasicAuthCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+basicauth\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showDatabasePrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+database\\s+(\\w+|(\\[.+?\\]))\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showDatabasesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+databases\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showClusterCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+cluster\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showPrincipalCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+principal\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showFabricCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+fabric\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_suspendFabricNodeCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.suspend\\s+fabric\\s+node\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_suspendFabricNodeCommandWithDurationRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.suspend\\s+fabric\\s+node\\s+\\S+\\s+for\\s+\\d+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addClusterBlockedPrincipalsCommandRegex=new System.Text.RegularExpressions.Regex.ctor(`^\\s*\\.add\\s+cluster\\s+blockedprincipals\\s+('(.*?)'|"(.*?)")\\s+$`,Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterAdminsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+admins\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterUsersNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+users\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterViewersNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+viewers\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setClusterDatabaseCreatorsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+cluster\\s+databasecreators\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropClusterAdminsUsersViewersDatabaseCreatorsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+cluster\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showTableOptionsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+database\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+database\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropDatabaseCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+database\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_anySimpleSyntaxActionTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|create|add|set|alter|alter-merge|drop|delete)\\s+table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_anySimpleSyntaxActionFunctionCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|alter|drop)\\s+function\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropExtentTagsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+extent\\s+tags\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterExtentTagsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+extent\\s+tags\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_attachExtentsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.attach\\s+(async\\s+)?extents\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_attachExtentsIntoTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.attach\\s+(async\\s+)?extents\\s+into\\s+table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_attachExtentsIntoSpecifiedTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.attach\\s+(async\\s+)?extents\\s+into\\s+table\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveExtentsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+(async\\s+)?extents\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveSpecifiedExtentsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+(async\\s+)?extents\\s+([A-Za-z0-9(),.-]+)\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveExtentsFromSpecifiedTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+(async\\s+)?extents\\s+([A-Za-z0-9(),.-]+)\\s+from\\s+table\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveExtentsFromTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+(async\\s+)?extents\\s+([A-Za-z0-9(),.-]+)\\s+from\\s+table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_moveExtentsToTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.move\\s+(async\\s+)?extents\\s+([A-Za-z0-9(),.-]+)\\s+from\\s+table\\s+\\S+\\s+to\\s+table\\s+$|^\\s*\\.move\\s+(async\\s+)?extents\\s+to\\s+table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_replaceExtentsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.replace\\s+(async\\s+)?extents\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_replaceExtentsInTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.replace\\s+(async\\s+)?extents\\s+in\\s+table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showExtentsInSpecifiedEntityCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+(database|table)\\s+\\S+\\s+extents\\s+(hot\\s+)?$|^\\s*\\.show\\s+cluster\\s+extents\\s+(hot\\s+)?$|^\\s*\\.show\\s+tables\\s+\\([^)]+\\)\\s+extents\\s+(hot\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_showExtentsInSpecifiedEntityWithTagFiltersCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.show\\s+((database\\s+\\S+)|(table\\s+\\S+)|(tables\\s+\\([^)]+\\))|(cluster))\\s+extents\\s+(hot\\s+)?where\\s+tags\\s+((has|!has|contains|!contains)\\s+\\S+\\s+and\\s+tags\\s+)*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropExtentTagsFromTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+extent\\s+tags\\s+from\\s+table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setDatabaseAdminsUsersViewersPrettyNameCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+database\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addDatabaseAdminsUsersViewersCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+database\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropDatabasePropertyCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setTableAdminsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_addTableAdminsCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.add\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createTableEntitiesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterTableEntitiesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMergeTableEntitiesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter-merge\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropTableEntitiesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_deleteTableEntitiesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+table\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_dropTableColumnsSyntaxCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.drop\\s+table\\s+\\w+\\s+columns\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterFunctionEntitiesCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+function\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setDatabaseAdminsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+database\\s+\\w+\\s+admins\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setDatabaseUsersNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+database\\s+\\w+\\s+users\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setDatabaseViewersNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+database\\s+\\w+\\s+viewers\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setDatabaseIngestorsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+database\\s+\\w+\\s+ingestors\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setTableAdminsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+table\\s+\\w+\\s+admins\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setTableIngestorsNoneCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.set\\s+table\\s+\\w+\\s+ingestors\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_appendTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.append\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_setOrAppendReplaceTableCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(set-or-append|set-or-replace)\\s+(async\\s+)?$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_clusterPolicyRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|alter|alter-merge|delete)\\s+cluster\\s+policy\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterDatabaseRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+database\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_databasePolicyRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|alter|alter-merge|delete)\\s+database\\s+\\S+\\s+policy\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_tablePolicyRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|alter|alter-merge|delete)\\s+table\\s+\\S+\\s+policy\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_columnPolicyRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|alter|alter-merge|delete)\\s+column\\s+\\S+\\s+policy\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_policyCommandOnDatabase=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(show|alter|alter-merge|delete)\\s+database\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_policyCommand=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(alter|alter-merge|delete)\\s+column\\s+\\S+\\s+$|^\\s*\\.(alter|alter-merge|delete)\\s+cluster\\s+$|^\\s*\\.(alter-merge|delete)\\s+database\\s+\\S+\\s+$|^\\s*\\.show\\s+column\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMultiplePoliciesRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.alter\\s+policies\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_deleteMultiplePoliciesRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.delete\\s+policies\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_exportCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.export\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_exportCommandWithModifiersToRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.export\\s+(async|async compressed|compressed)\\s+to\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_exportCommandNoModifiersToRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.export\\s+to\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_duplicateIngestionIntoRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.dup-next-(failed-)?ingest\\s+into\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeWhatIfRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+(async\\s+)?whatif\\s*=\\s*$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeWithPropertiesRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+(async\\s+)?whatif\\s*=\\s*\\S+\\s+(maxRecords\\s*=\\s*\\d+\\s+)?$|^\\s*\\.purge\\s+(async\\s+)?maxRecords\\s*=\\s*\\d+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeTableRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+(async\\s+)?(whatif\\s*=\\s*\\S+\\s+)?(maxRecords\\s*=\\s*\\d+\\s+)?table\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_purgeSpecifiedTableRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.purge\\s+(async\\s+)?(whatif\\s*=\\s*\\S+\\s+)?(maxRecords\\s*=\\s*\\d+\\s+)?table\\s+\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMergePolicyRetentionRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(alter-merge)\\s+(database|table)\\s+\\S+\\s+policy\\s+retention\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMergePolicyRetentionSoftDeleteDefinedRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(alter-merge)\\s+(database|table)\\s+\\S+\\s+policy\\s+retention\\s+softdelete\\s*=\\s*\\S+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_alterMergePolicyRetentionOptionsRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.(alter-merge)\\s+(database|table)\\s+\\S+\\s+policy\\s+retention\\s+((softdelete\\s*=\\s*\\S+\\s+harddelete)|((soft|hard)delete))\\s*=\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createRowstoreCommandRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+rowstore\\s+\\w+\\s+$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_createRowstoreCommandEndingRegex=new System.Text.RegularExpressions.Regex.ctor("^\\s*\\.create\\s+rowstore\\s+\\w+\\s+(writeaheadlog\\s+\\(.+\\)|volatile)\\s$",Kusto.Data.IntelliSense.IntelliSenseRulesProviderBase.CommonRegexOptions),this.s_adminOperationOptions=System.Array.init(["show","alter","alter-merge","append","attach","suspend","create","delete","detach","drop","rename","set-or-append","set-or-replace","set","export","move","replace","create-or-alter","dup-next-ingest","dup-next-failed-ingest","seal table","purge","purge-cleanup","run"],System.String),this.s_showCommandOptions=System.Linq.Enumerable.from(System.Array.init(["basicauth","cache","capacity","cluster","column","database","databases","diagnostics","extentcontainers","fabric","function","functions","ingestion failures","journal","memory","operations","schema","table","tables","version","queries","commands","commands-and-queries","principal","rowstores","rowstore","rowstore transactions","rowstore seals","external tables","external table","continuous-exports","continuous-export","stored_query_results"],System.String),System.String).orderBy(u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f1).ToArray(System.String),this.s_clusterShowKeywordOptions=System.Array.init(["principals","policy","extents","monitoring","journal","blockedprincipals","databases"," "],System.String),this.s_tableShowKeywordOptions=System.Array.init(["principals","policy","extents","ingestion csv mappings","ingestion json mappings","ingestion avro mappings","ingestion apacheavro mappings","ingestion parquet mappings","ingestion orc mappings","ingestion w3clogfile mappings","ingestion mappings","rowstores","rowstore_references"," "],System.String),this.s_setAddCommandsOptions=System.Array.init(["database","cluster","table","async"],System.String),this.s_dropCommandsOptions=System.Array.init(["database","cluster","table","tables","function","column","extent tags","extent","extents","rowstore","external table","continuous-export"],System.String),this.s_runCommandOptions=System.Array.init(["continuous-export"],System.String),this.s_suspendCommandOptions=System.Array.init(["fabric node"],System.String),this.s_attachCommandsOptions=System.Array.init(["extents"],System.String),this.s_moveCommandsOptions=System.Array.init(["extents"],System.String),this.s_replaceCommandsOptions=System.Array.init(["extents"],System.String),this.s_dropExtentTagsCommandsOptions=System.Array.init(["from table"],System.String),this.s_attachExtentsCommandsOptions=System.Array.init(["into table","by metadata"],System.String),this.s_attachExtentsIntoSpecifedTableCommandsOptions=System.Array.init(["by metadata"],System.String),this.s_moveExtentsCommandsOptions=System.Array.init(["all","(GUID,...,GUID)","to table"],System.String),this.s_moveSpecifiedExtentsCommandsOptions=System.Array.init(["from table"],System.String),this.s_moveExtentsFromTableCommandsOptions=System.Array.init(["to table"],System.String),this.s_showExtentsByEntityCommandsOptions=System.Array.init(["hot","where tags"],System.String),this.s_showExtentsByEntityWithTagFiltersCommandsOptions=System.Array.init(["has","!has","contains","!contains"],System.String),this.s_replaceExtentsCommandsOptions=System.Array.init(["in table"],System.String),this.s_alterCommandOptions=System.Array.init(["cluster","column","database","function","table","policies","extent tags","external table"],System.String),this.s_alterMergeAndDeleteCommandOptions=System.Array.init(["cluster","column","database","table"],System.String),this.s_createCommandOptions=System.Array.init(["database","function","table","rowstore","external table"],System.String),this.s_setUsersAdminsPrettyNameKeywordOptions=System.Array.init(["users","admins","viewers","ingestors","monitors","prettyname"],System.String),this.s_addSetDropUsersAdminsKeywordOptions=System.Array.init(["users","admins","viewers","ingestors","monitors"],System.String),this.s_dropDatabaseKeywordOptions=System.Array.init(["users","admins","viewers","ingestors","monitors","prettyname"],System.String),this.s_setUsersAdminsViewersDatabaseCreatorsKeywordOptions=System.Array.init(["users","admins","viewers","databasecreators"],System.String),this.s_addDropUsersAdminsViewersDbCreatorsBlockedKeywordOptions=System.Array.init(["users","admins","viewers","databasecreators","blockedprincipals"],System.String),this.s_addClusterBlockedPrincipalsApplicationKeywordOptions=System.Array.init(["application","user","period","reason"],System.String),this.s_showBasicAuthUsersKeywordOptions=System.Array.init(["users"],System.String),this.s_AddSetAdminsKeywordOptions=System.Array.init(["admins","ingestors"],System.String),this.s_createTableEntitiesKeywordOptions=System.Array.init(["ingestion csv mapping","ingestion json mapping","ingestion avro mapping","ingestion apacheavro mapping","ingestion parquet mapping","ingestion orc mapping","ingestion w3clogfile mapping"],System.String),this.s_alterTableEntitiesKeywordOptions=System.Array.init(["ingestion csv mapping","ingestion json mapping","ingestion avro mapping","ingestion apacheavro mapping","ingestion parquet mapping","ingestion orc mapping","ingestion w3clogfile mapping","docstring","folder","column-docstrings","policy"],System.String),this.s_alterMergeTableEntitiesKeywordOptions=System.Array.init(["column-docstrings","policy"],System.String),this.s_dropTableEntitiesKeywordOptions=System.Array.init(["admins","ingestors","columns","ingestion csv mapping","ingestion json mapping","ingestion avro mapping","ingestion apacheavro mapping","ingestion parquet mapping","ingestion orc mapping","ingestion w3clogfile mapping"],System.String),this.s_deleteTableEntitiesKeywordOptions=System.Array.init(["policy"],System.String),this.s_alterFunctionEntitiesKeywordOptions=System.Array.init(["docstring","folder"],System.String),this.s_DropColumnsSyntaxKeywordOptions=System.Array.init(["(COLUMN1,COLUMN2)"],System.String),this.s_setNoneKeywordOptions=System.Array.init(["none"],System.String),this.s_clusterPoliciesOptions=System.Array.init(["caching","capacity","rowstore","callout","query_weak_consistency","streamingingestion"],System.String),this.s_databasePoliciesOptions=System.Array.init(["caching","encoding","merge","retention","sharding","streamingingestion","ingestionbatching"],System.String),this.s_tablePoliciesOptions=System.Array.init(["caching","encoding","merge","ingestiontime","retention","roworder","update","sharding","streamingingestion","restricted_view_access","ingestionbatching","partitioning"],System.String),this.s_columnPoliciesOptions=System.Array.init(["caching","encoding"],System.String),this.s_multiplePoliciesOptions=System.Array.init(["of retention","of encoding"],System.String),this.s_multipleDeletionPoliciesOptions=System.Array.init(["of retention"],System.String),this.s_databasePersistencyOptions=System.Array.init(["persist","volatile"],System.String),this.s_rowstorePersistencyOptions=System.Array.init(["writeaheadlog","volatile"],System.String),this.s_ifNotExistsOptions=System.Array.init(["ifnotexists"," "],System.String),this.s_policyKeywordOptions=System.Array.init(["policy"],System.String),this.s_principalsPolicySchemaAndExtentsKeywordOptions=System.Array.init(["principals","policy","schema","extents","journal","purge operations"," "],System.String),this.s_databasesShowKeywordOptions=System.Array.init(["identity","policies","datastats"," "],System.String),this.s_exportFileFormatOptions=System.Array.init(["csv","tsv","json","sql","parquet"],System.String),this.s_exportCommandOptions=System.Array.init(["async compressed","async","compressed"," "],System.String),this.s_alterDatabaseCommandOptions=System.Array.init(["policy","persist metadata","prettyname"],System.String),this.s_duplicateIngestionCommandsOptions=System.Array.init(["into"],System.String),this.s_purgeWhatIfCommandOptions=System.Array.init(["info","stats","purge","retain"],System.String),this.s_purgeTableCommandsOptions=System.Array.init(["records"],System.String),this.s_purgeCleanupCommandsOptions=System.Array.init(["until="],System.String),this.s_purgeCommandsOptions=System.Array.init(["whatif =","maxRecords =","table"],System.String),this.s_purgeWithPropertiesCommandsOptions=System.Array.init(["table"],System.String),this.s_showPrincipalKeywordOptions=System.Array.init(["access","roles","@'principal' roles"],System.String),this.s_showFabricKeywordOptions=System.Array.init(["clocks","locks","cache","nodes","services"],System.String),this.s_alterMergePolicyRetentionOptions=System.Array.init(["softdelete","harddelete"],System.String),this.s_alterMergePolicyRetentionSoftDeleteDefinedOptions=System.Array.init(["harddelete"],System.String),this.s_timeSpanPolicyOptions=System.Array.init(["1d","7d","30d","90d","365d"],System.String),this.s_createOrAlterOptions=System.Array.init(["function","continuous-export"],System.String),this.s_suspendFabricNodeOptions=System.Array.init(["for"],System.String),this.s_suspendFabricNodeOptionalOptions=System.Array.init(["reason"],System.String)}}},fields:{s_afterCreateDatabaseApplyPolicies:null,s_afterAlterDatabaseApplyPolicies:null,s_afterCreateRowStoreApplyPolicies:null,s_afterExportFile:null},ctors:{init:function(){this.s_afterCreateDatabaseApplyPolicies=u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f2(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterAlterDatabaseApplyPolicies=u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f3(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterCreateRowStoreApplyPolicies=u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f4(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor),this.s_afterExportFile=u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f5(new(System.Collections.Generic.Dictionary$2(System.String,Kusto.Data.IntelliSense.ApplyPolicy)).ctor)},$ctor1:function(e,t,n,r,s,a,i){n===void 0&&(n=null),r===void 0&&(r=null),s===void 0&&(s=null),a===void 0&&(a=!1),i===void 0&&(i=!1),this.$initialize(),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.$ctor1.call(this,e,t,n,r,s,a,i),this.LoadRules$1()},ctor:function(e){this.$initialize(),Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.ctor.call(this,e),this.LoadRules$1()}},methods:{Clone$1:function(){return new Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.ctor(this)},LoadRules$1:function(){Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,this.TableNames)&&this.AddTableControlCommands(),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(System.String,this.FunctionNames)&&this.AddFunctionControlCommands(),this.AddControlCommandKeywords(),this.AddPolicyControlCommands(),this.AddMultiplePoliciesControlCommands(),this.DeleteMultiplePoliciesControlCommands(),this.AddPermissionsControlCommands(),this.AddDatabaseCreateCommands(),this.AddExportControlCommand(),this.AddSuspendNodeControlCommand(),Kusto.Cloud.Platform.Utils.ExtendedEnumerable.SafeFastAny$2(Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity,this.Databases)&&this.AddDatabaseControlCommands(this.Databases),this.AddDatabasesShowControlCommands(),this.AddAddDropControlCommandKeywords(),this.AddRowStoreControlCommands()},AddDatabaseCreateCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseCreatePersistencyOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createDatabaseCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_databasePersistencyOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterCreateDatabaseApplyPolicies,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateIfNotExistsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createDatabaseCommandEndingRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_ifNotExistsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddControlCommandKeywords:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAdminCommandsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslQueryIntelliSenseRulesProvider.s_lineWithDotBeginningRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Command,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_adminOperationOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowPrincipalCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showPrincipalCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showPrincipalKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowFabricOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showFabricCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showFabricKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddExportControlCommand:function(){var e,t;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_exportCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_exportCommandOptions),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" to ",t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandWithModifiersAndOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_exportCommandWithModifiersToRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_exportFileFormatOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterExportFile,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldExportCommandNoModifiersAndOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_exportCommandNoModifiersToRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_exportFileFormatOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterExportFile,e))},AddSuspendNodeControlCommand:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSuspendNodeControlCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_suspendFabricNodeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_suspendFabricNodeOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSuspendNodeControlCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_suspendFabricNodeCommandWithDurationRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_suspendFabricNodeOptionalOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddPermissionsControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowBasicAuthOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showBasicAuthCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showBasicAuthUsersKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowClusterPrincipalsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showClusterCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_clusterShowKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterAdminsUsersViewersDatabaseCreatorsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setUsersAdminsViewersDatabaseCreatorsKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addDropUsersAdminsViewersDbCreatorsBlockedKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropClusterAdminsUsersViewersDatabaseCreatorsBlockedPrincipalsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropClusterAdminsUsersViewersDatabaseCreatorsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addDropUsersAdminsViewersDbCreatorsBlockedKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddClusterBlockedPrincipalsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addClusterBlockedPrincipalsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addClusterBlockedPrincipalsApplicationKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterUsersNoneOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setClusterUsersNoneCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterAdminsNoneOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setClusterAdminsNoneCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterViewersNoneOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setClusterViewersNoneCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetClusterDatabaseCreatorsNoneOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setClusterDatabaseCreatorsNoneCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddPolicyControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_policyCommand,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_policyKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldClusterPoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_clusterPolicyRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_clusterPoliciesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabasePoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_databasePolicyRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_databasePoliciesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTablePoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_tablePolicyRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_tablePoliciesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldColumnPoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_columnPolicyRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_columnPoliciesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddMultiplePoliciesControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMultiplePoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMultiplePoliciesRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_multiplePoliciesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},DeleteMultiplePoliciesControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDeleteMultiplePoliciesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_deleteMultiplePoliciesRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_multipleDeletionPoliciesOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddDatabasesShowControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowDatabasesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showDatabasesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Policy,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_databasesShowKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddDatabaseControlCommands:function(e){var t,n;this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowDatabasePrincipalsPoliciesAndSchemaOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showDatabasePrincipalsCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_principalsPolicySchemaAndExtentsKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseAdminsUsersViewersPrettyNameOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setDatabaseAdminsUsersViewersPrettyNameCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setUsersAdminsPrettyNameKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddDatabaseAdminsUsersViewersOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addDatabaseAdminsUsersViewersCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addSetDropUsersAdminsKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropDatabaseOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropDatabasePropertyCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropDatabaseKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseUsersNoneOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setDatabaseUsersNoneCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseAdminsNoneOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setDatabaseAdminsNoneCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseViewersNoneOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setDatabaseViewersNoneCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetDatabaseIngestorsNoneOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setDatabaseIngestorsNoneCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),n=System.Linq.Enumerable.from(e,Kusto.Data.IntelliSense.KustoIntelliSenseDatabaseEntity).select(u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f6).orderBy(u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.f7).ToArray(System.String),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showDatabaseCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Database,n),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setDatabaseCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Database,n),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addDatabaseCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Database,n),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropDatabaseCommandRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Database,n),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDatabaseNames,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_policyCommandOnDatabase,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Database,n),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterDatabaseCommandOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterDatabaseRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterDatabaseCommandOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t.AfterApplyPolicies=this.s_afterAlterDatabaseApplyPolicies,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergePolicyRetentionOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergePolicyRetentionRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergePolicyRetentionOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendAssignmentPolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergePolicyRetentionSoftDeleteDefinedOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergePolicyRetentionSoftDeleteDefinedRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergePolicyRetentionSoftDeleteDefinedOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendAssignmentPolicy,t)),this.CommandRules.add((t=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,t.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTimeSpanPolicyOptions,t.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergePolicyRetentionOptionsRegex,t.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_timeSpanPolicyOptions),t.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,t))},AddTableControlCommands:function(){var e,t;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_appendTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setOrAppendReplaceTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowTableEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showTableOptionsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_tableShowKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_anySimpleSyntaxActionTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropExtentTagsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropExtentTagsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropExtentTagsCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropExtentTagsFromTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" (@'')",t.OffsetPosition=-2,t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterExtentTagsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterExtentTagsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Command,System.Array.init(["(@'') <| "],System.String)),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text="",t.OffsetPosition=-6,t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachExtentsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachExtentsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachExtentsCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachExtentsIntoTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachExtentsIntoTableOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachExtentsIntoSpecifiedTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachExtentsIntoSpecifedTableCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveExtentsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveExtentsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveExtentsCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveSpecifiedExtentsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveSpecifiedExtentsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveSpecifiedExtentsCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveExtentsFromTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveExtentsToTableOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveExtentsFromSpecifiedTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveExtentsFromTableCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveExtentsToTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showExtentsInSpecifiedEntityCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showExtentsByEntityCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldShowExtentsByEntityWithTagsFiltersOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showExtentsInSpecifiedEntityWithTagFiltersCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_showExtentsByEntityWithTagFiltersCommandsOptions),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" @''",t.OffsetPosition=-1,t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldReplaceExtentsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_replaceExtentsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_replaceExtentsCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_replaceExtentsInTableCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetTableAdminsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setTableAdminsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_AddSetAdminsKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddTableAdminsOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addTableAdminsCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_AddSetAdminsKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateTableEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createTableEntitiesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createTableEntitiesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTableEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterTableEntitiesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterTableEntitiesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterTableEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergeTableEntitiesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergeTableEntitiesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropTableEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropTableEntitiesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropTableEntitiesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDeleteTableEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_deleteTableEntitiesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_deleteTableEntitiesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropTableColumnsSyntaxOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropTableColumnsSyntaxCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_DropColumnsSyntaxKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetTableAdminsNoneOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setTableAdminsNoneCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetTableIngestorsNoneOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setTableIngestorsNoneCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setNoneKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_duplicateIngestionIntoRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" to h@''",t.OffsetPosition=-1,t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWhatIfOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeWhatIfRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeWhatIfCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeWithPropertiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeWithPropertiesRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeWithPropertiesCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldTableNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeTableRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Table,this.TableNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeTableOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeSpecifiedTableRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeTableCommandsOptions),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" <|",t),e))},AddRowStoreControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldRowStoreCreatePersistencyOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createRowstoreCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_rowstorePersistencyOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e.AfterApplyPolicies=this.s_afterCreateRowStoreApplyPolicies,e))},AddFunctionControlCommands:function(){var e;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldFunctionNamesForAdminOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_anySimpleSyntaxActionFunctionCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.ExpressionFunction,this.FunctionNames),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterFunctionEntitiesOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterFunctionEntitiesCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterFunctionEntitiesKeywordOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))},AddAddDropControlCommandKeywords:function(){var e,t;this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldSetCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setAddCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAddCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_addCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_setAddCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDropCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_dropCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldMoveCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_moveCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAttachCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_attachCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldReplaceCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_replaceCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_replaceCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldAlterMergeCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergeAndDeleteCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldDeleteCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_deleteCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_alterMergeAndDeleteCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldCreateOrAlterOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createOrAlterCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_createOrAlterOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldIngestionDuplicationOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_ingestionDuplicationCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_duplicateIngestionCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeCommandsOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldPurgeCleanupOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeCleanupCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_purgeCleanupCommandsOptions),e.DefaultAfterApplyPolicy=(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" datetime()",t.OffsetPosition=-1,t),e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldRunCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_runCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_runCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e)),this.CommandRules.add((e=new Kusto.Data.IntelliSense.RegexIntelliSenseRule,e.Kind=Kusto.Data.IntelliSense.AdminEngineRuleKind.YieldRunCommandOptions,e.MatchingRegex=Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_suspendCommandRegex,e.Options=new Kusto.Data.IntelliSense.CompletionOptionCollection(Kusto.Data.IntelliSense.OptionKind.Option,Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider.s_suspendCommandOptions),e.DefaultAfterApplyPolicy=Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy,e))}}}),Bridge.ns("Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider",u.$),Bridge.apply(u.$.Kusto.Data.IntelliSense.CslIntelliSenseRulesProvider,{f1:function(e){return e},f2:function(e){var t;return e.add("volatile",Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy),e.add("persist",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" (h@'', h@'') ",t.OffsetPosition=-9,t)),e},f3:function(e){var t;return e.add("policy",Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy),e.add("persist metadata",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" h'' ",t.OffsetPosition=-2,t)),e},f4:function(e){var t;return e.add("volatile",Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy),e.add("writeaheadlog",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" (h@'', h@'') ",t.OffsetPosition=-9,t)),e},f5:function(e){var t;return e.add("csv",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" (h@'')",t.OffsetPosition=-2,t)),e.add("tsv",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" (h@'')",t.OffsetPosition=-2,t)),e.add("json",(t=new Kusto.Data.IntelliSense.ApplyPolicy,t.Text=" (h@'')",t.OffsetPosition=-2,t)),e.add("sql",Kusto.Data.IntelliSense.ApplyPolicy.AppendSpacePolicy),e},f6:function(e){return Kusto.Data.Common.CslSyntaxGenerator.NormalizeDatabaseName(e.Name)},f7:function(e){return e}})}); //# sourceMappingURL=kusto.javascript.client.min.js.map