无效的字段名称“名称”。字段只能包含字母、数字和下划线,以字母或下划线开头,最多 128 个字符

Posted

技术标签:

【中文标题】无效的字段名称“名称”。字段只能包含字母、数字和下划线,以字母或下划线开头,最多 128 个字符【英文标题】:Invalid field name "Name ". Fields must contain only letters, numbers, and underscores, start with a letter or underscore, and be at most 128 char 【发布时间】:2019-07-04 02:34:57 【问题描述】:

我正在尝试将 Firebase 实时数据库的备份从 Google Cloud Storage 导入 BigQuery 并收到以下错误:

字段名称“名称”无效。字段只能包含字母、数字和下划线,以字母或下划线开头,并且长度最多为 128 个字符。表:tabletest

我尝试了返回以下错误第二个数据集

无效的字段名称“-Kq4_0dsRwKfOGGxGoQv”。字段只能包含字母、数字和下划线,以字母或下划线开头,并且长度最多为 128 个字符。表:tabletest

这是第二个数据集

"users":"someUserID_abc":"tests":"-Kq4_0dsRwKfOGGxGoQv":"07/02/2019 19:44:22","-Kq4_vUQTQ3b6gqMkfRL":"07/02/2019 19:48:20","-Kq4a84n9WMu3NGiE4qW":"07/02/2019 19:53:36"

在我最初的(非常大的)数据集中,有很多独特的 firebase 键,它们是 uniquely generated by firebase,通常以“-”开头(这似乎会导致 BigQuery 出现错误)。

我在创建表格屏幕上的设置是:

Source
Create table from: Google Cloud Storage
Select file from GCS bucket: myproject-backups/2019-07-03T02:23:34Z_myproject_data.json.gz
File format: JSON (Newline delimited)

Destination
Project name: myproject
Dataset name: database
Table type: Native table
Table name: tabletest


Schema
Auto detect
(checked) Schema and input parameters
enter code here

单击“创建表”屏幕上的“创建表”按钮后,出现上述错误。

我尝试了不同的数据集和表名称,调整了表类型,查看了以下每个答案,但没有任何运气:

https://github.com/metabase/metabase/issues/4087

https://cloud.google.com/bigquery/docs/schemas

https://github.com/bxparks/bigquery-schema-generator/issues/14

https://github.com/metabase/metabase/pull/4707

https://github.com/metabase/metabase/issues/3997

loading data from a datastore backup into big query throws invalid field name error

基于here,我猜错误是“Name”中有一个空格(可能来自数据库?)我有很多由firebase生成的随机密钥(以a开头领导 ”-”)。这是一个非常大的数据集,所以我什至无法在程序冻结的情况下解压缩并打开初始 gzip 文件(甚至是纯文本编辑器)。

编辑: 我创建了以下脚本来 gunzip,“清理”.gzip 中所有键的数据,然后重新 gzip 文件:

# remove spaces, replace leading dashmarks (replace - with the word 'dashmark'), add an underscore before numbers
file=$"myfile.json.gz"
gunzip "$file"
sed -e "s/Name /Name/g" -e "s/-/dashmark/g" -e "s/\"\([0-9]+\)/\"_\1/g" -e "s/,\"\([0-9]+\)/,\"_\1/g" -e "s/,\"\"/\,\"_\"/g" -e "s/\"\"/\\"_\"/g" < "$file%.gz" | gzip -c > "$file%.gz.gz"

这似乎消除了“无效的字段名称...”错误,但引入了以下错误:

读取数据时出错,错误信息:解析JSON失败: 意外的标记;无法解析值;无法解析值;可以 不解析值;无法解析值;无法解析值;可以 不解析值;无法解析值;无法解析值;可以 不解析值;无法解析值;无法解析值;可以 不解析值;解析器在字符串结束前终止

诚然,我对sed 语句很陌生,所以也许我错字或误写了脚本,导致在我的尝试中创建了无效的 JSON 对象?

有谁知道如何从 .gzip 中的所有键中删除空格/特殊字符(或解决此错误以将 Firebase RTD .gzip 导入 BigQuery 的任何其他方式)?

【问题讨论】:

请在您的 json 文件中包含示例测试数据。 @Christopher 我已经更新了问题以包含带有相应错误的示例测试数据 字段名"-Kq4_0dsRwKfOGGxGoQv"是否以减号(-)开头? @i486 是的,它以减号 (-) 开头。它是由 firebase firebase.google.com/docs/database/admin/… 生成的唯一密钥。我相当有信心减号 (-) 是问题所在,但不确定如何解决它(可能删除/替换它,但说起来容易做起来难)。 firebase 生成的几乎所有(如果不是全部)唯一键都以这个减号 (-) 开头,所以我的初始(非常大)数据库有很多这样的,并且太大而无法在我的计算机上打开。 我尝试加载您的第二个数据集,是的,它失败并出现同样的错误,删除“-”解决了问题i.stack.imgur.com/7GiMl.png。您可能需要解压缩/编辑/重新压缩 gz 文件 --> unix.com/shell-programming-and-scripting/…。考虑这一点 --> firebase.google.com/docs/projects/bigquery-export 【参考方案1】:

如果您准确地复制了错误消息,则字符串“Name”中似乎有一个空格或其他一些空白字符。正如错误消息告诉您的那样,该空白字符无效。您必须深入挖掘您的数据以找出该无效字符的确切来源。

【讨论】:

感谢您的回复。我有一个非常大的数据集,无法合理地手动挖掘以删除每个空间(或者正如我即将发现的那样,对于生成的每个随机 firebase 密钥,前导“-”)。有没有办法以编程方式或系统地清理大型 .gzip 文件中的数据(替换空格和前导“-”),以便正确导入 BigQuery? 也许吧,但我不知道它是什么。我只能告诉你我是如何解释那个错误信息的。 无赖。如果还没有办法,我想这对任何想要使用从他们的 Firebase 数据库中获取见解的人(并希望通过 BigQuery 将其保存在 Google 家族中)的人都会有所帮助。不确定您是否能够将问题传递给那里的相应派对! :) 是否有计划在此处 (firebase.google.com/docs/projects/bigquery-export) 将实时数据库添加到 Firebase 的集成中?

以上是关于无效的字段名称“名称”。字段只能包含字母、数字和下划线,以字母或下划线开头,最多 128 个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用无效标识符作为 django 表单字段名称

sql中如何按某字段值的首字母分组?

在 django(postgres 后端)中按数字字符串排序查询结果

字段名称 user_username 对模型配置文件无效

数据库保留关键字

SQL中怎么设置字段为10位数字。