【发布时间】: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/bxparks/bigquery-schema-generator/issues/14
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
标签: firebase-realtime-database google-bigquery google-cloud-storage