【问题标题】:Create table in bigquery fails when the JSON key contains hyphen当 JSON 键包含连字符时,在 bigquery 中创建表失败
【发布时间】:2019-02-05 00:47:51
【问题描述】:

我有一个来自 Firebase 备份的 JSON 数据。 生成的数据是这样的,每个键前面都有一个连字符。

样本数据如下:

"-GuGCJDEprMKczAMDUj8":{"deviceId":"399a649c6cee6209","dow":"Thursday","downloadFlag":"N","event":"streamStart","halfHourFull":"18h1","liveFlag":"Y","localDate":"2009-01-01","localHalfHour":1,"minutesSinceMidnight":1080,"quarterHourFull":"18q1","stationName":"hit 105","streamListenMethod":"Headphones","timestampLocal":"2009-01-01T18:00:33.679+10:00","timestampUTC":"2009-01-01T08:00:33.679Z"}

当我们尝试将该数据加载到 Bigquery 中时,会遇到以下错误:

字段只能包含字母、数字和下划线,以 一个字母或下划线,长度最多为 128 个字符。

这是一个大查询限制吗? 如果是,那么这里提出的解决方案是什么。

非常感谢任何帮助/建议。

【问题讨论】:

    标签: json firebase firebase-realtime-database google-bigquery


    【解决方案1】:

    这是一个大查询限制吗?如果是,那么这里提出的解决方案是什么。

    您需要改用不同的字段名称。一种选择是将数据加载到单个 STRING 列中,例如通过使用'CSV' 字段分隔符为'|'(或任何其他未出现在数据中的字符)的格式。然后你可以使用JSON_EXTRACT_SCALAR函数从JSON中提取字段,例如:

    CREATE TABLE dataset.table AS
    SELECT
      JSON_EXTRACT_SCALAR(json_string, '$.-GuGCJDEprMKczAMDUj8.deviceId') AS deviceId,
      JSON_EXTRACT_SCALAR(json_string, '$.-GuGCJDEprMKczAMDUj8.dow') AS dow,
      JSON_EXTRACT_SCALAR(json_string, '$.-GuGCJDEprMKczAMDUj8.downloadFlag') AS downloadFlag,
    ...
    FROM dataset.single_column_table
    

    【讨论】:

    • 我的 JSON 是一行,而且非常大,因此看起来模式中的列数在尝试加载数据时会导致过多的开销。 bigquery 中没有任何选项,我可以在加载数据时忽略 JSON 的特定键。
    • 查看ignoreUnknownValues 加载作业选项。
    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2019-05-26
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多