转义 JSON 键名中的特殊字符 为什么加载到 BigQuery 或 Hive

Escaping special characters in JSON key names why loading into BigQuery or Hive

我有一个 json 文件,其中一个键包含特殊字符“-”。 JavaScript 不允许在名称中使用它,BigQuery 也不允许。

{"timestamp":"2016-06-01T00:10:55.307Z","ip":"71.223.x.x","user-id":"5755w33e95f626jyh3d31" }

正在将数据加载到 BigQuery(来自 UI)我不知道如何引用 'user-id'。

我尝试引用它,转义引号,将它们放在方括号中 - 没有任何效果。 表示不允许。我该怎么办? JSON 是如何生成的是我无法控制的。

在 Hive 中也是如此。

遗憾的是,您无法将这些 JSON 对象直接加载到 BigQuery(通过 "bq load" 或网络 UI 的 "Create Table" 流程),因为“-”不是BQ table 的字段名称中的有效字符。换句话说,无法创建架构与此 JSON 数据相匹配的 BQ table。

另一种方法是将您的 JSON 数据作为未解释的 JSON 字符串加载到 BQ(即,具有一个字符串类型字段的 BQ table),然后 运行 提取相关字段以填充 BQ 的查询 table.

您的输入数据可能可以在不修改的情况下加载,方法是选择一个晦涩的字符作为字段定界符和引号字符——输入数据中任何地方都不存在的东西。我建议从这张图表的下半部分挑选一些东西:

https://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout

将其作为单个字符串列引入 BQ 后,您可以使用 JSON_EXTRACT_SCALAR 根据需要提取字段。例如:

SELECT
  JSON_EXTRACT_SCALAR(json, '$.timestamp') timestamp,
  JSON_EXTRACT_SCALAR(json, '$.ip') ip,
  JSON_EXTRACT_SCALAR(json, '$.user-id') user_id
FROM
  table