csharp/Microsoft.Azure.Databricks.Client/UnityCatalog/TablesApiClient.cs (131 lines of code) (raw):
using Microsoft.Azure.Databricks.Client.Models.UnityCatalog;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.Azure.Databricks.Client.UnityCatalog;
public class TablesApiClient : ApiClient, ITablesApi
{
public TablesApiClient(HttpClient httpClient) : base(httpClient)
{
}
public async Task<(IEnumerable<TableSummary>, string)> ListSummaries(
string catalogName,
int? maxResults = 10000,
string schemaNamePattern = default,
string tableNamePattern = default,
string pageToken = default,
CancellationToken cancellationToken = default)
{
var requestUriSb = new StringBuilder(
$"{BaseUnityCatalogUri}/table-summaries?catalog_name={catalogName}&max_results={maxResults}");
if (schemaNamePattern != null)
{
requestUriSb.Append($"&schema_name_pattern={schemaNamePattern}");
}
if (tableNamePattern != null)
{
requestUriSb.Append($"&table_name_pattern={tableNamePattern}");
}
if (pageToken != null)
{
requestUriSb.Append($"&page_token={pageToken}");
}
var requestUri = requestUriSb.ToString();
var response = await HttpGet<JsonObject>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
response.TryGetPropertyValue("tables", out var tablesNode);
response.TryGetPropertyValue("next_page_token", out var nextPageTokenNode);
var tables = tablesNode?.Deserialize<IEnumerable<TableSummary>>(Options) ?? Enumerable.Empty<TableSummary>();
var nextPageToken = nextPageTokenNode?.Deserialize<string>(Options) ?? string.Empty;
return (tables, nextPageToken);
}
public global::Azure.AsyncPageable<TableSummary> ListSummariesPageable(
string catalogName,
int? pageSize = default,
string schemaNamePattern = default,
string tableNamePattern = default,
CancellationToken cancellationToken = default)
{
return new AsyncPageable<TableSummary>(async (pageToken) =>
{
var (tableSummaries, nextPageToken) = await ListSummaries(
catalogName,
pageSize,
schemaNamePattern,
tableNamePattern,
pageToken,
cancellationToken).ConfigureAwait(false);
return (tableSummaries.ToList(), !string.IsNullOrEmpty(nextPageToken), nextPageToken);
});
}
public async Task<(IEnumerable<Table>, string)> List(
string catalogName,
string schemaName,
int? maxResults = default,
string pageToken = default,
bool? includeDeltaMetadata = default,
CancellationToken cancellationToken = default)
{
var requestUriSb = new StringBuilder(
$"{BaseUnityCatalogUri}/tables?catalog_name={catalogName}&schema_name={schemaName}");
if (maxResults != null)
{
requestUriSb.Append($"&max_results={maxResults}");
}
if (pageToken != null)
{
requestUriSb.Append($"&page_token={pageToken}");
}
if (includeDeltaMetadata != null)
{
requestUriSb.Append($"&include_delta_metadata={includeDeltaMetadata.ToString().ToLower()}");
}
var requestUri = requestUriSb.ToString();
var response = await HttpGet<JsonObject>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
response.TryGetPropertyValue("tables", out var tablesNode);
response.TryGetPropertyValue("next_page_token", out var nextPageTokenNode);
var tables = tablesNode?.Deserialize<IEnumerable<Table>>(Options) ?? Enumerable.Empty<Table>();
var nextPageToken = nextPageTokenNode?.Deserialize<string>(Options) ?? string.Empty;
return (tables, nextPageToken);
}
public global::Azure.AsyncPageable<Table> ListPageable(
string catalogName,
string schemaName,
int? pageSize = default,
bool? includeDeltaMetadata = default)
{
return new AsyncPageable<Table>(async (pageToken) =>
{
var (tables, nextPageToken) = await List(
catalogName,
schemaName,
pageSize,
pageToken,
includeDeltaMetadata,
CancellationToken.None).ConfigureAwait(false);
return (tables.ToList(), !string.IsNullOrEmpty(nextPageToken), nextPageToken);
});
}
public async Task<Table> Get(
string fullTableName,
bool? includeDeltaMetadata = default,
CancellationToken cancellationToken = default)
{
var requestUriSb = new StringBuilder($"{BaseUnityCatalogUri}/tables/{fullTableName}");
if (includeDeltaMetadata != null)
{
requestUriSb.Append($"?include_delta_metadata={includeDeltaMetadata.ToString().ToLower()}");
}
var requestUri = requestUriSb.ToString();
return await HttpGet<Table>(this.HttpClient, requestUri, cancellationToken);
}
public async Task Delete(string fullTableName, CancellationToken cancellationToken = default)
{
var requestUri = $"{BaseUnityCatalogUri}/tables/{fullTableName}";
await HttpDelete(HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
}
}