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

时间:2019-07-04 02:34:57

标签: firebase-realtime-database google-bigquery google-cloud-storage

我正在尝试将Firebase实时数据库的备份从Google云端存储导入到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

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

我尝试了不同的数据集和表名,调整了表的类型,仔细检查了以下各项以寻找答案,但没有任何运气:

基于here,我猜测错误是“ Name”中有一个空格(可能来自数据库?),并且我有许多由firebase生成的随机密钥(以开头的“-”开头)。这是一个非常大的数据集,因此即使程序不冻结(甚至纯文本编辑器),我也无法解压缩并打开初始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:   意外的标记;无法解析值;无法解析值;可以   不解析值;无法解析值;无法解析值;可以   不解析值;无法解析值;无法解析值;可以   不解析值;无法解析值;无法解析值;可以   不解析值;解析器在字符串结尾之前终止

Screenshot of error

我对sed语句是陌生的,所以也许我打错了脚本或写错了脚本,导致尝试创建无效的JSON对象?

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

1 个答案:

答案 0 :(得分:0)

如果您完全复制了错误消息,则表明字符串“名称”中存在空格或其他空白字符。该空白字符无效,因为错误消息告诉您。您必须仔细检查数据,以找出该无效字符的确切来源。