使用 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":"30","employee":"jack","age":"50","employee":"michael","age":"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 倍?