You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks外部链接查询:如何用NextChunkInternalLink获取下一分块?

处理Databricks SQL查询的分块数据获取

要使用NextChunkInternalLink获取下一分块数据,按以下步骤操作:

  • 拼接完整请求URL:NextChunkInternalLink返回的是相对路径,需要和创建Databricks Client时用的基础URL(如https://....azuredatabricks.net/)拼接成完整地址。注意处理路径斜杠,避免重复(可通过Uri类自动处理格式问题)。
  • 携带认证信息:请求下一分块时,需在HTTP请求头中添加Authorization: Bearer {你的个人AccessToken},和创建Databricks Client时使用的token一致。
  • 循环读取分块:读完当前分块后,检查是否存在NextChunkInternalLink,若有则重复请求逻辑,直到无下一分块为止。

修改后的完整代码示例:

var statement = SqlStatement.Create(processor.Sql, warehouseId);
statement.Disposition = SqlStatementDisposition.EXTERNAL_LINKS;

var databricksBaseUrl = "https://....azuredatabricks.net/";
var personalAccessToken = "你的AccessToken";
_client = DatabricksClient.CreateClient(databricksBaseUrl, personalAccessToken);

var result = await _client.SQL.StatementExecution.Execute(statement, cancellationToken);

// 遍历所有外部链接,处理分块数据
foreach (var link in result.Result.ExternalLinks)
{
    string currentChunkUrl = link.ExternalLink;
    while (!string.IsNullOrEmpty(currentChunkUrl))
    {
        // 构造请求并添加认证头
        var request = new HttpRequestMessage(HttpMethod.Get, currentChunkUrl);
        request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", personalAccessToken);

        // 发送请求并确保响应正常
        using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
        response.EnsureSuccessStatusCode();
        
        // 读取当前分块的行数据
        await foreach (var row in response.Content.ReadFromJsonAsAsyncEnumerable<List<string?>>(cancellationToken))
        {
            // TODO: 写入你的业务处理逻辑
        }

        // 解析响应中的下一分块链接
        var chunkMeta = await response.Content.ReadFromJsonAsync<ChunkResponseMeta>(cancellationToken);
        if (!string.IsNullOrEmpty(chunkMeta.NextChunkInternalLink))
        {
            // 拼接基础URL与相对路径,生成完整请求地址
            currentChunkUrl = new Uri(new Uri(databricksBaseUrl), chunkMeta.NextChunkInternalLink).ToString();
        }
        else
        {
            currentChunkUrl = null;
        }
    }
}

// 用于反序列化分块响应元数据的模型类
public class ChunkResponseMeta
{
    public string? NextChunkInternalLink { get; set; }
    // 若需要其他响应字段,可在此添加
}

注意事项:

  • 定义ChunkResponseMeta类是为了从分块响应中解析出NextChunkInternalLink,因为读取行数据时无法直接获取该字段。
  • 建议复用HttpClient实例,避免频繁创建导致资源浪费。
  • 每次请求后验证响应状态码,及时处理HTTP错误。

内容的提问来源于stack exchange,提问作者Gargoyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:07:15