google-bigquery - BigQuery 中的映射(动态键)

标签 google-bigquery

在bigquery中,如果我们对构造json输出感兴趣,通常可以在事先知道key的情况下对json对象使用struct。

SELECT TO_JSON_STRING(STRUCT(key1))
FROM (SELECT "val1" as key1 UNION ALL
      SELECT "val2" as key1)


Result
{"key1":"val1"}
{"key1":"val2"}
但是在key是动态的情况下,我们真的想要一个map类型,类似于avro map type
例如
SELECT *
FROM (SELECT "key1" as key, "val1" as val UNION ALL
      SELECT "key2" as key, "val2" as val)

should return
{"key1": "val1", "key2": "val2"}
有没有办法使用 BigQuery SQL 实现这一点?

最佳答案

下面是 BigQuery 标准 SQL
像下面这样简单的东西应该会产生预期的结果

#standardSQL
WITH `project.dataset.table` AS (
  SELECT "key1" AS key, "val1" AS val UNION ALL
  SELECT "key2" AS key, "val2" AS val
)
SELECT '{' || STRING_AGG(REPLACE(TRIM(FORMAT('%T', t), '()'), '", "', '": "'), ', ') || '}' AS return
FROM `project.dataset.table` t
带输出
Row return   
1   {"key1": "val1", "key2": "val2"}     

关于google-bigquery - BigQuery 中的映射(动态键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63490681/

相关文章:

sql - 删除 BigQuery STRING 字段中的重叠子字符串

sql - 从另一个表创建 View

sql - 查找多个点之间的距离 - 纬度/经度

google-bigquery - 半连接表达式必须是逻辑 AND 的一部分

REST Api 调用 Google 大查询

java - Big Query Java 客户端的代理设置

google-bigquery - 从 Google BigQuery 导出到 CloudSQL?

google-cloud-platform - Multipolygon 无法在 Google BigQuery GIS 中上传

google-analytics - hits.page.searchKeyword 与搜索页面 url 不匹配

google-bigquery - COUNT(DISTINCT foo) 内的逻辑检查和性能问题