使用 BigQuery REST 或 Java API 运行查询以获取 JSON 输出格式

Posted

技术标签:

【中文标题】使用 BigQuery REST 或 Java API 运行查询以获取 JSON 输出格式【英文标题】:Use BigQuery REST or Java API to run query to get JSON output format 【发布时间】:2017-12-23 18:48:34 【问题描述】:

我正在尝试使用 google-cloud API 对表运行查询并以 JSON 格式获取结果。到目前为止,我已经探索了以下解决方案,但没有一个是令人满意的:

使用TO_JSON_STRING函数修改SQL。它必须修改原始SQL。并且 JSON 格式与导出表格时使用的 JSON 格式不同。 使用REST API,但是我还没有找到支持JSON输出格式的相关文档。 我发现 BigQuery 命令支持查询数据并生成 JSON 格式,如 bq query --format json --project_id myProject "select * from sandbox.keweiquerytable"。所以我自然认为它应该在后台调用一个 REST API。但是如何找到相关的 REST API?

【问题讨论】:

你见过这个问题吗?它通过使用curl 来获取JSON 格式的查询结果:***.com/questions/45108038/…。您可以从 Java 代码发出 POST 请求,而不是使用 curl 谢谢。进行 REST 调用将获得更“通用”的 JSON 格式输出。但不是行的 JSON 表示。我希望类似以下内容(bigquery web ui 或 bq 命令中的相同 JSON):bq query --format json --project_id my-test-project "select * from sandbox.employees" 将得到以下结果 ["employee":"peter","age":"40","employee":"john","age":"30","employee":"jack","age":"50","employee":"michael","age":"20","employee":"eric","age":"60"] 您需要自己执行该转换。 谢谢。如果我理解正确,我可以同时使用低级 REST API 或高级 BigQuery 客户端库。但无论我选择哪种解决方案,我都必须手动转换查询响应以获得与 web ui/export 中相同的 JSON 格式,例如:["employee":"peter","age":"40", ...]。目前,除了使用TO_JSON_STRING 函数外,还没有对这种转换的原生支持。 bq query --format json ... 工具在后台使用 REST API,但它的 python 实现“手动”将 REST 响应转换为我们看到的 json 输出 ["employee":"peter","age":"40"] 听起来不错。 【参考方案1】:

目前,我们有两种可能的解决方案:

    使用TO_JSON_STRING函数直接获取行的JSON表示形式的查询结果,如["employee":"peter","age":"40","employee":"john","age":"3‌​0","employee":"jac‌​k","age":"50","emp‌​loyee":"michael","ag‌​e":"20","employee"‌​:"eric","age":"60"] 使用高级 BigQuery 客户端库或低级 REST API,但我们必须自己执行到 JSON 的转换。

【讨论】:

以上是关于使用 BigQuery REST 或 Java API 运行查询以获取 JSON 输出格式的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:使用 REST API 加载表时“未找到”数据集

通过 POST 将 CSV 数据发送到 BigQuery REST API

Go Iterator 从 Bigquery 读取 100 万行,比 Java 或 kotlin 慢 10 倍?

使用 Java 将 JSON 流式传输到 BigQuery

在 Java 中将 protobuf 转换为 bigquery

如何使用 Java 防止 XSS 攻击或 Rest API JSON 中的不可信数据?