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

转义JSON键名中的特殊字符为什么要加载到BigQuery或Hive,json,hive,key,special-characters,google-bigquery,Json,Hive,Key,Special Characters,Google Bigquery,我有一个json文件,其中一个键包含一个特殊字符“-”。JavaScript不允许在名称中使用它,所以BigQuery不允许 {“时间戳”:“2016-06-01T00:10:55.307Z”,“ip”:“71.223.x.x”,“用户id”:“5755w33e95f626jyh3d31”} 正在将数据加载到BigQuery(从UI)中,我不知道如何引用“用户id” 我试着引用它,转义引号,把它们放在方括号里——什么都不起作用。表明这是不允许的。我能怎么办?JSON的生成方式超出了我的控制 在H

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

{“时间戳”:“2016-06-01T00:10:55.307Z”,“ip”:“71.223.x.x”,“用户id”:“5755w33e95f626jyh3d31”}

正在将数据加载到BigQuery(从UI)中,我不知道如何引用“用户id”

我试着引用它,转义引号,把它们放在方括号里——什么都不起作用。表明这是不允许的。我能怎么办?JSON的生成方式超出了我的控制


在Hive中也是如此。

不幸的是,您无法将这些JSON对象直接加载到BigQuery中(通过“bq加载”或web UI的“创建表”流),因为“-”不是bq表字段名中的有效字符。换句话说,无法创建模式与此JSON数据匹配的BQ表

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

通过选择一个模糊的字符作为字段分隔符和引号字符(在输入数据中任何地方都不存在),您的输入数据可能无需修改即可加载。我建议从这个图表的下半部分选择一些东西:

一旦它作为单个字符串列被接收到BQ中,您就可以使用
JSON\u EXTRACT\u SCALAR
根据需要提取字段。例如:

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

在配置单元中,如果列具有SQL中特殊的字符,则可以使用倒勾(`)。尝试从中选择'user id',谢谢,这正是我所做的。