转义json键名中的特殊字符为什么要加载到bigquery或hive中

pexxcrt2  于 2021-06-29  发布在  Hive
关注(0)|答案(1)|浏览(298)

我有一个json文件,其中一个键包含一个特殊字符“-”。javascript不允许在名称中使用它,因此不允许bigquery。
{“timestamp”:“2016-06-01t00:10:55.307z”,“ip”:“71.223.x.x”,“用户id”:“5755w33e95f626jyh3d31”}
正在将数据加载到bigquery(从ui)中,我不知道如何引用“用户id”。
我试着引用它,转义引号,把它们放在方括号里-什么都没用。这条线索表明这是不允许的。我能怎么办?json的生成方式超出了我的控制。
hive 里也一样。

vzgqcmou

vzgqcmou1#

不幸的是,您不能将这些json对象直接加载到bigquery中(通过“bq load”或web ui的“create table”流),因为'-'不是bq表字段名中的有效字符。换句话说,没有办法创建一个bq表,它的模式与这个json数据匹配。
另一种方法是将json数据作为一个未解释的json字符串(即,具有一个字符串类型字段的bq表)加载到bq中,然后运行一个查询以拉出相关字段来填充bq表。
通过选择一个模糊的字符作为字段分隔符和引号(在输入数据中任何地方都不存在的东西),您的输入数据可能可以不经修改地加载。我建议你从这张图表的下半部分选择一些东西:
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

相关问题