All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Proper parsing of booleans for rare cases where the values are returned as integers.
- Reverted new json library to the default one, as it was causing issues with edge cases.
- the
WithApplicationCertificate
onKustoConnectionStringBuilder
was removed as it was ambiguous and not implemented correctly. Instead there are two new methods:WithAppCertificatePath
- Receives the path to the certificate file.WithAppCertificateBytes
- Receives the certificate bytes in-memory.
Both methods accept an optional password for the certificate.
WithUserManagedIdentity
has been deprecated in favor of more specific functions:WithUserAssignedIdentityClientId
- Receives the MSI client idWithUserAssignedIdentityResourceId
- Receives the MSI resource id
WithUserManagedIdentity
has been deprecated in favor of more specific functions:WithUserAssignedIdentityClientId
- Receives the MSI client idWithUserAssignedIdentityResourceId
- Receives the MSI resource id
- V2FrameCapacity was renamed to V2IoCapacity to better reflect its purpose.
- V2FragmentCapacity was renamed to V2TableCapacity to better reflect its purpose.
- Removed
Skip
option fromIterativeTable
, as the usecase for it was not clear. - Better defaults for buffer sizes.
- Fixed Mapping Kind not working correctly with certain formats.
- Fixed plenty of sync issues.
- Reduced allocations.
- Use the new azqueue library.
- Various dependency updates.
- Row and fragment capacity options to iterative dataset creation.
- Added RawV2 method for manual parsing.
- Changed frame defaults to be more reasonable
- [BREAKING] The Dynamic type now returns a []byte of json, it's up to the user to marshall it to the desired type. It can also be null.
- E2E tests now avoid creating tables when possible.
- Methods for getting a guid value (were missing).
- Support obscure column aliases.
- Fixed a panic when using the xByY methods on a null value.
- Fixed race in closing the client.
- Fixed special float values not being parsed correctly.
- [BREAKING] The minimal go version is now 1.22
- [BREAKING] [MAJOR] Split the main module into two packages:
- azkustodata - contains querying, management APIs.
- azkustoingest - contains ingestion in all its forms.
- [BREAKING] [MAJOR] New API for querying, see MIGRATION.md for more details.
- [BREAKING] [MAJOR] Constructing ingest clients is now done using a KustoConnectionStringBuilder, and not a client struct.
- [BREAKING] [MAJOR] Changes in the kusto type system:
- Kusto values will now return a pointer when they are nullable. This applies to all types except for string.
- Decimal values are now represented as
decimal.Decimal
instead ofstring
. This is to maintain efficiency and ease of use.
- In addition, passing a default database and table for ingestion is not necessary anymore, and can be done using Options.
// before: queryClient := kusto.New("https://ingest-somecluster.kusto.windows.net") client := ingest.New(quetryClient, "some-db", "some-table") // after: client := azkustoingest.New("https://ingest-somecluster.kusto.windows.net", azkustoingest.WithDefaultDatabase("someDb"), azkustoingest.WithDefaultTable("someTable"))
- Added autocorrection for endpoints for ingest clients. When creating a client, the "ingest-" will be added or removed as needed. To avoid this behavior, use the
azkustoingest.WithoutEndpointCorrection()
option. - ManagedStreamingClient constructor now only requires the query endpoint, and will infer the ingest endpoint from it. If you want to use a different endpoint, use the
azkustoingest.WithCustomIngestConnectionString()
option. - Removed the old deprecated Stream() method on queued ingest client, instead use azkustoingest.NewStreaming() or azkustoingest.NewManaged() for proper streaming ingest client.
- Removed
QueryIngestion()
option for Query client. If you want to perform commands against the dm, create a query client with the "ingest-" endpoint.
- Binary data formats are no longer compressed, as it is inefficient.
- Type aliases for int32 now work correctly when converting.
- Queries are no longer progressive by default.
ResultsProgressiveDisable()
has been removed.- Use
ResultsProgressiveEnabled()
to enable progressive queries.
- Add file options: RawDataSize, CompressionType
- New package ingest/ingestoptions now contains Compression properties (in the future will hold DataFormat)
- String quoting in default value of query parameters
- Size used for RawDataSize taken from gzip reader was of the gzip size and not the original reader size
- Support new playfab domain
- Fixed deadlock when having high number of concurrent queries
- Fixed wrong endpoint error not triggering
- Support streaming for blob, for Managed client as well.
- Support more urls for kusto, including http and port.
- Fixed wrong context deadline setting
- Fixed accepting empty url.
- Modified
once.go
to resetsync.Once
instance when an error occurs
ServerTimeout
Query Option- The timeout to the server will be set to the value of this option, or to none if
RequestNoTimeout
is set to true. - If it is not provided, the timeout will be set by the context (the old behaviour).
- If a context timeout is not provided, it will fall back to a default value by the type of request.
- The timeout to the server will be set to the value of this option, or to none if
- Support for
IgnoreFirstRecord
ingestion option
MgmtOption
is deprecated. From now on bothQuery
andMgmt
acceptQueryOption
,MgmtOption
will remain as an alias until the next version.
AttachPolicyClientOptions
method fixed by @JorTurFer
AllowWrite
has been a no-op for a while. It is now finally removed.
- Fixed parsing of errors in queries
- Added kql.Builder struct for safe building of KQL statements from variables without use of 'Unsafe' mode.
- Simpler handling of query parameters using kql.Parameters struct.
- All of the docs and examples have been updated to use it
- [DEPRECATED] The old query builder
- Added Quickstart app
- TokenCredential support for authentication.
- No redirects are allowed by default.
- Replace non-ascii characters in headers to be in line with the service.
- DefaultCredential now uses the same HTTP client as the rest of the SDK.
- Support for new trident url
- Fixed Queue Uri not being correct for different clouds
- Bumped azblob to 1.0.0
- Fixed Storage Uri not being correct for different clouds
- Bump golang.org/x/net from 0.4.0 to 0.7.0
- [BREAKING] Add validation for trusted endpoints by @ohadbitt
- Send http headers under the new unified format
- Internal Refactoring
- Issue with managed identity parameters
- Issue with queued ingestion to other clouds
- [BREAKING] The minimal go version is now 1.19
- [BREAKING] Moving to a connection-string based approach to creating and authenticating clients.
- Implicit cloud detection.
- All of our operations now share the same HTTP client inside the kusto client object.
- Various goroutine leaks.
- Fetching ingestion resources is now done more consistently.
- Removed the header caching mechanism from streaming ingestion.
- Default values for parameters not parsing correctly
- Goroutine leak when streaming ingestion fails
- Leaks in tests
- Setting a mapping now implies the ingestion format
- Possible context race
- Json parsing errors now display the failed json string
- Deprecate AllowWrite - now it is the default like in other SDKs.
- Remove mutex from query client. Now queries can run in parallel, achieving much better performance.
- Column.Type assignment. Was using string, now using types. by @jesseward
- Lint and test fixes
Application
andUser
asClientRequestProperties
to set thex-ms-app
andx-ms-user
headers, and the matching fields in.show queries
.
- All missing client request properties, and the ability to use custom ones using
CustomQueryOption
- The option to not parse the response when querying, but to receive the json directly -
QueryToJson
- Various lint fixes and code improvements
- Make clients closeable
- Support port in http host
- Retry mechanism for throttled requests
- Custom http options for all clients
Ingestion.Stream
has been deprecated in favor of dedicated streaming clients -ingest.Streaming
andingest.Managed
.RowIterator.Next
andRowIterator.Do
are now deprecated and replaced byRowIterator.NextRowOrError
andRowIterator.DoOnRowOrError
.
- RowIterator.Next and RowIterator.Do will return the first error they encounter, including in-line errors or partials successes and finish.