Bigquery:使用字节数据上传 json 数据会出错

Posted

技术标签:

【中文标题】Bigquery:使用字节数据上传 json 数据会出错【英文标题】:Bigquery: uploading json data with Byte data gives error 【发布时间】:2021-08-02 13:55:38 【问题描述】:

我有一个使用以下方法创建的小表:

create table test_table( 
rightData Bytes,
leftData Bytes,
iterationID integer);

我正在使用 json 文件将数据加载到此表中,如下所示:


    "rightData": "F16060D6D7E260C607E40B1106B02000057C",
    "leftData": "C1D8D9D9F0F360F8F1F8606060D6D7E260C6F3F5F4F0F5C1C8C1D8F8F8606060F9F1F9",
    "iterationID": "10"

当我尝试上传这个 json 文件时,我得到了这个错误:

提供的架构与表 usis-mfb-cms-dev-npe-df0c:usis_mfb_compare_report.test_table 不匹配。字段 rightData 已将类型从 BYTES 更改为 STRING

Json 文件上传:

【问题讨论】:

【参考方案1】:

您可以在创建表时添加架构。

像这样

【讨论】:

嗨 Sakshi,感谢您快速回复。我展示的例子是一个简单的例子......我们的数据更复杂。此外,实际上不可能每次运行作业都以这种方式添加每一列。我们正在寻找一种方法来接受以十六进制值作为字节或字符串的数据。但在 BigQuery 中,这会在两种数据类型之间不断波动。因此,我们正在寻找的是 bigQuery 在自动检测列类型时的一致行为。 如果我们给 Strings,那么它会抛出 Bytes data 的错误。如果我们将字节作为列数据类型,那么我们也会将错误视为字符串数据类型。在任何一种情况下,json 中的列数据都只是十六进制值。 BigQuery 既不接受十六进制值作为字节也不接受大 json 文件(100MB 到 2 GB)的字符串。 我还发布了一个查询示例:***.com/questions/68620297/… .. 在此链接中,为了便于理解,简化了表格。 嗨@hayyal_efx,这是 Bigquery 的预期行为,如果您使用自动检测,biquery 会从您上传的数据中读取。如果您的数据具有特殊的任何字符(如“/”等)或数据的最大长度至少为 128 个字符,它将检测数据类型为字节 推荐的解决方法是将字段显式转换为 BYTE 数据类型。供参考:link【参考方案2】:

感谢 Sakshi 的指导。感谢您抽出宝贵时间帮助我们。

作为一种变通解决方案,我们在所有字节数据的开头和结尾附加了“#”。 有了这个,BigQuery 会将所有这些 byteData 视为字符串。 然后通过将所有 BYTE 列更改为字符串来重新创建表。 这对我们的要求来说是一个更好的解决方案。

问候 纳加拉吉

【讨论】:

以上是关于Bigquery:使用字节数据上传 json 数据会出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 文件上传到 BigQuery

使用控制台将多条 JSON 记录加载到 BigQuery

自动将数据上传到 Google Cloud Storage 和 BigQuery

使用 Pandas 或命令行上传到 BigQuery 时出现奇怪的重复字段错误。所有字段唯一

Bigquery 自动转换数据中的字段

从python上传到Bigquery