BigQuery - Apache Avro 库无法解析标头,并出现以下错误:数据文件无效。魔法不匹配

问题描述 投票:0回答:2

我第一次弄乱 avro 文件。

我得到了很多带有编码数据的 csv 文件,并且刚刚对应该发送到 BigQuery 的数据进行了 python 处理。最后,我得到了在 avsc 中收到的带有 csv 数据的模式节拍。到目前为止,一切都很好。

现在我明白我需要在 BigQuery 中创建将接收此数据的表。我只是尝试创建一个空白表并插入收到的架构,但失败了。我收到以下信息:“读取数据时出错,错误消息:Apache Avro 库无法解析标头,并出现以下错误:数据文件无效。Magic 不匹配:gs://xxx/xxx/test.avsc” 。我尝试通过此在线页面将 avsc 转换为 json:https://json-schema-validator.herokuapp.com/avro.jsp 但没有成功。

这是进程路径吗?由于我可以在解码后生成记录,因此我知道该模式并不错误。所以我怀疑我是否做对了。

python google-bigquery avro
2个回答
0
投票

您无法使用 avsc 文件创建表架构。您可以从 CSVAVRO(未压缩)加载数据并启用模式自动检测。另外,如果您的文件位于本地数据源上,请查看this

由于您使用的是 python 和 CSV 文件,您可以尝试这样的操作:

from google.cloud import bigquery
client = bigquery.Client()
filename = '/path/to/file.csv'
dataset_id = 'my_dataset'
table_id = 'my_table'

dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.skip_leading_rows = 1
job_config.autodetect = True

with open(filename, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_ref, job_config=job_config)

job.result()  # Waits for table load to complete.

print("Loaded {} rows into {}:{}.".format(job.output_rows, dataset_id, table_id))

0
投票

确保您的 Avro 文件在开头包含架构,否则 BQ 无法解码它。

© www.soinside.com 2019 - 2024. All rights reserved.