有没有一种简单的方法可以将 BigQuery 中的行转换为 JSON?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以将 BigQuery 中的行转换为 JSON?【英文标题】:Is there an easy way to convert rows in BigQuery to JSON? 【发布时间】:2017-01-11 17:40:15 【问题描述】:我正在尝试将 BigQuery 表中的行减少为 JSON 字符串。 有没有一种在标准 SQL 中快速执行此操作的方法?
我想过用自定义函数调用js,但它强迫我声明UDF的输入类型,所以我无法泛化这个函数。
【问题讨论】:
1) 根据您的措辞,我认为这是您需要完成的一次性任务。为什么你需要概括它? 2)您是否仅限于将其作为纯查询,或者您在实践中使用了一些您可以轻松使用的客户端(如 python、go 等)? @mikhail-berlyant 1) 我们正在尝试将分散的数据迁移到 bigquery,并将一些数据合并为 JSON 是我们当前的计划。因此,除非使用 JSON 是一个糟糕的主意。概括应该不是一个坏主意。 2)如果我正确理解了您的问题,那么自包含 bigquery 内容会很好 1) 您的“分散”数据是否已经在 BigQuery 或其他地方? 2)您是否理解/接受将数据组合成 JSON 字符串的后果。你很可能会在查询时支付更高的价格。 @mikhail-berlyant 1) 我试图减少的数据已经在 BigQuery 上。我本质上是在创建一个视图。 2) 是/否。一些数据具有可变数量的数据类型,所以我认为使用 JSON 字符串可以使其更灵活。我假设当您说“价格”时,您指的是性能和可用性? 我引用的是 $ 金额。 BigQuery 是列式的,因此您只需为查询中引用的列付费。如果您将多个字段(列)合并为一列 - 即使您对非常狭窄的路径感兴趣,您也将为整列付费 【参考方案1】:现在可以使用 TO_JSON_STRING
,当您想要 pass a row from your table to a javascript UDF 时,它也可以提供帮助。
#standardSQL
WITH MyTable AS (
SELECT 1 AS x, 'foo' AS y, true AS z UNION ALL
SELECT 2, 'bar', false
)
SELECT TO_JSON_STRING(t) AS json
FROM MyTable AS t;
【讨论】:
错误:TypeError: s.stringify is not a function at structasjson(STRUCTJSON.stringify(s);
。我会更新答案。
Brossard,哇,伙计,这是我在 SO 上得到的最快响应
哈哈,我猜时间安排得很好。我意识到 OP 现在可以使用 TO_JSON_STRING
来解决他的问题,但是如果您想在 JavaScript UDF 中将结构转换为 JSON,您仍然可以使用 JSON.stringify()
。
它尚不可用 :( 我试图在***.com/a/44031989/6253347 中尽可能地描述它,但请留意BigQuery release notes 以获取“真实”文档。【参考方案2】:
如果您想将所有行快速粘合到一个 JSON 块中,您可以执行以下操作:
SELECT CONCAT("[", STRING_AGG(TO_JSON_STRING(t), ","), "]")
FROM `project.dataset.table` t
这将生成一个包含 1 行的表,其中包含一个完整的 JSON blob,用于汇总整个表。
【讨论】:
以上是关于有没有一种简单的方法可以将 BigQuery 中的行转换为 JSON?的主要内容,如果未能解决你的问题,请参考以下文章